Регистрация
Вход через соцсети
Восстановление пароля

Отображение одного товара в разных разделах сайта

Новый топик
08.10.2012, 16:22
Ответить | Цитировать
Pilot
Тех-Альянс

Зарегистрирован:
2007-02-20
Сообщений: 42

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

Минуемые беды: не попадаем под бан яндекс маркета, т.к. нет дублирующих товарных предложений.

Для реализации этого придумал такую конструкцию

1) создал список smenye_moduli с названиями разделов, в которых хочу показывать модули

2) В компоненте — товар —
а) добавил поле smenye_moduli — тип список — формат smenye_moduli:checkbox для того, чтобы выбирать несколько разделов в которых отображать конкретный модуль ( один и тот же модуль может отображаться в нескольких разделах)
б) добавил шаблон ( у меня он № 279 ) — обычный — автоматический. В его системных настройках
Код:
$ignore_sub =1;
$ignore_cc=1;
if ($smenye_moduli) {
$query_where = "a.smenye_moduli=$smenye_moduli";
}


3) В макете дизайна создал поле moduli — тип список — подтип классификатор — список сменные модули (т.е. список, созданный в первом пункте)

Код:
Это то что получилось автомотически в макете дизайна в поле "Настройки отображения макета дизайна в разделе"


Код:
$settings_array = array(
'moduli' => array(
'type' => 'select',
'subtype' => 'classificator',
'caption' => 'Сменные модули классификатор',
'classificator' => 'smenye_moduli'));


4) в макете дизайна использую такую конструкцию

Код:
".nc_objects_list(344,520, "nc_ctpl=279&smenye_moduli=".$template_settings[moduli]."")."


т.е. проверяю если у раздела есть совпадение с модулем, то отображаем. Остальные нет.

Столкнулся с такой проблемой.
а) Если в компоненте делать обычный список, то моё решение работает. (SQL: в поле message147 есть поле smenye_moduli и его содержимое: например 1 или 2 или 3)
способ не удобный, т.к. нужно создавать несколько списков — полей в базе - и делать выборку. Что увеличит нагрузку на базу.

б) более удобный
Сделать в компоненте товары он у меня message147 множественный выбор, отмечаемый чекбоксами smenye_moduli:checkbox, но это решение не работает, т.к. в базе в поле message147 в поле smenye_moduli содержимое из 1 или 2 или 3 меняется на ,1, или ,2,4,5, и проверка

Код:
".nc_objects_list(344,520, "nc_ctpl=279&smenye_moduli=".$template_settings[moduli]."")."


перестаёт работать.

Как посоветуете проверять во втором случае Б)

Pilot
09.10.2012, 04:42
Ответить | Цитировать
Pilot
Тех-Альянс

Зарегистрирован:
2007-02-20
Сообщений: 42

Кто-нибудь подскажет? ооо

Pilot
09.10.2012, 12:09
Ответить | Цитировать
MipH
Спирин Дмитрий
MipH

Зарегистрирован:
2004-12-22
Сообщений: 252

1. Вы путаетесь в терминологии, из-за чего тяжело читать ваш текст: "в поле message147 в поле smenye_moduli ". message147 - это таблица, компонент, но никак не поле...
2. smenye_moduli - что это за ахтунг, уж простите... Попробуйте использовать английские слова, дело пойдет лучше (а еще лучше пойдет, если прочитаете книгу Совершенный код)
3. Когда вы используете пункт Б и в системных настройках компоненты пишете конструкцию типа:
Код:

if ($smenye_moduli) {
$query_where = "a.smenye_moduli=$smenye_moduli";
}

,то конечно работать ничего не будет. Для поиска по такому типу данных лучше воспользоваться FIND_IN_SET:
Код:

if ($smenye_moduli) {
$query_where = "FIND_IN_SET('$smenye_moduli', a.smenye_moduli);
}


bbzone@gmail.com | bbz.ru | miph.info | miph.ru
Вы можете обратиться ко мне, если необходима разработка функционала на NetCat
10.10.2012, 20:08
Ответить | Цитировать
Pilot
Тех-Альянс

Зарегистрирован:
2007-02-20
Сообщений: 42

Цитата:
1. Вы путаетесь в терминологии, из-за чего тяжело читать ваш текст: "в поле message147 в поле smenye_moduli ". message147 - это таблица, компонент, но никак не поле...
2. smenye_moduli - что это за ахтунг, уж простите... Попробуйте использовать английские слова, дело пойдет лучше (а еще лучше пойдет, если прочитаете книгу Совершенный код)
3. Когда вы используете пункт Б и в системных настройках компоненты пишете конструкцию типа:
Код:

if ($smenye_moduli) {
$query_where = "a.smenye_moduli=$smenye_moduli";
}

,то конечно работать ничего не будет. Для поиска по такому типу данных лучше воспользоваться FIND_IN_SET:
Код:

if ($smenye_moduli) {
$query_where = "FIND_IN_SET('$smenye_moduli', a.smenye_moduli);
}


Спасибо за совет по "smenye_moduli - что это за ахтунг"
Вписал в системные настройки шаблона компонента:

Код:
$ignore_sub =1;
$ignore_cc=1;
if ($plug_in_modules) {
$query_where = "FIND_IN_SET('$plug_in_modules', a.plug_in_modules);
}


В ответ на это вываливается появляется ошибка:

Parse error: syntax error, unexpected $end in /var/www/clients/client1/web1/web/netcat/require/s_list.inc.php(228) : eval()'d code on line 33 Fatal error: Call to a member function FormatCurrency() on a non-object in /var/www/clients/client1/web1/web/netcat/require/s_list.inc.php(1060) : eval()'d code on line 34

По поводу "Call to a member function FormatCurrency() on a non-object" мой комментарий по этой ошибке — уже в систенмных настройках есть строка
global $shop;

по поводу FIND_IN_SET написанно:

This function does not work properly if the first argument contains a comma (“,”) character. т.е. если есть символ запятой в начале первого аргумента, то эта кострукция работать не бует. А в моём случае если, например картридж К1 должен отображаться в нескольких разделах, то в таблице message147 (не путаю) в plug_in_modules перечисляются разделы в которых он должен отображаться таким образом: ,5,14,7,9, Т.е. вначале стоит!!! запятая, а правило FIND_IN_SET этому противоречит.

Есть предложения?

Pilot
10.10.2012, 20:11
Ответить | Цитировать
Pilot
Тех-Альянс

Зарегистрирован:
2007-02-20
Сообщений: 42

Беру свои слова назад! Потерял " в конце

if ($plug_in_modules) {
$query_where = "FIND_IN_SET('$plug_in_modules', a.plug_in_modules)";
}

Pilot
10.10.2012, 20:13
Ответить | Цитировать
Pilot
Тех-Альянс

Зарегистрирован:
2007-02-20
Сообщений: 42

Цитата:
MipH
Как я могу Вас отблагодарить?

Pilot
10.10.2012, 21:24
Ответить | Цитировать
MipH
Спирин Дмитрий
MipH

Зарегистрирован:
2004-12-22
Сообщений: 252

Не называйте больше никакие сущности транслитом. Этого будет достаточно. =)

bbzone@gmail.com | bbz.ru | miph.info | miph.ru
Вы можете обратиться ко мне, если необходима разработка функционала на NetCat
198 196 2012-10-10 21:24:42 12655
Описание проекта