Автор Тема: Набор дополнительных свойств товара  (Прочитано 1696 раз)

10 Сентября 2014, 22:56:57
  • Новичок
  • *
  • Сообщений: 23
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Всем привет. Что хотел сделать - есть товар, есть главные свойства (белый, квадратный) для которых представлены отдельные поля, а есть второстепенные, которые есть не у всех товаров и сбиваются в одно поле (Особенности.) С главными все ясно - в свойствах товаров добавляем отдельно каждому новое свойство, а вот для "Особенности" решил сделать так. В файле \www\admin6978\themes\default\template\controllers\products\features.tpl    я сделал список с множественным выбором multiple - добавил
<select id="feature_{$available_feature.id_feature}_value" name="feature_{$available_feature.id_feature}_value" onchange="$('.custom_{$available_feature.id_feature}_').val('');" multiple>Получилось см. фото. Как видно выбрал три позиции - "График приливов и отливов", "Компас", "Термометр". Теперь нужно обработать т.е. внести в базу выбранные свойства товаров, привязать к товару. Как я нашел, это делается в файле - \www\controllers\admin\AdminProductsController.php   в блоке с 952 строки
public function processFeatures()
{
if (!Feature::isFeatureActive())
return;

if (Validate::isLoadedObject($product = new Product((int)Tools::getValue('id_product'))))
{
// delete all objects
$product->deleteFeatures();

// add new objects
$languages = Language::getLanguages(false);
foreach ($_POST as $key => $val)
{
if (preg_match('/^feature_([0-9]+)_value/i', $key, $match))
{
if ($val)
$product->addFeaturesToDB($match[1], $val);
else
{
if ($default_value = $this->checkFeatures($languages, $match[1]))
{
$id_value = $product->addFeaturesToDB($match[1], 0, 1);
foreach ($languages as $language)
{
if ($cust = Tools::getValue('custom_'.$match[1].'_'.(int)$language['id_lang']))
$product->addFeaturesCustomToDB($id_value, (int)$language['id_lang'], $cust);
else
$product->addFeaturesCustomToDB($id_value, (int)$language['id_lang'], $default_value);
}
}
}
}
}
}
else
Вот тут я застрял и понял, что на долго. Поэтому сразу пишу - каким способом можно реализовать то о чем я писал, и если я на правильном пути то как организовать здесь множественный выбор. Так как есть выбирается только одно значение (последнее выбранное). Спасибо, что дочитали. prestashop 1.6.
11 Сентября 2014, 12:41:43
Ответ #1
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 32999
  • Репутация: +26759/-0
    • Просмотр профиля
Для предылущей версии делали так:
- Изменить таблицу feature_product, разрешить множественный выбор.
- Изменить AdminProducts.php, шаблон вывода свойств
- Переопределить класс Product методы addFeaturesToDB, getFeaturesStatic и getFrontFeaturesStatic

Шаблон вы поменяли, осталось класс Product.
11 Сентября 2014, 12:47:49
Ответ #2
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 32999
  • Репутация: +26759/-0
    • Просмотр профиля
11 Сентября 2014, 15:23:15
Ответ #3
  • Новичок
  • *
  • Сообщений: 23
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо за ответ, буду разбирать.  и спрашивать  :)
12 Сентября 2014, 00:49:07
Ответ #4
  • Новичок
  • *
  • Сообщений: 23
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
coder даже не знаю как выразить благодарность. БОЛЬШОЕ СПАСИБО. все получилось. Еще мне так никогда не везло. Желаю вам такого настроения на этот день, выходные и т.д. как сейчас у меня.