Автор Тема: Добавить поле товара  (Прочитано 480 раз)

15 Октября 2015, 10:58:57
  • Новичок
  • *
  • Сообщений: 12
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Добрый день! Толи поиском не умею пользоваться, вообщем не нашел решения вопроса. Как добавить дополнительное поля для товара?
Меня интересует конкретно возможность добавить поле к товару, но отображать его только в админке.
Добавил в базу новый field. В таблицу product_lang (хотя так и не понял в чем различие таблиц product и product_lang, в каких случаях какая используется. Буду признателен если расскажите.).
Дальше я так понимаю надо править контроллер и шаблон админки. Кто сталкивался с данным вопросом, какие решения?
Заранее спасибо!
15 Октября 2015, 11:05:59
Ответ #1
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 85948
  • Репутация: +25399/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Как добавить поле к товару в prestashop - http://prestashop-forum.ru/index.php/topic,2835.0.html

ps_product - основная таблица товара, в ней хранятся все связи товара с другими таблицами и основные харастеристики
ps_product_lang - таблица для хранения текстов (названия, описания...)
15 Октября 2015, 11:08:48
Ответ #2
  • Новичок
  • *
  • Сообщений: 12
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо за ответ, проделывал все эти пункты на 1.6.1.1, после изменения значения в админке и дальнейшего сохранения, поле остается пустым, в том числе и в базе.
15 Октября 2015, 11:11:18
Ответ #3
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 85948
  • Репутация: +25399/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Включите показ ошибок, профилирование.
Проверьте папку /override/ есть ли там такой класс. Может у вас уже переопределн класс Product.php.
15 Октября 2015, 11:16:08
Ответ #4
  • Ветеран
  • *****
  • Сообщений: 20838
  • Репутация: +25276/-0
  • Prestashop - просто и эффективно
    • Просмотр профиля
Кеш очистить, удалить старые файлы скомилированных шаблонов, удалить файл скомпилированных классов. Все это делать в ручную.
И если поле добавли правильно (таблица/шаблон/контроллер/класс), то должно сохраняться.
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
15 Октября 2015, 11:50:56
Ответ #5
  • Новичок
  • *
  • Сообщений: 12
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В рендерформ нет переменной fields_to_copy.
 {$myvar} ничего не выводит - пусто.
если выводить через $product->myvar - выводит - array
15 Октября 2015, 11:54:01
Ответ #6
  • Новичок
  • *
  • Сообщений: 12
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Где отображается имя товара
input_value=$product->[b]myvar[/b] тут вместо name
input_name="name"
required=true

заменил name на myvar, в поле имя высветилось значение myvar из базы
15 Октября 2015, 12:09:47
Ответ #7
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 85948
  • Репутация: +25399/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В prestashop 1.6 некоторые переменные изменилиь. Есть перменная
$this->tpl_form_varsДоступ к переменным класса Product
$product->myvar;
15 Октября 2015, 12:36:47
Ответ #8
  • Новичок
  • *
  • Сообщений: 12
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В adminproductcontroller
в методе рендерформ
$this->tpl_form_vars['myvar'] = $product->myvar; сделал так

Значение переменной показывается в админке, когда изменяю и сохраняю ничего не меняется в базе.
15 Октября 2015, 12:56:31
Ответ #9
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 85948
  • Репутация: +25399/-0
  • Сообщество PrestaShop
    • Просмотр профиля
$object->myvar = Tools::getValue('myvar');Сохраните измения.
15 Октября 2015, 13:00:08
Ответ #10
  • Новичок
  • *
  • Сообщений: 12
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
$object->myvar = Tools::getValue('myvar');Сохраните измения.

Эту строку я добавил уже в конец copyfrompost.

А так вывожу в админку <div class="form-group">
<div class="col-lg-1"><span class="pull-right">{include file="controllers/products/multishop/checkbox.tpl" field="myvar" type="default" multilang="true"}</span></div>
<label class="control-label col-lg-2 required" for="myvar_{$id_lang}">
<span class="label-tooltip" data-toggle="tooltip" title="{l s='The public name for this product.'} {l s='Invalid characters:'} &lt;&gt;;=#{}">
{l s='myvar'}
</span>
</label>
<div class="col-lg-5">
{include file="controllers/products/input_text_lang.tpl"
languages=$languages
input_class="{$class_input_ajax}{if !$product->id || Configuration::get('PS_FORCE_FRIENDLY_PRODUCT')}copy2friendlyUrl{/if} updateCurrentText"
input_value=$product->myvar
input_name="myvar"
required=true
}
</div>

</div>
15 Октября 2015, 13:06:55
Ответ #11
  • Ветеран
  • *****
  • Сообщений: 763
  • Репутация: +6/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Включите профилирование, проверьте правильность имен в шаблоне, пррверяйте значение переменной в $_POST.
Где-то ошиблись. Если есть доступ к логам, проверьте лог ошибок.
15 Октября 2015, 13:15:41
Ответ #12
  • Новичок
  • *
  • Сообщений: 12
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Включил профилирование и дебаг мод
/classes/ObjectModel.php:710 по этой строчке происходит update таблицы product_lang, в самом запросе отсутствует поле myvar
15 Октября 2015, 13:44:00
Ответ #13
  • Ветеран
  • *****
  • Сообщений: 763
  • Репутация: +6/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Если оставляете это поле пустым, показывает ошибку?
15 Октября 2015, 13:54:23
Ответ #14
  • Новичок
  • *
  • Сообщений: 12
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Если оставляете это поле пустым, показывает ошибку?
Ошибку не показывает, значение остается то что в базе было.

Престашоп поставлен с нуля. Все стандартное, ничего не менял. Не добавлял. Модули не ставил, все как есть.