0 Пользователей и 1 Гость просматривают эту тему.
  • 169 Ответов
  • 40644 Просмотров
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Однин из способов сделать магазин быстрее и удобнее для пользователя - использование AJAX подгрузки тела компонента VirtueMart.
Использование подгрузки только нужной части страницы вместо перезагрузки всей страницы имеет немало преимуществ:

1) Экономия трафика
2) Уменьшение нагрузки на сервер
3) Быстрота (как результат 1 и 2)
4) Отсутсвие "мерцания" страницы
5) Эффектно смотрится для юзера

Я приведу пример простейшей реализации, которая позволит перемещаться по категориям через ajax-подгрузку.
На сайте должен быть список категорий магазина: это может быть стандартный модуль меню mod_mainmenu или усовершенствованный модуль категорий VirtueMart - mod_virtuemart_categories.
Условимся что модуль присутсвует на всех страницах сайта, в параметрах модуля указан id списка - catalog

Теперь за дело: добавляем в index.php своего шаблона вот такой код:

Код: php
$script = "
window.addEvent('domready', function(){

loading = false;
$$('#catalog a').each(function (el) {
el.addEvent('click', function (e) {

if (!$('vmMainPage')) return;

(new Event(e)).preventDefault();
if (loading) return;

var container = $('vmMainPage').getParent();

var onComplete = function(responseText, responseXML){
var titleNode = responseXML.documentElement.getElementsByTagName('title')[0];
var bodyNode = responseXML.documentElement.getElementsByTagName('body')[0];
document.title = titleNode.textContent || titleNode.text;
container.setHTML(bodyNode.textContent || bodyNode.text);
loading = false;
}

container.setStyle('position', 'relative');
container.appendChild(
new Element(
'div',
{
'styles' : {
'height': container.offsetHeight,
'width': container.offsetWidth,
'position': 'absolute',
'top': 0,
'left': 0,
'background': '#fff',
'opacity': 0.4
}
}
)
);
container.appendChild(
new Element(
'img',
{
'src': '/media/system/images/spinner.gif',
'styles': {
'position': 'absolute',
'top': '50%',
'left': '50%'
}
}
)
);
 
loading = true;
new Ajax(el.href, {onComplete: onComplete}).request({tmpl: 'xml'});
 
});
 
});
});
";
JHTML::_('behavior.mootools');
$this->addScriptDeclaration($script);

Так как нам нужно подгрузить не только сам компонент, но и новый тайтл, нам нужно обернуть две эти составляющие в какойто контейнет. Это может быть либо JSON, либо XML. Со вторым у меня возникло меньше трудностей, поэтому использую его. Передав в запросе ?tmpl=xml мы тем самым заставляем Joomla запросить не index.php шаблона, а xml.php, который нужно создать рядом с index.php шаблона. Вот его код:
Код
<?php

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );


$this->setMimeEncoding('text/xml');


$title = $this->title;

$body = $this->getBuffer('component');
$body = str_replace('<![CDATA[', '', $body);
$body = str_replace(']]>', '', $body);
?>

<page>
<title><![CDATA[<?php echo $title ?>]]></title>
<body><![CDATA[<?php echo $body ?>]]></body>
</page>
Все, теперь если мы на странице VirtueMart, то клик по меню не приведет к переходу по ссылке, вместо этого сработает скрипт, который подгрузит тело VirtueMart и заголовок страницы.
Пояснения:
catalog - id тега меню(списка категорий) - настраивается в параметрах модуля. Можно использовать любой другой селектор, например $$('.menu a')
vmMainPage - id wrapperа VirtueMart, зашито в коде компонента
'background': '#fff' - цвет оверлея, белый.
'opacity': 0.4 - прозрачность оверлея, 40%
'src': '/media/system/images/spinner.gif' - путь к картинке анимации загрузки

Код протестирован в ff 3, opera 10, ie 8, 7

Впринципе этот скрипт можно вынести из шаблона куда угодно.
Я не касался вопросов хистори браузера, смены адреса (добавления хэша) и др.

Известный факт что Витр - самый популярный, и приэтом самый криворукий магазин на Joomla. Писали его индусы однозначно. И я, хоть и потомок индусов, все же стараюсь забыть свое происхождение и стать профессионалом. Стараюсь изо всех сил, придумываю всякие клевые фигнюшки для вирта, но он ставит палки в колеса повсеместно.
Очередная палка - document.write(бла бла) в дефолтном шаблоне вирта. Скрипты загруженные аяксом не исполняются, а значит не исполнится document.write. А именно этим методом выводятся картинки в попап  на странице категории.
Решение простое. Заменяем в файле \components\com_virtuemart\themes\default\templates\browse\browse_1.php
Код
        <div class="browseProductImageContainer">
       <script type="text/javascript">//<![CDATA[
       document.write('<a href="javascript:void window.open(\'<?php echo $product_full_image ?>\', \'win2\', \'status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=<?php echo $full_image_width ?>,height=<?php echo $full_image_height ?>,directories=no,location=no\');">');
       document.write( '<?php echo ps_product::image_tag( $product_thumb_image, 'class="browseProductImage" border="0" title="'.$product_name.'" alt="'.$product_name .'"' )?></a>' );
       //]]>
       </script>
       <noscript>
           <a href="<?php echo $product_full_image ?>" target="_blank" title="<?php echo $product_name ?>">
           <?php echo ps_product::image_tag( $product_thumb_image, 'class="browseProductImage" border="0" title="'.$product_name.'" alt="'.$product_name .'"' )?>
           </a>
       </noscript>
        </div>
на
Код
        <div class="browseProductImageContainer">
           <a href="<?php echo $product_full_image ?>" target="_blank" title="<?php echo $product_name ?>" onclick="window.open('<?php echo $product_full_image ?>', 'win2', 'status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=<?php echo $full_image_width ?>,height=<?php echo $full_image_height ?>,directories=no,location=no'); return false">
           <?php echo ps_product::image_tag( $product_thumb_image, 'class="browseProductImage" border="0" title="'.$product_name.'" alt="'.$product_name .'"' )?>
           </a>
        </div>

Как видим кода в 2 стало меньше и мы избавились от документ.райт(). Почему изобретатели вирта не додумались до такой записи - загатка. Быть может их просто прикалывает метод document.write, и в новой версии вирта они будут весь код страницы выводить как document.write() и <noscript>обломайся - у тя выкл. js - ты лузер</noscript>

PS: изивинте накипело. решение не проверял, как меня и учил дедушка индус...
« Последнее редактирование: 06.10.2010, 23:55:39 от danik.html »
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

adjuster

  • Давно я тут
  • 786
  • 55 / 2
Re: [howto] AJAX навигация по категориям
« Ответ #1 : 26.08.2010, 17:25:27 »
А как выглядит? - можно пример?
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Re: [howto] AJAX навигация по категориям
« Ответ #2 : 17.09.2010, 02:20:57 »
Народ, если кто так делал - киньте ссылку поглядеть ))
Тема то прикольная... Там люди чуть ли не тысячами бъются как оптимизировать вирт, а ведь проще добавить капельку ajax'а, и все будет красиво и быстро ;)
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

monah1983

  • Осваиваюсь на форуме
  • 12
  • 0 / 0
Re: [howto] AJAX навигация по категориям
« Ответ #3 : 23.09.2010, 22:38:48 »
Скинь ссылку... охота посмотреть, заранее благодарен
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Re: [howto] AJAX навигация по категориям
« Ответ #4 : 23.09.2010, 23:12:12 »
у меня примера нет. И никто видать ниделал. Наверно всем плевать на удобство для пользователей и их время.
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

delomac

  • Захожу иногда
  • 59
  • 2 / 0
