|
|
08.10.2012, 16:22
|
|
Pilot
Тех-Альянс
Зарегистрирован: 2007-02-20
Сообщений: 45
|
Задача, отображать товар в нескольких разделах, без физического дублирования этого же товара. В первую очередь необходимо реализовать помощь для поекупателей чтобы они имели возможность воспользоваться помошником по выбору сменных модулей для фильтров воды.
Минуемые беды: не попадаем под бан яндекс маркета, т.к. нет дублирующих товарных предложений.
Для реализации этого придумал такую конструкцию
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
Сообщений: 45
|
Кто-нибудь подскажет?
pilot
|
|
|
09.10.2012, 12:09
|
|
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
Сообщений: 45
|
Цитата: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
Сообщений: 45
|
Беру свои слова назад! Потерял " в конце
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
Сообщений: 45
|
Как я могу Вас отблагодарить?
pilot
|
|
|
10.10.2012, 21:24
|
|
MipH
Спирин Дмитрий
Зарегистрирован: 2004-12-22
Сообщений: 252
|
Не называйте больше никакие сущности транслитом. Этого будет достаточно. =)
bbzone@gmail.com | bbz.ru | miph.info | miph.ruВы можете обратиться ко мне, если необходима разработка функционала на NetCat
|