Перейти к содержимому


Фотография
- - - - -

Коварный вопрос


Лучший Ответ Станислав , 08 August 2013 - 14:52

mindguru сказал(а) 08 Ауг 2013 - 13:00:

Кстати, на так называемом демонстрационном сайте итемы тоже почему--то разнесены по разным приложениям...

 

Вообще-то это и вводит многих в заблуждение. Обжегся на такой же ерунде более года назад, делая довольно крупный проект с большим количеством типов айтемов. С тех пор ВСЕ делаю в одном единственном экземпляре приложения и для всех типов дополнительно делаю соответствующую ему категорию.

 

И вы правильно заметили по поводу "Как узнать возможности стороннего компонента (в данном случае JBZoo), как не применив его на практике?". В данном случае вами совершенно неумышленно была допущена ошибка на стадии проектирования, которая привела к проблемам при использовании конкретного продукта. Без ложной скромности скажу, что я знаю внутренности ZOO и JBZoo довольно неплохо, но работаю с ZOO еще с бета версии и более года с JBZoo, потому есть опыт и знание нюансов построения сложных приложений на JBZoo. Советуют вам правильно - переносите все в одно приложение и при необходимости дополнительно разделяйте типы категориями. С такой логикой построения каталога проблем не возникало. Если есть тип айтема - производитель и тип айтема - товар, то, например, привязать к производителю список производимых им товаров будет несложно (я так понял у вас задача примерно такого плана стоит). Если же разнести по разным экземплярам приложений (как в демо), то это уже вызывает дополнительные проблемы, с которыми вы и столкнулись.

Перейти к сообщению


  • Закрытая тема Тема закрыта
Сообщений в теме: 22

#11 mindguru

mindguru

Отправлено 08 August 2013 - 14:00

Кстати, на так называемом демонстрационном сайте итемы тоже почему--то разнесены по разным приложениям...



joejoker сказал(а) 08 Ауг 2013 - 12:54:

Вы объем такого кода себе представляете?

 

 

Я пытался вытащить из итема его рейтинг, поэтому немножко в курсе.



joejoker сказал(а) 08 Ауг 2013 - 12:54:

Причем здесь поддержка, если вы совершили ошибку на стадии проектирования?

 

Отвечаю. Как узнать возможности стороннего компонента (в данном случае JBZoo), как не применив его на практике?


Сообщение отредактировал mindguru: 08 August 2013 - 13:56

  • 0

Делай добро и бросай его в воду!


#12 Станислав

Станислав

Отправлено 08 August 2013 - 14:52   Лучший Ответ

mindguru сказал(а) 08 Ауг 2013 - 13:00:

Кстати, на так называемом демонстрационном сайте итемы тоже почему--то разнесены по разным приложениям...

 

Вообще-то это и вводит многих в заблуждение. Обжегся на такой же ерунде более года назад, делая довольно крупный проект с большим количеством типов айтемов. С тех пор ВСЕ делаю в одном единственном экземпляре приложения и для всех типов дополнительно делаю соответствующую ему категорию.

 

И вы правильно заметили по поводу "Как узнать возможности стороннего компонента (в данном случае JBZoo), как не применив его на практике?". В данном случае вами совершенно неумышленно была допущена ошибка на стадии проектирования, которая привела к проблемам при использовании конкретного продукта. Без ложной скромности скажу, что я знаю внутренности ZOO и JBZoo довольно неплохо, но работаю с ZOO еще с бета версии и более года с JBZoo, потому есть опыт и знание нюансов построения сложных приложений на JBZoo. Советуют вам правильно - переносите все в одно приложение и при необходимости дополнительно разделяйте типы категориями. С такой логикой построения каталога проблем не возникало. Если есть тип айтема - производитель и тип айтема - товар, то, например, привязать к производителю список производимых им товаров будет несложно (я так понял у вас задача примерно такого плана стоит). Если же разнести по разным экземплярам приложений (как в демо), то это уже вызывает дополнительные проблемы, с которыми вы и столкнулись.


  • 1

«Ну и зачем все это, лучше бы водки выпили». Из писем Белинского Гоголю.

 