Re: [howto] AJAX навигация по категориям
« Ответ #5 : 24.09.2010, 01:35:22 »
Грандиозная идея!
Вот только не заработала у меня. Как только не пробовал, всё-равно страница перезагружается как и без скрипта. Не знаю в чём дело, а разобраться хотелось бы.
Кстати, за модуль категорий СПАСИБО (+ уже поставил)   ;)
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Re: [howto] AJAX навигация по категориям
« Ответ #6 : 24.09.2010, 01:59:23 »
первым делом ставим FireBug. отслеживаем выполнение кода, отсутсвие ошибок js и тд. Если не получится - дай ссылку, посмотрю
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

delomac

  • Захожу иногда
  • 59
  • 2 / 0
Re: [howto] AJAX навигация по категориям
« Ответ #7 : 24.09.2010, 10:36:38 »
БЛИН! ПОТРЯСАЮЩЕ! Просто гениально...

Проблемы была в том, что я копирнул скрипт из этого поста и он не отрабатывал из-за наличия "&nbsp;" во вставленном коде. Теперь бы ещё подружить его как-нибудь с ЧПУ, было бы совсем круто.
*

mrhuge

  • Захожу иногда
  • 222
  • 7 / 0
  • http://muzalliance.ru/
Re: [howto] AJAX навигация по категориям
« Ответ #8 : 24.09.2010, 10:37:31 »
Идея супер! Вставил код в index.php шаблона - вместо catalog поставил manufacturers, так как у меня один модуль имеет id manufacturers, а второй dopmenu. Если второй модуль такой же нужно сделать - то вставить еще раз этот код, но уже с dopmenu?

Что значит $$('.menu a') и далее .each(... не понял.

В общем поставил - вижу что при нажатии на категории и производителей появляется иконка загрузки, но ничего не грузит и зависает. См http://muzalliance.ru/shop/category/2-sintezatori.html
*

delomac

  • Захожу иногда
  • 59
  • 2 / 0
Re: [howto] AJAX навигация по категориям
« Ответ #9 : 24.09.2010, 11:00:20 »
Это у тебя из-за ЧПУ. Отключи-заработает, только что проверял у себя.

Есть ещё вопрос: у меня все без ЧПУ работает, но вот картинка загрузки не отображается. Тобишь фон затемняется, страница категории обновляется, но гиф-ка не показывается при этом... В чём может быть проблема.

Ну и на счет SEF тоже решить бы как-нибудь.
*

mrhuge

  • Захожу иногда
  • 222
  • 7 / 0
  • http://muzalliance.ru/
Re: [howto] AJAX навигация по категориям
« Ответ #10 : 24.09.2010, 11:03:13 »
О точно :) удалил роутер и запахало, только картинка товара не показывается :)

но смотрится красиво :)
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Re: [howto] AJAX навигация по категориям
« Ответ #11 : 24.09.2010, 11:13:05 »
Обновил код. теперь работает и с чпу!
Объясню чуток про селекторы, не помешает ))
в mootools функция $ принимает в качестве параметра строку-идентификатор, и возвращает только один элемент, с этим идентификатором, что логично.
для запроса css-селектора есть функция $$, аналогичная jquery'вскому $
тоесть в jquery это $('#catalog a'), а в мутулзе $$('#catalog a').
Тоже самое в мутулзе можно получить и так: $('catalog').getElements('a').

чтоб навесить на все менюшки можно написать либо так:
$$('.menu a')
либо так:
$$('#manufacturers a, #dopmenu a')
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Re: [howto] AJAX навигация по категориям
« Ответ #12 : 24.09.2010, 11:15:06 »
кстати имеется серьезная проблема... не меняется title страницы, что выглядит коряво (((
Кто предложит решение - тому пинок под зад (шутко) ;)
я думаю надо копать в сторону json'a...
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

mrhuge

  • Захожу иногда
  • 222
  • 7 / 0
  • http://muzalliance.ru/
Re: [howto] AJAX навигация по категориям
« Ответ #13 : 24.09.2010, 11:20:25 »
Ее бэйби  ;D заработало с ЧПУ, но опять картинок нету

Про доллары это ты круто объяснил - теперь всё ясно  ;D

То что тайтл не меняется это  :'(

и нажимаю опять вывод по количеству - и опять not found http://muzalliance.ru/shop/category/2-sintezatori.html&limitstart=0&limit=20  ;D

под попу хотел бы получить - но не знаю даже куда копать  ;D

И всё так быстро прикольно - не перегружает страницу 20 раз - это мега ускоритель для Vmart
« Последнее редактирование: 24.09.2010, 11:23:50 от mrhuge »
*

mrhuge

  • Захожу иногда
  • 222
  • 7 / 0
  • http://muzalliance.ru/
Re: [howto] AJAX навигация по категориям
« Ответ #14 : 24.09.2010, 11:24:55 »
А нельзя также страницу товара подгружать аяксом?

Блин Даник может у тебя еще какиенибудь прикольные темы на этом форуме есть?  ;D У тебя столько клёвого всего!
*

delomac

  • Захожу иногда
  • 59
  • 2 / 0
Re: [howto] AJAX навигация по категориям
« Ответ #15 : 24.09.2010, 11:36:12 »
О title, это ты конечно метко заметил... Рад бы подумать на эту тему, но в JS вообще не рублю.

Подскажи пожалуйста, почему может не отображаться ГИФка с процессом загрузки (spinner.gif). Файлик этот есть...
*

xCoReLx

  • Захожу иногда
  • 243
  • 7 / 0
Re: [howto] AJAX навигация по категориям
« Ответ #16 : 24.09.2010, 12:12:38 »
чет я по ходу туплю всталяю в индекс, после перезагрузки страницы весь скрипт вылазит, чего забыл дописать?
« Последнее редактирование: 24.09.2010, 13:52:03 от xCoReLx »
*

delomac

  • Захожу иногда
  • 59
  • 2 / 0
Re: [howto] AJAX навигация по категориям
« Ответ #17 : 24.09.2010, 12:14:17 »
скорее всего вставляещь в хтмл... поставь по сторонам <?php и ?>
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Re: [howto] AJAX навигация по категориям
« Ответ #18 : 24.09.2010, 12:16:34 »
Подскажи пожалуйста, почему может не отображаться ГИФка с процессом загрузки (spinner.gif). Файлик этот есть...

глянь через FireBug че там творится...
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

delomac

  • Захожу иногда
  • 59
  • 2 / 0
Re: [howto] AJAX навигация по категориям
« Ответ #19 : 24.09.2010, 12:19:05 »
Так я просто не очень понимаю, как именно это в нём глянуть...
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Re: [howto] AJAX навигация по категориям
« Ответ #20 : 24.09.2010, 12:22:57 »
А нельзя также страницу товара подгружать аяксом?

Думаю можно, для этого нужно навешивать на все ссылки внтури vmMainPage обработчики, сразу после загрузки страницы, а также после ajax-подгрузки.
пока решаю проблему с тайтлом. Пока нифига не выходит (((
нужно както передать тело компонента и тайтл либо через XML либо через json.
Сам метод такой: добавляем в шаблон новый файл, скажем XML.php. теперь при запросе http://site.ru/page.html?tmpl=xml загрузится не index.php а XML.php.
вот только я не могу засунуть в  xml г*вняный HTML вирта. тоже и с json'ом.
Пробую так:

{'title': '<?php echo $this->title ?>', 'body': '<?php echo $this->getBuffer('component')?>' }

не работает видать потому что в HTML компонента встречаются одинарные ковычки, которые закрывают строку раньше времени...

$this->getBuffer('component') - это тоже самое что и <jdoc:include type="component" />, просто "на пхп"
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Re: [howto] AJAX навигация по категориям
« Ответ #21 : 24.09.2010, 13:17:06 »
ухты. нештяг. вроде получилось с тайтлом ;)
и вобще навешал на все ссылки внутри компонента - терь по сайту лазить ваще кайф - все просто летает ))
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

DaVinchy

  • Захожу иногда
  • 326
  • 42 / 3
Re: [howto] AJAX навигация по категориям
« Ответ #22 : 24.09.2010, 13:22:33 »
Спасибо за скрипт  ;)

НО:
1.при выборе главного пункта меню подпункты не открываются (усовершенствованный модуль категорий, дефолтный шаблон)
2.при обновлении страницы (F5) товары пропадают и, чтобы их увидеть, надо снова выбирать категорию

P.S. Даник, продолжай в том же духе  *DRINK*
*

delomac

  • Захожу иногда
  • 59
  • 2 / 0
Re: [howto] AJAX навигация по категориям
« Ответ #23 : 24.09.2010, 13:26:33 »
Даник, ну заинтриговал! Делись теперь уже  ;)
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Re: [howto] AJAX навигация по категориям
« Ответ #24 : 24.09.2010, 13:46:56 »
1.при выборе главного пункта меню подпункты не открываются (усовершенствованный модуль категорий, дефолтный шаблон)
и не будут. обновляется только область компонента. Юзаем аккордион. или можно и default но придется заскриптовать его чуток.
2.при обновлении страницы (F5) товары пропадают и, чтобы их увидеть, надо снова выбирать категорию

