AJAX каталог

#
AJAX каталог
Тема такая нужно реализовать ajax каталог.
Есть каталог товаров в котором выводятся все товары из всех категорий.
Нужно сделать, чтобы при выборе категории показывались товары именно из этой категории, все это на той же странице.
В техподдержке можно сделать только на Ajax.
Но с ajax я работал токо с помощью jQuery.
Почитав форум я узнал что в системе используется JsHttpRequest 5.х
И сейчас не могу понять даже с чего начать.

Если речь идет об Ajax-е должна быть функция javascript, ее обработчик, и функция которая разбирает ответ от обработчика.

Обработчиком является ТДС  "Интернет-магазин" ?

С чего вообще можно начать ?!
#
Re: AJAX каталог
как вообще построить ajax - запрос к xml каталога товаров???
писать его надо в hostcms.js ???
#
Re: AJAX каталог
25mute, если у вас выводятся все товары сразу без страниц. Но проще без ajax просто скрывать лишние.

Если нужно применять фильтр, то можете с помощью jQuery грузить в свой блок (с помощью load) страницу каталога и передавать какой-то флаг и параметры фильтра. Таким образом вы загружаете ТДС. Там в настройках проверяете флаг. Если он есть, то применяете фильтр и выгружаете данные.

Это если совсем кратко
#
Re: AJAX каталог
Stepan0v писал(а):
Но проще без ajax просто скрывать лишние.
Ох, не жалеете вы свой сервер... А если там в каталоге 100500 товаров? Пользователь тупо не дождется пока система сгенерирует и отдаст в браузер все то, что нужно "просто скрывать".
А вот порцайками по 10-20 штук она будет отдавать товары быстро и без напряга.
Заказов не беру. Консультирую редко.
#
Re: AJAX каталог
Kotoff, вы взяли только пол фразы
"если у вас выводятся все товары сразу без страниц."
Там должно быть "то" (очепятка)
"то проще без ajax..."
#
Re: AJAX каталог
Stepan0v, про опечатку я интуитивно догадался
А
Stepan0v писал(а):
выводятся все товары сразу без страниц
можно добиться двумя способами:
а) Если товаров так мало, что они все входят на одну страницу при стандартном пейджинге в 10 на страницу (но этот случай нам неинтересен, потому что тут и ajax не нужен, и скрывать нечего)
б) настроить пейджинг по 9999 товаров на страницу, и выводить все что есть в текущей группе. И этот вариант как раз таки и убьет сайт, если товаров у вас там, например пара сотен, да с десятком доп.свойств каждый, да все это помноженное на хотя бы сотню посетителей в час.
Потому что либо у вас сервер ляжет под нагрузкой, либо люди сами уйдут из-за медленной загрузки страниц.
И вот тут и нужен ajax в подгрузке, потому что кусками по 10-20 товаров страница будет грузиться быстро, и серверу будет легче.

Тут же какая штука - количество одновременных процессов php на сервере ограничено (пусть их будет для примера, 10), и если вы займете все 10 потоков долгими задачами, например, по минуте каждая, то следующий запрос будет ждать свободного процесса. И если все задачи долгие, то ждать придется тоже долго (и есть шанс отвалиться по таймауту), а если все задачи быстрые, то пусть даже самих задач будет больше, но в целом очередь будет двигаться быстрее.
Заказов не беру. Консультирую редко.
#
Re: AJAX каталог
Проблему решил так... может интересно будет кому
Задача стояла такая: сделать фильтр по производителям и по группам. Например можно зайти в группу "Мороженое" и в ней отфильтровать по производителю "производитель 1".
Изначально думали делать с помощью AJAX но потом передумали.

Схема такая:
в ТДС интернет-магазин определяю 2 переменные:
Цитата:

@$group_id = $_GET['group_id'];
@$producer_id = $_GET['producer_id'];


и добавляю их значения в xml
Цитата:

)->addEntity(
   Core::factory('Core_Xml_Entity'
      ->name('category_id'
      ->value($group_id)
        )->addEntity(
   Core::factory('Core_Xml_Entity'
      ->name('producer_id'
      ->value($producer_id)
        );


в контроллере магазина ->group(false); чтобы вывести все товары из магазина на главную каталога.

После этого в xsl ('МагазинКаталогТоваров'
В месте где выводятся группы в атрибуте ссылки href
Цитата:

/shop/?group_id={@id}


Дальше нужно было вывести всех имеющихся производителей, это довольно интересный момент т.к. выводил их из xml-каталога. Выводились повторы т.к. выбрать можно их только у товаров по xPath выражению:
Цитата:

/shop/shop_item/shop_producer/name

в итоге выводятся все абсолютно значения элементов name, а нужны были только уникальные.
Решение - Группировка методом Стива Мюнха:
Цитата:

для начала ключ
<xsl:key name = "xProducer" match = "/shop/shop_item/shop_producer/name" use = "." />


Потом темплейт:
<xsl:template match="shop_item/shop_producer">

//вот эта магическая строка
<xsl:variable name = 'exProd' select = "name[generate-id(.) = generate-id(key('xProducer', .))]" />
         
         <xsl:for-each select = '$exProd'>
         

   //выводятся ссылки на уникального производителя который есть у товаров
         <li><a href = '/shop/?group_id={$category_id}&amp;producer_id={../@id}' ><xsl:value-of select="."/></a></li>
         </xsl:for-each>
      </xsl:template>




и в завершении условия на вывод товаров по категории, по производителю, или по категории И производителю :
Цитата:

в начале файла определяем переменные

<xsl:variable name = 'category_id' select = "shop/category_id" />
<xsl:variable name = 'producer_id' select = "shop/producer_id" />

<xsl:choose>
1. Все товары если переменные пустые.
<xsl:when test="$category_id='' and $producer_id = ''">
<xsl:apply-templates select="shop_item" />
</xsl:when>
2. По категории если пустая - производитель                     
<xsl:when test="$producer_id =''">
<xsl:apply-templates select="shop_item[shop_group_id=$category_id]" />
</xsl:when>
3. По производителю если пустая - Категория                     
<xsl:when test="$category_id=''">
<xsl:apply-templates select="shop_item[shop_producer/@id =$producer_id]" />
</xsl:when>
4. Ну и по обоим переменным если они существуют.                  
<xsl:otherwise>
<xsl:apply-templates select="shop_item[shop_group_id=$category_id][shop_producer/@id =$producer_id]" />
</xsl:otherwise>
</xsl:choose>





Вот такая вот схема, в hostCms меньше месяца работаю. Если есть предложения как улучшить код, я слушаю : )



Авторизация