#13 Sliapy

Sliapy

Отправлено 08 August 2013 - 15:10

У автора проблемы с такой логикой возникнут точно из-за ограничений в структуре. Как я помню,  mindguru нужен и табличный вывод, и обычный вывод тизера. В рамках одного каталога такое, на сколько я знаю, сделать не получится.


  • 0
[color=#aa0000]Не забывайте нажимать кнопку "Вопрос Решён" под сообщением, которое решило Вашу проблему.[/color]

#14 mindguru

mindguru

Отправлено 08 August 2013 - 15:36

Для того, чтобы перенести, допустим, потребителей в товарный каталог, достаточно в записи каждого из них изменить всего-навсего одну ссылку - и вот они уже  в другом приложении! Что мы получаем:

+ Related Items (из-за чего всеь сыр-бор, собственно);

- настройки главной страницы приложения;

- в админке изначально все товары и производители будут в одной таблице (а если к ним ещё магазины добавить...);

- настройки шаблонов;

- поиск/фильтры;

- ограничения модулей...

соответственно - и т.д., и т.п. То есть, выигрывая в чём-нибудь одном, мы обязательно что-то другое теряем - поэтому так вот смело утверждать, что идея разнести всё по своим приложениям изначально была ошибкой... спорный вопрос...



joejoker сказал(а) 08 Ауг 2013 - 12:54:

сделать то что Вам нужно, без всяких костылей, которые кстати в будущем, могут принести не мало неприятных сюрпризов.

 

Уважаемый joejoker! Давайте с костылями разберусь уже я сам несколько позже (после сдачи проекта), а Вы сейчас подскажите, какие костыли и где мне поставить.


  • 0

Делай добро и бросай его в воду!


#15 Станислав

Станислав

Отправлено 08 August 2013 - 17:20

mindguru сказал(а) 08 Ауг 2013 - 14:36:

Для того, чтобы перенести, допустим, потребителей в товарный каталог, достаточно в записи каждого из них изменить всего-навсего одну ссылку - и вот они уже  в другом приложении! Что мы получаем:

+ Related Items (из-за чего всеь сыр-бор, собственно);

- настройки главной страницы приложения;

- в админке изначально все товары и производители будут в одной таблице (а если к ним ещё магазины добавить...);

- настройки шаблонов;

- поиск/фильтры;

- ограничения модулей...

соответственно - и т.д., и т.п. То есть, выигрывая в чём-нибудь одном, мы обязательно что-то другое теряем - поэтому так вот смело утверждать, что идея разнести всё по своим приложениям изначально была ошибкой... спорный вопрос...

 

Думаю, вы несколько погорячились с выводами насчет минусов.

Я могу согласиться только насчет главной страницы в том виде как она есть.

 

По поводу остального, опять-таки - это вопрос опыта проектирования приложений на ZOO

 

Цитата

- в админке изначально все товары и производители будут в одной таблице (а если к ним ещё магазины добавить...

 

Они и так находятся в одной физической таблице. Если речь идет о списках айтемов экзмпляров приложений, то у списков есть фильтры по типу айтемов и вы можете выбрать товары и производителей в 1 клик. Ровно столько же, сколько вы делаете переключаясь во вкладку другого приложения.

 

Цитата

- настройки шаблонов;

 

Вы не можете настроить шаблоны по типу айтема, но я не зря упоминал о том, что каждому типу айтемов присваиваю свою категорию. Каждая категория имеет свои собственные настройки шаблонов и общие настройки. Вы можете настраивать их как угодно. Я не голословно утверждаю, что это именно так, а не иначе и реально работает. Вот вам пример вывода товаров разных типов в разных шаблонах из ОДНОГО каталога:

Шины - http://www.autokoles...mtel/nordmaster

Диски - http://www.autokoles.../advan/671-rg-d

Автотовары - http://www.autokolesa.com.ua/spares

 

И пруф того, что это все в одном каталоге, только разных типов:

wcwhzHD.jpg

 

 

Про фильтры, поиск и модули - то же самое, в этом вы можете убедиться на том же сайте. Обратите внимание на модули подбора шин и дисков справа на страницах http://www.autokolesa.com.ua/tyres и http://www.autokolesa.com.ua/wheels

Они ведь тоже настроены на фильтрацию из одного и того же приложения, где айтемы разных типов в одном и том же списке.

 

Если резюмировать, то располагая разные типы айтемов в одно приложение, мы на самом деле не имеем никаких проблем за исключением главной страницы. Да ито для себя я это ограничение обошел легким хаком:

1) вместо главной страницы в пункте меню указывается ссылка на категорию, привязанную в к типу айтема.

2) во все типы айтемов добавляется пользовательское поле "Избранное" с чекбоксом.