Проблема вобщемто тоже решима. Целью было показать
Цитировать
пример простейшей реализации
А дальше либо сами доводим до ума, либо используем функцию $('danik'), которая возрващает желаемый результат ;)
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

delomac

  • Захожу иногда
  • 59
  • 2 / 0
Re: [howto] AJAX навигация по категориям
« Ответ #25 : 24.09.2010, 14:21:37 »
Так и все-таки, как с тайтлом быть? ::)
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Re: [howto] AJAX навигация по категориям
« Ответ #26 : 24.09.2010, 14:33:37 »
судьба тайтла решается пока туто. Смотрю там Mitrich красным огоньком светится, глядишь намекнет на решение )
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

DaVinchy

  • Захожу иногда
  • 326
  • 42 / 3
Re: [howto] AJAX навигация по категориям
« Ответ #27 : 24.09.2010, 15:11:59 »
а каким образом решить отсутствие картинки товара?  ;)
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Re: [howto] AJAX навигация по категориям
« Ответ #28 : 24.09.2010, 16:02:28 »
почему это отсутствие?? в любом случае поможет FireBug
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

mrhuge

  • Захожу иногда
  • 222
  • 7 / 0
  • http://muzalliance.ru/
Re: [howto] AJAX навигация по категориям
« Ответ #29 : 24.09.2010, 17:35:21 »
ухты. нештяг. вроде получилось с тайтлом ;)
и вобще навешал на все ссылки внутри компонента - терь по сайту лазить ваще кайф - все просто летает ))

решилось всё?! блин прикольно, если можно страницу товара да еще и с картинкой аяксом открывать!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Модуль VirtueMart для фильтра товаров по категориям!

Автор maxmur

Ответов: 104
Просмотров: 51032
Последний ответ 08.08.2014, 11:47:37
от Хусен
Компонент и модуль поиска товаров VirtueMart 1.0.15 на Ajax

Автор Arkadiy

Ответов: 148
Просмотров: 63982
Последний ответ 28.06.2014, 19:11:54
от DeLight
Расширенный Ajax-поиск по характеристикам товара VirtueMart

Автор Arkadiy

Ответов: 990
Просмотров: 195498
Последний ответ 27.06.2014, 16:47:52
от DeLight
Навигация в Virtumart как изменить ? «« В начало « Предыдущая 1 2 3 Следующая » В конец »»

Автор xlite

Ответов: 20
Просмотров: 9754
Последний ответ 29.10.2012, 13:09:10
от SpiritDEAD
Автоматическое добавление фотографий к категориям и подкатегориям?

Автор vio-ss

Ответов: 1
Просмотров: 1092
Последний ответ 29.03.2012, 22:15:58
от vio-ss