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

20 Сентябрь 2014, 11:14:42
Ответ #15
  • Новичок
  • *
  • Сообщений: 11
  • Репутация: +0/-0
  • Чайник
    • Просмотр профиля
А где товар сохраняется первый раз? функция желательно навести прямо в точку)
Мне нужно чтоб он еще id_add_employee добавил
20 Сентябрь 2014, 12:02:42
Ответ #16
  • Ветеран
  • *****
  • Сообщений: 1285
  • Репутация: +13/-1
  • Сообщество PrestaShop
    • Просмотр профиля
В первый, во второй и с сотый раз товар сохраняется в базе данных.
20 Сентябрь 2014, 12:36:12
Ответ #17
  • Новичок
  • *
  • Сообщений: 11
  • Репутация: +0/-0
  • Чайник
    • Просмотр профиля
Имеется в виду функция которая генерирует sql запрос!
Мне нужно добавить туда поле!
20 Сентябрь 2014, 16:36:19
Ответ #18
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
$product = new Product(..
$product->add();
Написано же, новое поле добавить в класс. Этого достаточно чтобы сохранить, показать, обработать значение в новом поле.
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
20 Сентябрь 2014, 21:42:21
Ответ #19
  • Новичок
  • *
  • Сообщений: 11
  • Репутация: +0/-0
  • Чайник
    • Просмотр профиля
Не ругайтесь на дурочка! Я инициализирую класс new Product(...
Но зачем мне инициализировать! Если я нажимаю кнопочку сохранить и новый товар добавляется в бд!
Вот когда я кнопочку сохранить нажимаю какой код выполняется?
21 Сентябрь 2014, 13:25:34
Ответ #20
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
new Product();Объявление объекта, в этом случае его полям не присваивается никаких значений.
Если вы инициализируте экземпляр класса Product, это значит, что уже определили значения всем переменным, которые описаны в этом классе.

Нажатие кнопки "Добавить" - вызыв метода add класса Product.
Выполняются операции:
- Объявление объекта (просто описание)
- Инициализация (присваивание объекту значений)
- Сохрание данных в таблице бд.

При инициализации объекта происходит присваивание значений всем переменным, которые описаны в классе Product. Если вы добавили в класс переменную id_add_employee, описали ее (тип, значение по умолчанию и т.д.), то когда вы создаете экземпляр класса, это поле создается атоматически и его не нужно специально добавлять в sql запрос.

22 Сентябрь 2014, 12:08:33
Ответ #21
  • Новичок
  • *
  • Сообщений: 11
  • Репутация: +0/-0
  • Чайник
    • Просмотр профиля
Сохранение добился через ovveride
<?php

class Product extends ProductCore
{

public function add($autodate true$null_values false)
{
$result parent::add($autodate$null_values);
global $cookie;
$this->id_add_employee $cookie->id_employee;
return ($result && $this->save());
}
}

Хотел же тут добавить новые переменные как в 1.5 перед классом! но в 1.6 это не работает уже! Так что в оригинале пришлось оставить новую переменную и fields дописать)

Осталось скрыть)
22 Сентябрь 2014, 14:20:48
Ответ #22
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
Переопределение переменных должно работать одинаково в prestashop 1.5 и 1.6.
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
28 Октябрь 2014, 14:41:44
Ответ #23
  • Новичок
  • *
  • Сообщений: 1
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Добрый день! Решил не плодить новые темы и обратиться сюда, т.к. проблема касается этой темы.
Собственно сабж: Имеется Prestashop 1.6, прошел все пункты, в пункте 5 (в методе renderForm fields_to_copy = array(...,$myvar)) просто не нашел такой строки, в итоге поле есть и во front и в admin, но при сохранении значение просто обнуляется и ничего нет. Подскажите в чем может быть проблема?
28 Октябрь 2014, 15:03:01
Ответ #24
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 22125
  • Репутация: +25303/-1
  • Prestashop - просто и эффективно
    • Просмотр профиля
Может в переменных для шаблона
$this->fields_list = array();
...
$this->fields_list['myvar'] = array(
'title' => $this->l('MyVar'),
'align' => 'center',
'class' => 'fixed-width-xs',
'type' => 'int'
);
Эксперт Prestashop - решения всех проблем, написание модулей, создание тем для интернет-магазинов под Prestashop.
Эксперт Magento - создам сайт на Magento, программирование кастомных модулей для Magento, кастомизация тем Magento.
Лучшие цены!!!
28 Октябрь 2014, 15:21:39
Ответ #25
  • Ветеран
  • *****
  • Сообщений: 105673
  • Репутация: +39553/-0
    • Просмотр профиля
    • Webstudio UwK
Для prestashop 1.6
Добавить новую переменную в класс /override/classes/Product.php
class Product extends ProductCore
{
    public $newVar;
 
    public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
    {
      Product::$definition['fields']['newVar'] = array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isString');
      parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
    }
 
}
Cоздание интернет сайтов Webstudio UwK
10 Январь 2015, 23:19:25
Ответ #26
  • Новичок
  • *
  • Сообщений: 9
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Подскажите, пожалуйста, как сделать тоже самое, но для категорий.

Я туплю на 3-ем шаге. Непойму что надо и где прописывать. Мне нужно сделать отображение h1-тега в виде текста на странице с определенной категорией.
В общем, чтобы в админке при редактировании категории в поле ввел текст и он отобразился в нужном месте.

Prestashop 1.6
11 Январь 2015, 11:34:45
Ответ #27
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
Цитировать
3. Добавить проверку и сохранение нового поля в контроллер.
Для товара, в файл /controllers/front/ProductController.php

Для категорий все тоже самое. Замените "Product" на "Category" и получите файлы, которые нужно изменить.
CategoryController.php
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
20 Январь 2015, 22:12:56
Ответ #28
  • Новичок
  • *
  • Сообщений: 9
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Для категорий все тоже самое. Замените "Product" на "Category" и получите файлы, которые нужно изменить.
CategoryController.php
А что конкретнее мне нужно изменить в CategoryController.php?

В общем, я поле создал. В таблице и в шаблоне всё прописал. Но у меня не сохраняются данные из нового поля. Ни каких ошибок не выскакивает.

Поле я добавил таким образом:
AdminProductsController.php
array(
'type' => 'text',
'label' => $this->l('This is my var'),
'name' => 'my_var',
'lang' => true,
'hint' => $this->l('Forbidden characters:').' <>;=#{}'
   ),

Prestashop 1.6
21 Январь 2015, 11:04:49
Ответ #29
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
А прчему в AdminProductsController.php? Вы же писали, что вам нужно для категории поле добавить? Для категорий контроллер AdminCategoriesController.php.