3) модифицируется шаблон категории, соответствующий данному типу таким образом, что при рендеринге проверяется состояние поля "Опубликовано" и в выдачу попадают только "Избранные".

 

Mindgure, надеюсь, что мой пост поможет вам немного.


Сообщение отредактировал Станислав: 08 August 2013 - 17:22

  • 3

«Ну и зачем все это, лучше бы водки выпили». Из писем Белинского Гоголю.

 


#16 mindguru

mindguru

Отправлено 08 August 2013 - 18:10

Большое спасибо. Большой пост, содержательный. Думаю, на разбор потребуется какое-то время...

В любом случае - большое спасибо!

Кстати (ну это уж совсем оффтопик, просто к слову пришлось). Как Вы решаете проблему хлебных крошек? Поясню. Категории Zoo на моём сайте броузятся отдельным скриптом, с него же переход потом уже непосредственно на итем. Так вот, чтобы после перехода в хлебных крошках осталось название категории, обязательно нужно в ссылке указать Itemid пункта меню. Это означает обязательное создание пунктов меню по количеству категорий, что далеко не всегда бывает удобно. Что Вы посоветуете в этом случае?


  • 0

Делай добро и бросай его в воду!


#17 Станислав

Станислав

Отправлено 08 August 2013 - 20:38

mindguru сказал(а) 08 Ауг 2013 - 17:10:

Кстати (ну это уж совсем оффтопик, просто к слову пришлось). Как Вы решаете проблему хлебных крошек? Поясню. Категории Zoo на моём сайте броузятся отдельным скриптом, с него же переход потом уже непосредственно на итем. Так вот, чтобы после перехода в хлебных крошках осталось название категории, обязательно нужно в ссылке указать Itemid пункта меню. Это означает обязательное создание пунктов меню по количеству категорий, что далеко не всегда бывает удобно. Что Вы посоветуете в этом случае?

 

Ну это известная проблема (фича?) ZOO. Вот официальный срач по этому поводу :)

 

Чтобы сделать нормально, а критерием нормальности я считаю вид: category_level_1_alias / category_level_2_alias / ... /item_alias , и не использовать сторонние компоненты, то есть только один путь - переписывать роутер под себя.

 

Метода простая. В роутере вы отслеживаете id категории айтема и начинаете из таблиц zoo_category_item и zoo_categories по полю parent "раскручивать" дерево категорий от текущего уровня вверх до корня. Каждый уровень - это 1 уточняющий наличие родительской категории SQL запрос. Если у вас 1 категория - 1 запрос, 2 категории - 2 запроса и т.д. Раскрутив категории в динамические массив, потом вы по сегментам можете "собрать" требуемый путь, чтобы было красиво. То же самое можно делать при помощи объектной модели ZOO , используя методы класса Item - getRelatedCategoryIds(),  getPrimaryCategory(), getPrimaryCategoryId() и методов класса Category - hasChildren(), getParent(), getPathway().

 

У этого способа множество недостатков. Первый и самый важный: и при прямых запросах и при объектном программированни при количестве вложенности категорий более двух MySQL танцует ламбаду от навалившихся на него запросов на каждый генерящийся на странице линк. Если у вас 20 айтемов на странице категории 3ей вложенности - это +60 запросов. А если это 100 айтемов в табличном выводе с линками на "подробно"? Это уже 300. При высокой посещаемости проекта вам понадобится очень хороший сервер, да и то, не факт, что не будет космических лагов. Разработчикам сторонних роутеров пофиг - они продают коммерческое решение, не особо задумываясь о ресурсах пользователя, потому они акцентируют внимание на результат, а не на скорость работы продукта. Но смею вас заверить, приведенная мною методика с использованием SQL запросов - единственный путь получить требуемый результат, потому вы в любом случае получите нагрузку. Ну или надо линковать все категории и айтемы в меню, сохраняя иерархию. Думаю, что последний вариант для серьезного проекта не подходит.

 

Второй недостаток в том, что каждому айтему в ZOO вы можете присвоить несколько категорий. В этом случае вы получаете проблему множественности возможных путей.

 

Простой пример. Я начинающий сайтостроитель и не знаю что такое атрибуты товара, зато я научился делать категории и присваивать их в админке. Я продаю каски. Военные и строительные. Хаки и оранжевые. Я делаю категорию "По назначению" и в ней 2 подкатегории "Военные" и "Строительные", а потом еще делаю категорию "Цвет" и в ней 2 подкатегории "Хаки" и "Оранжевые". Товару "Строительная каска оранжевая" я присваиваю 2 категории - "По назначению/Строительная" и "Цвет/Оранжевые". Эта каска у нас отображается например в модуле ZOO Items. В данном случае линк на этот товар может иметь 2 абсолютно корректных пути -  "По назначению/Строительная/Строительная каска оранжевая" и "Цвет/Оранжевые/Строительная каска оранжевая". Какой путь будет выбран - зависит от прописанного в роутере алгоритма: используется ли проверка множественности категорий, и если да, то какая именно запись принадлежности айтема к категории из zoo_category_item будет использована - та что, про назначение или та, что про цвета. 

 

Думаю, что совокупность этих недостатков, в конченом итоге, и привела разработчиков ZOO именно к тому решению, которое мы видим в данный момент.

Иногда "продвинутые" SEF-помешанные клиенты все-таки настаивают, потому рождаются компромиссы. Пример с того же сайта
http://autokolesa.com.ua/tyres - имеем путь Главные / Шины (это из меню)

 

Далее кликаем на бренд, попадаем сюда - http://autokolesa.com.ua/tyres/amtel и путь у нас Главная / Шины / Amtel. Это уже сгенерировано роутером, который убрал "category" иначе визуально было бы http://autokolesa.co...ategory/amtel.  Тем не менее, если пойти по "классическому" варианту, то он все равно работает, потому что мы предусмотрительные и пишем только качественные продукты :)

 

Далее кликаем на категорию Nordmaster, попадем сюда http://autokolesa.co...mtel/nordmaster и путь выглядит как хотел заказчик Главная / Шины / Amtel / NordMaster (Главная / Тип товара / Бренд / Модель ).

 

В итоге мы попадаем на страницу с тизерами 4 товаров в табличном виде, при это роутер делает 8 запросов: по 2 запроса на каждый айтем. Вроде немного. Но есть модели с большим количеством типоразмеров, от 30 и выше, это было 60 с лишним запросов и профайлер SQL явно показывал, что надо что-то делать. А сделано было вот что. Ввиду небольшого количества категорий первого уровня я жестко забил в роутер id категорий первого уровня, тем самым сэкономив 1 запрос на каждом уровне. При 30 запросах результаты стали приемлемые, а ввиду того, что категории первого уровня не меняются вообще, то клиент получил, что хотел, и с приемлемой скоростью работы, а я получил необходимость каждый раз восстанавливать модифицированный роутер при апдейте Zoo и теоретическую необходимость дорабатывать роутер, если клиенту вздумается добавить еще одну категорию первого уровня.

 

Вот теперь и думайте, надо ли такой ценой красивые "хлебные крошки" и красивые структурированные URL ;)



mindguru сказал(а) 08 Ауг 2013 - 17:10:

Кстати (ну это уж совсем оффтопик, просто к слову пришлось). Как Вы решаете проблему хлебных крошек? Поясню. Категории Zoo на моём сайте броузятся отдельным скриптом, с него же переход потом уже непосредственно на итем. Так вот, чтобы после перехода в хлебных крошках осталось название категории, обязательно нужно в ссылке указать Itemid пункта меню. Это означает обязательное создание пунктов меню по количеству категорий, что далеко не всегда бывает удобно. Что Вы посоветуете в этом случае?

 

