Категории

[FAQ] Часто задаваемые вопросы и ответы

Проблемы и решения

Ошибки и исправления

Общие вопросы

Расширения

Установка и обновление

Модули

Шаблоны

Локализация интерфейса

Коммерческие предложения

Учимся бизнесу

Бизнес книги

Поисковая оптимизация (SEO)

Магазины на ShopOS

Хостинг для ShopOS

Предложения и пожелания

Курилка

[ХАК] Дополнительные поля в списках товаров

Конечно это вариант не универсальный и не очень функциональный. Т.е. еще можно было бы добавить возможность выводить доп. поля не у всех товаров, а у некоторых, добавлять разным товарам разные дополнительные поля и т.д….

1 – открываем файл includes\classes\product.php

Ищем ~384 строку (в некоторых версиях она может не значительно отличаться! Так что ищите по ее кускам. Она почти в самом низу файла)

$shipping_status_image = @$main->getShippingStatusImage($array['products_shippingtime']);


НИЖЕ добавляем этот код
/*
--------------------------------------------------------
START - ExtraFields by NeBox.ru
--------------------------------------------------------
*/
if (NEBOX_EF_SHOW == 'true')
{
$extra_fields_p = NEBOX_EXTRA_FIELDS;

if (!empty($extra_fields_p))
$ef = 'ptf.products_extra_fields_id IN ('.$extra_fields_p.') AND';
else
$ef = "";

$extra_fields_query = osDBquery("
SELECT
pef.products_extra_fields_status as status,
pef.products_extra_fields_name as name,
ptf.products_extra_fields_value as value
FROM
". TABLE_PRODUCTS_EXTRA_FIELDS ." pef
LEFT JOIN
". TABLE_PRODUCTS_TO_PRODUCTS_EXTRA_FIELDS ." ptf
ON
ptf.products_extra_fields_id = pef.products_extra_fields_id

WHERE
ptf.products_id = ".(int)$array['products_id']." and
".$ef."
ptf.products_extra_fields_value<>'' and
(pef.languages_id='0' or pef.languages_id = '".$_SESSION['languages_id']."')
ORDER BY
products_extra_fields_order
");

while ($extra_fields = os_db_fetch_array($extra_fields_query,true))
{
if (! $extra_fields['status'])
continue;

$extra_f_array[] = array
(
'NAME' => $extra_fields['name'],
'VALUE' => $extra_fields['value']
);
}
}
/*
--------------------------------------------------------
END - ExtraFields by NeBox.ru
--------------------------------------------------------
*/


Далее, ищем строку (она ниже, в массиве)
'COUNT'=> @$array['ID'],


И ниже нее вставляем этот код
/*-----------------ExtraFields by NeBox.ru-----------------*/
'extra_fields' => @$extra_f_array,
/*-----------------ExtraFields by NeBox.ru-----------------*/


Сохраняем и закрываем данный файл. Он нам больше не нужен.


2 – открываем файл, например themes\ваш_шаблон\module\new_products_default.html

Этот файл выводит новинки на главной странице
В нем нужно найти строку
{foreach name=aussen item=module_data from=$module_content}

Это начало цикла блоков товаров в списке новинок. После этой строчки идет код самого блока товара, вот нужно выделить место под вывод доп. полей ниже этой строчки.
В нужное место вставляем
{if $module_data.extra_fields}
{foreach item=extra_fields from=$module_data.extra_fields}{$extra_fields.NAME} | {$extra_fields.VALUE}<br />{/foreach}
{/if}


тут нету никаких стилей для вывода, чисто доп. поля разделенные br
{$extra_fields.NAME} – название доп поля
{$extra_fields.VALUE} – значение (содержимое)

Теперь осталось закачать мини-плагин для управления выводом дополнительных полей товара.
Плагин нужно закачать в папку modules/plugins/, далее, перейти на страницу плагинов, активировать плагин и настроить как нужно.

Источник


Дополню описание...
Если дополнительные поля не указаны, то выводятся все какие есть.


спасибо за хак. не видел раньше :)


хак не пробовал

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

и файл modules\product_listing.php

нужно заменить на новый. чтобы фильтр работал

пример использования в шаблоне

{foreach name=aussen item=module_data from=$module_content}

            {if $module_data.extra_fields_data}
{foreach item=extra_fields from=$module_data.extra_fields_data}
                          <b>{$extra_fields.NAME}</b>: {$extra_fields.VALUE}<br />
                        {/foreach}
{/if}

{/foreach}


Спаибо!
А фильтры пойдут в новую версию?


да


Это начало цикла блоков товаров в списке новинок. После этой строчки идет код самого блока товара, вот нужно выделить место под вывод доп. полей ниже этой строчки.
В нужное место вставляем
Код:
{if $module_data.extra_fields}
  {foreach item=extra_fields from=$module_data.extra_fields}{$extra_fields.NAME} | {$extra_fields.VALUE}<br />{/foreach}
{/if}
В нужное место вставляем  А куда именно Подскажите?


куда хотите. в любое удобное место в цикле (после строки {foreach name=aussen item=module_data from=$module_content})


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

пример

Категория Ложки
  Железные
  серебряные
  деревянные
  черные
  белые
Категория Ножи
  нержавеющие
  ржавеющие
  плохие
  хорошие
Категория Автомобили Лада
  Лада 21010
  ЛАда 21015
  Лада Приора

ну и в том же духе....

это было бы отлично и очень кстати


а за этот хак спасибо, думаю он мне пригодится в ближайшее время


подкатегорий неограниченное количество
хоть
категория
--подкатегория
----подкатегория
------подкатегория
--------подкатегория
----------подкатегория
------------подкатегория


Здрасти,
подскажите как работает данная функция доп полей. Она просто выводит в карточке товара фиксированный список параметров товара?

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

Опытным путем проверить не получилось. Данные доп полей не отображались вообще (версия 2.5.4)


данный хак выводит просто дополнительные поля товара в списках товаров.


Спасибо, NeBox
почитал форум и понял, что проблема с пользовательской фильтрацией достаточно актуальна! Так никто не придумал решения?


Источник



Copyright ShopOS