Автор Тема: Prestashop FAQ - как добавить новое поле к товару  (Прочитано 38069 раз)

16 Декабрь 2015, 12:25:26
Ответ #30
  • Ученик
  • Новичок
  • *
  • Сообщений: 8
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
2. Добавить новое поле в класс.
Для товара,  в файл /classes/Product.php добавляем
                        'myvar' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255),

Если я хочу добавить в заказах поле типа TEXT или BLOB, то какую длину мне указывать в классе?
16 Декабрь 2015, 12:32:36
Ответ #31
  • Ветеран
  • *****
  • Сообщений: 105673
  • Репутация: +39553/-0
    • Просмотр профиля
    • Webstudio UwK
Можете указать TYPE_HTML и не указывать размер.
Cоздание интернет сайтов Webstudio UwK
16 Декабрь 2015, 12:34:36
Ответ #32
  • Ветеран
  • *****
  • Сообщений: 105673
  • Репутация: +39553/-0
    • Просмотр профиля
    • Webstudio UwK
Типы данных в MySQL
// TEXT
// byte — кол-во байт для хранения поля
// min_byte — минимальное кол-во байт для хранения одного символа (если длина поля равна 1)
// length — максимальное количество символов в поле
'tinytext'=>Array('byte'=>256, 'min_byte'=>2, 'length'=>255),
'text'=>Array('byte'=>65537, 'min_byte'=>3, 'length'=>65535),
'mediumtext'=>Array('byte'=>16777218, 'min_byte'=>4, 'length'=>16777215),
'longtext'=>Array('byte'=>4294967300, 'min_byte'=>5, 'length'=>4294967296),
'tinyblob'=>Array('byte'=>256, 'min_byte'=>2, 'length'=>255),
'blob'=>Array('byte'=>65537, 'min_byte'=>3, 'length'=>65535),
'mediumblob'=>Array('byte'=>16777219, 'min_byte'=>4, 'length'=>16777215),
'longblob'=>Array('byte'=>4294967300, 'min_byte'=>5, 'length'=>4294967296),
Cоздание интернет сайтов Webstudio UwK
16 Февраль 2017, 17:11:14
Ответ #33
  • Пользователь
  • **
  • Сообщений: 66
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
5. Для показа нового поля в админке
В файле AdminProductsController.php в методе copyFromPost
$object->myvar = Tools::getValue('myvar');
в методе renderForm
fields_to_copy = array(...,$myvarдля prestashop 1.6
tpl_form_vars['myvar'] = $myvar;в методе initFormInformations
// global informations
array_push(..., 'myvar'В файле  admin/themes/default/template/controllers/products/informations.tpl там где нужно показать новое значение
{$myvar}

Подскажите, пожалуйста, вот с 5-го пункта не пойму к какому относиться что к 1.6 конкретно относится?
16 Февраль 2017, 18:10:49
Ответ #34
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
для prestashop 1.6
...
Все что после этого текста.
17 Февраль 2017, 18:58:42
Ответ #35
  • Пользователь
  • **
  • Сообщений: 66
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
5. Для показа нового поля в админке
В файле AdminProductsController.php в методе copyFromPost
$object->myvar = Tools::getValue('myvar');
в методе renderForm
fields_to_copy = array(...,$myvarдля prestashop 1.6
tpl_form_vars['myvar'] = $myvar;в методе initFormInformations
// global informations
array_push(..., 'myvar'В файле  admin/themes/default/template/controllers/products/informations.tpl там где нужно показать новое значение
{$myvar}

Тогда вопрос, а где ставить tpl_form_vars['myvar'] = $myvar;? Я ставлю tpl_form_vars['price_attribute'] = $this->price_attribute; и в copyFromPost и в renderForm а он мне все равно ошибку выдает expression is not assignable: Constant reference или я еще где то накосячил?
24 Февраль 2017, 14:29:52
Ответ #36
  • Пользователь
  • **
  • Сообщений: 66
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Подскажите, пожалуйста, хочу в комбинации добавить отдельное поле с ценой. Что бы не с влиянием париться при апдейте товара, а просто товару в комбинациях свою цену давать если в этом есть необходимость. Какие поля мне надо править в AdminProductsController.php?
24 Февраль 2017, 14:43:19
Ответ #37
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
Править придеться не только AdminProductsController.php, классы, контроллеры, функции ценообразования и т.д.
Проще "попарится" с импортом.
24 Февраль 2017, 15:04:13
Ответ #38
  • Пользователь
  • **
  • Сообщений: 66
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Править придеться не только AdminProductsController.php, классы, контроллеры, функции ценообразования и т.д.
Проще "попарится" с импортом.

Дело в том что там сидят девочки и заполняют товар ручками и не хотят пользоваться родным импортом для заполнения товара. Они хотят конкретно поле с ценой и все. Что бы не считать влияние, а что бы просто это поле заполнить и все. Так же и апдейт что бы не считал разницу, а просто добавлял заданную цену нужному товару в комбинации.
Я понимаю что не только AdminProductsController.php надо менять, но как мне кажется там самое сложное и стартовать надо с него.
24 Февраль 2017, 15:40:35
Ответ #39
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
AdminProductsController.php только шаблонные переменные менять (хотя можно оставить теже только перевод изменить), главное это изменить фунции расчета цены у комбинаций.
24 Февраль 2017, 15:45:38
Ответ #40
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
Дело в том что там сидят девочки и заполняют товар ручками и не хотят пользоваться родным импортом для заполнения товара. Они хотят конкретно поле с ценой и все. Что бы не считать влияние, а что бы просто это поле заполнить и все. Так же и апдейт что бы не считал разницу, а просто добавлял заданную цену нужному товару в комбинации.
Я понимаю что не только AdminProductsController.php надо менять, но как мне кажется там самое сложное и стартовать надо с него.
Ставьте цену у товара 0,00, тогда у комбинаций можно указывать цену не высчитывая влияние.
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
24 Февраль 2017, 15:53:02
Ответ #41
  • Пользователь
  • **
  • Сообщений: 66
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
AdminProductsController.php только шаблонные переменные менять (хотя можно оставить теже только перевод изменить), главное это изменить фунции расчета цены у комбинаций.

На сколько я уже разобрался в моем шаблоне в нагляк вставляют цену с помощью JS мне надо только найти где и как ее вытаскивают и внести изменения в нее. Вопрос только в том что я уже две недели парюсь над этим добавлением одного поля. Я конечно попробую на выходных взять какую то шаблонную переменную, вот только какую? У оптовой цены слишком завязок много, как я понимаю. А само влияние трогать так совсем опасно по моему.
02 Июнь 2017, 01:16:26
Ответ #42
  • Старожил
  • ****
  • Сообщений: 259
  • Репутация: +2/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Здравствуйте.
Хочу добавить новое поле в Правила корзины, чтобы знать в каком магазине было создано правило.
Пытаюсь повторить действия на примере 1 поста.
По пунктам:
п.1 и п.2 - без проблем
Дальше у меня Каша
Пункты 3 и 4 пропускаем (во фронте не нужно) и переходим к п. 5
Цитировать
В файле AdminProductsController.php в методе copyFromPost
Код: [Выделить]
$object->myvar = Tools::getValue('myvar');
в AdminCartRulesController.php нет метода copyFromPost,
Далее
Цитировать
в методе renderForm для prestashop 1.6
Код: [Выделить]
tpl_form_vars['myvar'] = $myvar;
Сделал
Цитировать
в методе initFormInformations
// global informations
Код: [Выделить]
array_push(..., 'myvar'
в AdminCartRulesController.php нет метода initFormInformations, а функция
Цитировать
array_push(
вообще не используется в этом файле (по результатам поиска)
Цитировать
В файле  admin/themes/default/template/controllers/products/informations.tpl там где нужно показать новое значение
Код: [Выделить]
{$myvar}
Сделал
Результат всех действий нулевой



02 Июнь 2017, 09:31:57
Ответ #43
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Включите профилирование в prestashop и проверьте в запросах есть ли новая переменная.
03 Июнь 2017, 21:52:46
Ответ #44
  • Старожил
  • ****
  • Сообщений: 259
  • Репутация: +2/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Включите профилирование в prestashop и проверьте в запросах есть ли новая переменная.

Включил - в запросе из таблицы ps_cart_rule стоит *
SELECT SQL_NO_CACHE SQL_CALC_FOUND_ROWS
b.*, a.*
FROM `ps_cart_rule` a
LEFT JOIN `ps_cart_rule_lang` b ON (b.`id_cart_rule` = a.`id_cart_rule` AND b.`id_lang` = 1)
WHERE 1 
ORDER BY a.`id_cart_rule` DESC  LIMIT 0, 50

Но я обнаружил много красных надписей - это причины постоянных "тормозов " системы?