Ну это известная проблема (фича?) ZOO. Вот официальный срач по этому поводу :)

 

Чтобы сделать нормально, а критерием нормальности я считаю вид: category_level_1_alias / category_level_2_alias / ... /item_alias , и не использовать сторонние компоненты, то есть только один путь - переписывать роутер под себя.

 

Метода простая. В роутере вы отслеживаете id категории айтема и начинаете из таблиц zoo_category_item и zoo_categories по полю parent "раскручивать" дерево категорий от текущего уровня вверх до корня. Каждый уровень - это 1 уточняющий наличие родительской категории SQL запрос. Если у вас 1 категория - 1 запрос, 2 категории - 2 запроса и т.д. Раскрутив категории в динамические массив, потом вы по сегментам можете "собрать" требуемый путь, чтобы было красиво. То же самое можно делать при помощи объектной модели ZOO , используя методы класса Item - getRelatedCategoryIds(),  getPrimaryCategory(), getPrimaryCategoryId() и методов класса Category - hasChildren(), getParent(), getPathway().

 

У этого способа множество недостатков. Первый и самый важный: и при прямых запросах и при объектном программированни при количестве вложенности категорий более двух MySQL танцует ламбаду от навалившихся на него запросов на каждый генерящийся на странице линк. Если у вас 20 айтемов на странице категории 3ей вложенности - это +60 запросов. А если это 100 айтемов в табличном выводе с линками на "подробно"? Это уже 300. При высокой посещаемости проекта вам понадобится очень хороший сервер, да и то, не факт, что не будет космических лагов. Разработчикам сторонних роутеров пофиг - они продают коммерческое решение, не особо задумываясь о ресурсах пользователя, потому они акцентируют внимание на результат, а не на скорость работы продукта. Но смею вас заверить, приведенная мною методика с использованием SQL запросов - единственный путь получить требуемый результат, потому вы в любом случае получите нагрузку. Ну или надо линковать все категории и айтемы в меню, сохраняя иерархию. Думаю, что последний вариант для серьезного проекта не подходит.

 

Второй недостаток в том, что каждому айтему в ZOO вы можете присвоить несколько категорий. В этом случае вы получаете проблему множественности возможных путей.

 

Простой пример. Я начинающий сайтостроитель и не знаю что такое атрибуты товара, зато я научился делать категории и присваивать их в админке. Я продаю каски. Военные и строительные. Хаки и оранжевые. Я делаю категорию "По назначению" и в ней 2 подкатегории "Военные" и "Строительные", а потом еще делаю категорию "Цвет" и в ней 2 подкатегории "Хаки" и "Оранжевые". Товару "Строительная каска оранжевая" я присваиваю 2 категории - "По назначению/Строительная" и "Цвет/Оранжевые". Эта каска у нас отображается например в модуле ZOO Items. В данном случае линк на этот товар может иметь 2 абсолютно корректных пути -  "По назначению/Строительная/Строительная каска оранжевая" и "Цвет/Оранжевые/Строительная каска оранжевая". Какой путь будет выбран - зависит от прописанного в роутере алгоритма: используется ли проверка множественности категорий, и если да, то какая именно запись принадлежности айтема к категории из zoo_category_item будет использована - та что, про назначение или та, что про цвета. 

 

Думаю, что совокупность этих недостатков, в конечном итоге, и привела разработчиков ZOO именно к тому решению, которое мы видим в данный момент.
 

Иногда "продвинутые" SEF-помешанные клиенты все-таки настаивают, потому рождаются компромиссы. Пример с того же сайта
http://autokolesa.com.ua/tyres - имеем путь Главные / Шины (это из меню)

Далее кликаем на бренд, попадаем сюда - http://autokolesa.com.ua/tyres/amtel и путь у нас Главная / Шины / Amtel. Это уже сгенерировано роутером, который убрал "category" иначе визуально было бы http://autokolesa.co...ategory/amtel.  Тем не менее, если пойти по "классическому" варианту, то он все равно работает, потому что мы предусмотрительные и пишем только качественные продукты  

Далее кликаем на категорию Nordmaster, попадем сюда http://autokolesa.co...mtel/nordmaster и путь выглядит как хотел заказчик Главная / Шины / Amtel / NordMaster (Главная / Тип товара / Бренд / Модель ).

В итоге мы попадаем на страницу с тизерами 4 товаров в табличном виде, при это роутер делает 8 запросов: по 2 запроса на каждый айтем. Вроде немного. Но есть модели с большим количеством типоразмеров, от 30 и выше, это было 60 с лишним запросов и профайлер SQL явно показывал, что надо что-то делать. А сделано было вот что. Ввиду небольшого количества категорий первого уровня я жестко забил в роутер id категорий первого уровня, тем самым сэкономив 1 запрос на каждом уровне. При 30 запросах результаты стали приемлемые, а ввиду того, что категории первого уровня не меняются вообще, то клиент получил, что хотел, и с приемлемой скоростью работы, а я получил необходимость каждый раз восстанавливать модифицированный роутер при апдейте Zoo и теоретическую необходимость дорабатывать роутер, если клиенту вздумается добавить еще одну категорию первого уровня.

Вот теперь и думайте, надо ли такой ценой красивые "хлебные крошки" и красивые структурированные URL 


Сообщение отредактировал Станислав: 08 August 2013 - 20:39

  • 2

«Ну и зачем все это, лучше бы водки выпили». Из писем Белинского Гоголю.

 


#18 mindguru

mindguru

Отправлено 09 August 2013 - 10:32

То Станислав:

1. Советуют вам правильно - переносите все в одно приложение и при необходимости дополнительно разделяйте типы категориями.

То есть в данном конкретном случае нужно все товары, производителей и магазины смешать в кучу в одном приложении. Да, какие-то проблемы, может быть, это и решит, но полетят не только настройки для главных страниц - все категории, теги и подачи тоже окажутся сваленными в одну кучу. Извините, но в данном случае я предпочитаю костыли в одном месте и относительный порядок в другом. Кроме того, мне никто так толком и не обьяснил, в чём конкретно проблема вывести на одной странице итемы разных типов из разных приложений.

2. Если речь идет о списках айтемов экзмпляров приложений, то у списков есть фильтры по типу айтемов и вы можете выбрать товары и производителей в 1 клик. Ровно столько же, сколько вы делаете переключаясь во вкладку другого приложения.

Может быть. Но лично для меня нажать на вкладку выглядит более логично.

3. смею вас заверить, приведенная мною методика с использованием SQL запросов - единственный путь получить требуемый результат

Высоконагруженный вариант, поэтому далеко не всегда приемлемый.

4. Ну или надо линковать все категории и айтемы в меню, сохраняя иерархию. Думаю, что последний вариант для серьезного проекта не подходит.

Почему же? Просто при создании любой категории динамически создаётся пункт меню. Зато нагрузка на сервер при генерации страницы в разы меньше.

А вообще - спасибо, что поделились опытом. Разработчики как-то затихли...


  • 0

Делай добро и бросай его в воду!


#19 Sliapy

Sliapy

Отправлено 09 August 2013 - 11:32

А каких еще ответов Вы ждете от разработчиков? В их задачи не входит обучение Вас написанию каких-то элементов или доработка компонента под Ваши нужды.


  • 0
[color=#aa0000]Не забывайте нажимать кнопку "Вопрос Решён" под сообщением, которое решило Вашу проблему.[/color]

#20 mindguru

mindguru

Отправлено 09 August 2013 - 11:41

После вчерашних разговоров о философии я уже ничего не жду. Ясно ведь сказали: НЕВОЗМОЖНО. Только сомнения ведь всё равно есть...



mindguru сказал(а) 09 Ауг 2013 - 09:32:

мне никто так толком и не обьяснил, в чём конкретно проблема вывести на одной странице итемы разных типов из разных приложений.

  • 0

Делай добро и бросай его в воду!





Click to return to top of page in style!