retroman 0 Опубликовано 11 июня, 2013 Жалоба Share Опубликовано 11 июня, 2013 Добрый день! Возник такой вопрос. Предположим есть у товара несколько атрибутов. Выводятся они в карточке товара выпадающими списками. По умолчанию не очень то красиво. Пример здесь http://mirdverei21vek.ru/mezhkomnatnaja-laminirovannaja-dver-luna-gluhaja-milanskij-oreh.html А можно их как то оформить красиво в табличку? Решил было проблему оформления просто ( как показалось сначала) Задал все нужные атрибуты одному товару, вытащил из исходного кода страницы этого товара html код, выводящий атрибуты, и оформил как мне было нужно в нужном порядке <table width="400px" border="0" cellspacing="0" cellpadding="5" bgcolor="#f3d6b1"> <tr> <td colspan="2" bgcolor="#f3ebc6" height="50"><strong><font color="#9d3400">В комплект могут понадобиться:</font></strong></td> </tr> <tr> <td width="160px"> <strong>Коробка:</strong> </td> <td> <select id="hidid[9]" name="id[9]" style="display:none;"> <option value="95">- </option> <option value="96">Коробка - 2.5 шт (+ 450,00 руб.)</option> <option value="107">С коробкой на двустворчатую дверь - 3 шт (+ 540,00 руб.)</option> </select> <select name="idvis[9]" onchange="Javascript:ChangePrice(9,this.value);"> <option value="95:+0">- </option> <option value="96:+450">Коробка - 2.5 шт (+ 450,00 руб.)</option> <option value="107:+540">С коробкой на двустворчатую дверь - 3 шт (+ 540,00 руб.)</option> </select> <input type="hidden" name="oldg9" id="oldg9" value="0" /> </td> </tr> <tr> <td width="160px" bgcolor="#f3ebc6"> <strong>Наличники:</strong> </td> <td bgcolor="#f3ebc6"> <select id="hidid[10]" name="id[10]" style="display:none;"> <option value="97">- </option> <option value="98">Наличники на одну сторону - 3 шт (+ 270,00 руб.)</option> <option value="99">Наличники на две стороны - 5 шт (+ 450,00 руб.)</option> <option value="105">Наличники на одну сторону двустворчатой двери - 3 шт (+ 270,00 руб.)</option> <option value="106">Наличники на две стороны двустворчатой двери - 6 шт (+ 540,00 руб.)</option> </select> <select name="idvis[10]" onchange="Javascript:ChangePrice(10,this.value);"> <option value="97:+0">- </option> <option value="98:+225">Наличники на одну сторону - 3 шт (+ 270,00 руб.)</option> <option value="99:+450">Наличники на две стороны - 5 шт (+ 450,00 руб.)</option> <option value="105:+270">Наличники на одну сторону двустворчатой двери - 3 шт (+ 270,00 руб.)</option> <option value="106:+540">Наличники на две стороны двустворчатой двери - 6 шт (+ 540,00 руб.)</option> </select> <input type="hidden" name="oldg10" id="oldg10" value="0" /> </td> </tr> <tr> <td width="160px"> <strong>Доборы:</strong> </td> <td> <select id="hidid[11]" name="id[11]" style="display:none;"> <option value="100">- </option> <option value="101">100 мм - 2.5 шт (+ 400,00 руб.)</option> <option value="102">120 мм - 2.5 шт (+ 500,00 руб.)</option> <option value="103">150 мм - 2.5 шт (+ 600,00 руб.)</option> <option value="104">200 мм - 2.5 шт (+ 700,00 руб.)</option> <option value="108">100 мм на двустворчатую дверь - 3 шт (+ 480,00 руб.)</option> <option value="109">120 мм на двустворчатую дверь - 3 шт (+ 580,00 руб.)</option> <option value="110">150 мм на двустворчатую дверь - 3 шт (+ 680,00 руб.)</option> <option value="111">200 мм на двустворчатую дверь - 3 шт (+ 780,00 руб.)</option> </select> <select name="idvis[11]" onchange="Javascript:ChangePrice(11,this.value);"> <option value="100:+0">- </option> <option value="101:+400">100 мм - 2.5 шт (+ 400,00 руб.)</option> <option value="102:+500">120 мм - 2.5 шт (+ 500,00 руб.)</option> <option value="103:+600">150 мм - 2.5 шт (+ 600,00 руб.)</option> <option value="104:+700">200 мм - 2.5 шт (+ 700,00 руб.)</option> <option value="108:+480">100 мм на двустворчатую дверь - 3 шт (+ 480,00 руб.)</option> <option value="109:+580">120 мм на двустворчатую дверь - 3 шт (+ 580,00 руб.)</option> <option value="110:+680">150 мм на двустворчатую дверь - 3 шт (+ 680,00 руб.)</option> <option value="111:+780">200 мм на двустворчатую дверь - 3 шт (+ 780,00 руб.)</option> </select> <input type="hidden" name="oldg11" id="oldg11" value="0" /> </td> </tr> <tr> <td width="160px" bgcolor="#f3ebc6"> <strong>Притворная планка:</strong> </td> <td bgcolor="#f3ebc6"> <select id="hidid[12]" name="id[12]" style="display:none;"> <option value="112">- </option> <option value="113">Притворная планка (+ 110,00 руб.)</option> </select> <select name="idvis[12]" onchange="Javascript:ChangePrice(12,this.value);"> <option value="112:+0">- </option> <option value="113:+110">Притворная планка (+ 110,00 руб.)</option> </select> <input type="hidden" name="oldg12" id="oldg12" value="0" /> </td> </tr> </table> Однако же оказалось не просто. Если заказать товар с этими атрибутами, они не плюсуются в заказ. Приходит на почту заказ только на саму дверь. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 11 июня, 2013 Жалоба Share Опубликовано 11 июня, 2013 Шаблон атрибутов в /templates/шаблон/module/product_options/ Там правится внешний вид. Ссылка на сообщение Поделиться на другие сайты
retroman 0 Опубликовано 11 июня, 2013 Автор Жалоба Share Опубликовано 11 июня, 2013 {if $options!=''} {foreach name=outer item=options_data from=$options} {if $options_data.TYPE eq '1'} <!-- select --> <table width="450px" border="0" cellspacing="0" cellpadding="5" bgcolor="#f3d6b1"> <tr> <td width="200px"> <strong>{$options_data.NAME}:</strong> </td> <td> <p> <select id="hidid[{$options_data.ID}]" name="id[{$options_data.ID}]" style="display:none;"> {foreach key=key_data item=item_data from=$options_data.DATA} <option value="{$item_data.ID}">{$item_data.TEXT} {if $item_data.MODEL}({$item_data.MODEL}){/if} {if $item_data.PRICE_PLAIN != 0}({$item_data.PREFIX}{$item_data.PRICE}){/if}</option> {/foreach} </select> <select name="idvis[{$options_data.ID}]" onchange="Javascript:ChangePrice({$options_data.ID},this.value);"> {foreach key=key_data item=item_data from=$options_data.DATA} <option value="{$item_data.ID}:{$item_data.PREFIX}{$item_data.PRICE_PLAIN}">{$item_data.TEXT} {if $item_data.MODEL}({$item_data.MODEL}){/if} {if $item_data.PRICE_PLAIN != 0}({$item_data.PREFIX}{$item_data.PRICE}){/if}</option> {/foreach} </select> <input type="hidden" name="oldg{$options_data.ID}" id="oldg{$options_data.ID}" value="0" /> </p> </td> </tr> </table> <!-- /select --> Сделал вот так. Стало более-менее приемлемо. А не подскажете - возможно сделать строки в таблице зеброй? чтобы две строки одна за другой чередовались по цвету? И ещё не пойму - по какому принципу сортируются поля? По алфавиту кириллическому? Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 12 июня, 2013 Жалоба Share Опубликовано 12 июня, 2013 Да. Вот гляньте в faq - http://vamshop.ru/forum/topic/8391-%D0%BA%D0%B0%D0%BA-%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C-%D1%87%D0%B5%D1%80%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D1%86%D0%B2%D0%B5%D1%82%D0%BE%D0%B2-%D0%B7%D0%B5%D0%B1%D1%80%D1%83-%D0%B2-smarty-%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD/?hl=%D0%B7%D0%B5%D0%B1%D1%80%D1%83 Точно так же и здесь делается, т.е. задаются cycle значение внутри foreach ... /foreach Ссылка на сообщение Поделиться на другие сайты
retroman 0 Опубликовано 12 июня, 2013 Автор Жалоба Share Опубликовано 12 июня, 2013 Большое спасибо! Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 12 июня, 2013 Жалоба Share Опубликовано 12 июня, 2013 Не за что, надеюсь, что разобрались. Ссылка на сообщение Поделиться на другие сайты
helen 0 Опубликовано 4 октября, 2013 Жалоба Share Опубликовано 4 октября, 2013 Подскажите, пожалуйста, как изменить порядок отображения атрибутов в карточке товара? Например: Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 4 октября, 2013 Жалоба Share Опубликовано 4 октября, 2013 А с помощью указания значений в опции Порядок сортировки не получается их выстроить? Ссылка на сообщение Поделиться на другие сайты
retroman 0 Опубликовано 4 октября, 2013 Автор Жалоба Share Опубликовано 4 октября, 2013 Смотря какой порядок Вам нужен. Можно например создавать атрибуты в нужном вам порядке, а потом упорядочить их по id. Я у себя сделал так. Для того, чтобы по id упорядочить, менял в файле includes/modules/product_attributes.php строку $products_options_name_query = vamDBquery("select distinct popt.products_options_id, popt.products_options_name,popt.products_options_type,popt.products_options_length,popt.products_options_rows,popt.products_options_size from ".TABLE_PRODUCTS_OPTIONS." popt, ".TABLE_PRODUCTS_ATTRIBUTES." patrib where patrib.products_id='".$product->data['products_id']."' and patrib.options_id = popt.products_options_id and popt.language_id = '".(int) $_SESSION['languages_id']."' order by popt.products_options_name"); на $products_options_name_query = vamDBquery("select distinct popt.products_options_id, popt.products_options_name,popt.products_options_type,popt.products_options_length,popt.products_options_rows,popt.products_options_size from ".TABLE_PRODUCTS_OPTIONS." popt, ".TABLE_PRODUCTS_ATTRIBUTES." patrib where patrib.products_id='".$product->data['products_id']."' and patrib.options_id = popt.products_options_id and popt.language_id = '".(int) $_SESSION['languages_id']."' order by popt.products_options_id"); Ссылка на сообщение Поделиться на другие сайты
retroman 0 Опубликовано 4 октября, 2013 Автор Жалоба Share Опубликовано 4 октября, 2013 То есть, если вы скажем, создавали сначала атрибуты c названием "размер", а потом с названием "цвет", вам этот способ поможет, чтобы получился нужный порядок. Или придётся по новой атрибуты создавать в нужном Вам порядке. Может и попроще способы есть, но я не знаю. Ссылка на сообщение Поделиться на другие сайты
retroman 0 Опубликовано 4 октября, 2013 Автор Жалоба Share Опубликовано 4 октября, 2013 А что за опция "Ряды" в админке, при создании атрибута? У меня все атрибуты с ней по умолчанию со значением "1" Подумал просто, что может как то по ней получится упорядочивать? Ссылка на сообщение Поделиться на другие сайты
helen 0 Опубликовано 4 октября, 2013 Жалоба Share Опубликовано 4 октября, 2013 А с помощью указания значений в опции Порядок сортировки не получается их выстроить? Порядок сортировки - это выставляется порядок значений атрибутов - эта функция работает Вопрос в том, как поменять порядок Названий атрибутов (Размер и Цвет) По id названия атрибутов упорядочиваются по умолчанию, а мне нужно изменить этот порядок: наприм., атрибут Цвет имеет id 2, а Размер - id 5 - вот их и нужно поменять местами Ссылка на сообщение Поделиться на другие сайты
helen 0 Опубликовано 4 октября, 2013 Жалоба Share Опубликовано 4 октября, 2013 А что за опция "Ряды" в админке, при создании атрибута? У меня все атрибуты с ней по умолчанию со значением "1" Подумал просто, что может как то по ней получится упорядочивать? Там внизу есть примечание: Опции Ряды / Размер / Длина действительны только для атрибутов типа TEXT Ссылка на сообщение Поделиться на другие сайты
retroman 0 Опубликовано 4 октября, 2013 Автор Жалоба Share Опубликовано 4 октября, 2013 Порядок сортировки - это выставляется порядок значений атрибутов - эта функция работает Вопрос в том, как поменять порядок Названий атрибутов (Размер и Цвет) По id названия атрибутов упорядочиваются по умолчанию, а мне нужно изменить этот порядок: наприм., атрибут Цвет имеет id 2, а Размер - id 5 - вот их и нужно поменять местами Ну, вообще то нет. Приведённый мной выше код, говорит о том, что сортируется изначально по наименованию атрибута. $products_options_name_query = vamDBquery("select distinct popt.products_options_id, popt.products_options_name,popt.products_options_type,popt.products_options_length,popt.products_options_rows,popt.products_options_size from ".TABLE_PRODUCTS_OPTIONS." popt, ".TABLE_PRODUCTS_ATTRIBUTES." patrib where patrib.products_id='".$product->data['products_id']."' and patrib.options_id = popt.products_options_id and popt.language_id = '".(int) $_SESSION['languages_id']."' order by popt.products_options_name"); order by popt.products_options_name - вот этот параметр. Ох! Прям самому интересно стало - как бы сделать произвольную сортировку. Попробую помучать код на выходных. Может чего и выйдет. Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 4 октября, 2013 Жалоба Share Опубликовано 4 октября, 2013 Если я правильно помню сами атрибуты сортировать нельзя, retroman в общем правильно пишет, сортировку можно только через sql запрос сделать, например по порядку (по id номеру), по алфавиту, либо просто случайным образом (order by rand() ) Ссылка на сообщение Поделиться на другие сайты
retroman 0 Опубликовано 4 октября, 2013 Автор Жалоба Share Опубликовано 4 октября, 2013 А можно же, по идее добавить в TABLE PRODUCT OPTIONS ещё один параметр, задаваемый произвольно числами и сортировать по нему? И ещё вопрос такой. Если просто поменять в базе данных ID каждого названия атрибутов так, чтобы они выстраивались в нужном порядке, это приведёт к поломке уже установленных товарам атрибутов? То есть, конкретному товару атрибуты присваиваются в привязке к ID атрибутов? Ссылка на сообщение Поделиться на другие сайты
support 447 Опубликовано 4 октября, 2013 Жалоба Share Опубликовано 4 октября, 2013 Можно то можно, кто спорит. Но это много файлов править, добавлять в базу колонку, в админке добавлять обработку этой колонки, в каталоге добавлять учёт этой колонки. По умолчанию нет такой колонки. Нет, id не меняются, т.е. поменять в базе конечно можно, но атрибуты вроде как по разным тарлицам разбросаны и есть вероятность смешать значения, лучше не надо. Создайте лучше заново атрибут, либо просто переименовыванием можно обойтись. Ссылка на сообщение Поделиться на другие сайты
helen 0 Опубликовано 4 октября, 2013 Жалоба Share Опубликовано 4 октября, 2013 Ну, вообще то нет. Приведённый мной выше код, говорит о том, что сортируется изначально по наименованию атрибута. Если бы по наименованию, т.е. по алфавиту, то Р (Размер) идет раньше Ц (Цвет), соответственно и порядок отображения был бы таким, какой мне нужен. А у меня сортируется по id Но и выстраивание по алфавиту в моем случае не подходит, т.к. опять же многие атрибуты, которые должны быть ниже, переместятся вверх Очень много значений атрибутов и связанных с ними товаров, поэтому новый атрибут или переименование атрибутов, к сожалению, не вариант. Как я поняла, просто поменять местами id где-нибудь в БД не получится? Ссылка на сообщение Поделиться на другие сайты
retroman 0 Опубликовано 4 октября, 2013 Автор Жалоба Share Опубликовано 4 октября, 2013 Не-не-не, Helen, во первых, есть же ещё такая штука как убывание и возрастание сортировки. Скорее всего, идёт от конца алфавита (не помню) Я правда не очень понял как по умолчанию, но когда у себя делал, чётко проследил взаимосвязь названия атрибута с его положением относительно других на странице. А у меня их несколько побольше на страницу будет. Даже не сомневайтесь. Ну и потом, по id сортируется, только если вы сами когда то правили файл для этого. Что вряд ли. В общем, попробую, в меру своего разумения, сделать дополнительный параметр в таблице и поправить нужные файлы. О результатах доложу. Поменять id в базе, наверное не стоит. Много проблем можно огрести. А много у вас атрибутов в магазине уже назначено? Если чуток совсем, то делайте правку как говорю, а потом создавайте по новой нужные атрибуты в нужном порядке, или ждите. Ссылка на сообщение Поделиться на другие сайты
helen 0 Опубликовано 7 октября, 2013 Жалоба Share Опубликовано 7 октября, 2013 retroman спасибо за участие, буду ждать, т.к. атрибутов очень много и товаров, связанных с ними, соответственно, тоже много Ссылка на сообщение Поделиться на другие сайты
retroman 0 Опубликовано 10 октября, 2013 Автор Жалоба Share Опубликовано 10 октября, 2013 helen, не понял как сюда закачать файлы, вот ссылка на страницу с архивом http://webdesignseo.ru/kopilka-webmastera/vamshop/sortirovka-atributov-v-kartochke-tovara-vamshop.html вроде бы всё работает как должно. Редактировать порядок атрибутов можно только в целом для всего магазина. То есть не получится в одном товаре выставить так, а в другом эдак. Ссылка на сообщение Поделиться на другие сайты
helen 0 Опубликовано 11 октября, 2013 Жалоба Share Опубликовано 11 октября, 2013 У меня версия магазина 1.67, но все равно спасибо, в ближайшее время попробую Ссылка на сообщение Поделиться на другие сайты
retroman 0 Опубликовано 11 октября, 2013 Автор Жалоба Share Опубликовано 11 октября, 2013 Helen, я себе инструкцию составлял на всякий случай. Могу прислать. Там подробно расписано в какие строки каких файлов вносить изменения и что куда добавлять. Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения