Автор Тема: Добавленное поле не видно в админке и не сохраняется  (Прочитано 834 раз)

12 Сентябрь 2016, 11:16:55
  • Новичок
  • *
  • Сообщений: 17
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Поле в базе есть, во фронте отображается, при импорте из CSV импортируется
Но вот в админке поле есть, но значение в нем не отображается.

Что делалось:
в  /controllers/admin/AdminProductsController.php добавлено
        $this->fields_list['warranty'] = array(
            'title' => $this->l('Warranty'),
            'align' => 'left',
        );
и в  /override/controllers/admin/AdminProductsController.php
(там уже была одна функция и я свою просто добавил ниже. Наверно, так делать нельзя?)
получилось так:
<?php

class AdminProductsController extends AdminProductsControllerCore
{
   protected function 
_displaySpecificPriceModificationForm($defaultCurrency$shops$currencies$countries$groups)
{
   $result parent::_displaySpecificPriceModificationForm($defaultCurrency$shops$currencies$countries$groups);
       
       
$params = array(
            
'id_product'=>(int)$this->id,
            
'defaultCurrency' => $defaultCurrency,
            
'shops' => $shops,
            
'countries' => $countries,
            
'groups' => $groups);
       
       if(
$display Hook::exec('displayAdminProductPriceFormFooter'$params))
            return 
$result '
               <div class="panel">
               <h3>'
.$this->l('Extra settings').'</h3>
               '
.$display.'
               <div class="panel-footer">
         <a href="'
.$this->context->link->getAdminLink('AdminProducts').'" class="btn btn-default"><i class="process-icon-cancel"></i> '.$this->l('Cancel').'</a>
         <button id="product_form_submit_btn"  type="submit" name="submitAddproduct" class="btn btn-default pull-right"><i class="process-icon-save"></i> '
.$this->l('Save') .'</button>
         <button id="product_form_submit_btn"  type="submit" name="submitAddproductAndStay" class="btn btn-default pull-right"><i class="process-icon-save"></i> '
.$this->l('Save and stay') .'</button>
         </div>
               </div>'
;
       return 
$result;
    }

 protected function 
copyFromPost(&$object$table)
 {
 
parent::copyFromPost($object$table);
 if (
get_class($object) != 'Product')
 return;
 
 
$object->warranty = (int)Tools::getValue('warranty');
 } 
}


12 Сентябрь 2016, 11:38:46
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
12 Сентябрь 2016, 12:03:37
Ответ #2
  • Новичок
  • *
  • Сообщений: 17
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
12 Сентябрь 2016, 15:08:21
Ответ #3
  • Ветеран
  • *****
  • Сообщений: 16670
  • Репутация: +14630/-5
  • Сообщество PrestaShop
    • Просмотр профиля
Цитировать
5. Для показа нового поля в админке
В файле AdminProductsController.php в методе copyFromPost
$object->myvar = Tools::getValue('myvar');в методе renderForm
fields_to_copy = array(...,$myvarв методе initFormInformations
// global informations
array_push(..., 'myvar'
В файле  admin/themes/default/template/controllers/products/informations.tpl там где нужно показать новое значение
{$myvar}
12 Сентябрь 2016, 17:10:20
Ответ #4
  • Новичок
  • *
  • Сообщений: 17
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Получается, что в override/.../ AdminProductsController.php
метод copyFromPost у меня вроде бы уже есть
 дальше пишу в этом же файле функцию renderForm, потом initFormInformations
?
12 Сентябрь 2016, 17:14:10
Ответ #5
  • Партнер
  • Ветеран
  • ****
  • Сообщений: 22816
  • Репутация: +17143/-1
  • Разработка веб-сайтов и веб-программирование
    • Просмотр профиля
Попробуйте сначала без переопределения сделать. В файле AdminProductsController.php сделайте измения. Потом перенесите, когда все будет работать.
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.
12 Сентябрь 2016, 19:54:03
Ответ #6
  • Новичок
  • *
  • Сообщений: 17
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Не получается.
А нет ли у кого-нибудь файлов с уже сделанным добавлением поля?
Я бы посмотрел и по аналогии сделал...
12 Сентябрь 2016, 20:36:26
Ответ #7
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
Ты файл удали /cache/class_index.php.
Изменений не увидишь, если его не удалить.
12 Сентябрь 2016, 20:53:17
Ответ #8
  • Новичок
  • *
  • Сообщений: 17
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Да, я знаю, что этот файл надо тереть каждый раз.

У меня проблема в синтаксисе, скорее всего.
пишу в конце функции     public function renderForm()

fields_to_copy = array('warranty'); (как в примере на вашем сайте) - получаю белый экран без признаков жизни
пишу $fields_to_copy = array('warranty'); (как в инете увидел у кого-то) - белого экрана нет, но значение в поле все-равно не грузится
еще пробовал fields_to_copy = array($warranty);

А как правильно? Почитать бы где-нибудь. Мне кажется, писать код наугад путем перебора - неверный подход. Я как обезьяна с пишущей машинкой из анекдота  :)

И опять же: функция renderForm() не особо короткая - в каком месте мне вставлять  fields_to_copy  - в начале в конце или без разницы?
12 Сентябрь 2016, 22:00:25
Ответ #9
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
Естествено что так $fields_to_copy  правильно. "$" обязательно перед названием переменной.
12 Сентябрь 2016, 22:01:26
Ответ #10
  • Ветеран
  • *****
  • Сообщений: 3419
  • Репутация: +79/-6
  • Сообщество PrestaShop
    • Просмотр профиля
Включи показ ошибок, чтобы не белый экран был, в вывод ошибки.
http://prestashop-forum.ru/index.php/topic,1304.0.html
12 Сентябрь 2016, 22:49:58
Ответ #11
  • Новичок
  • *
  • Сообщений: 17
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Включение отображения ошибок принесло такое сообщение
Warning в строке 1791 в файле C:\OpenServer\domains\proj18.tt\classes\controller\AdminController.php
[2] Cannot modify header information - headers already sent by (output started at C:\OpenServer\domains\proj18.tt\override\controllers\admin\AdminProductsController.php:1)

Жалко, что нет понятной инструкции по такому часто встречающемуся вопросу, как добавление нового поля к товару. Получается что в http://prestashop-forum.ru/index.php/topic,2835.0.html, в которую отправляют всех интересующихся вставкой полей, инструкция дана с ошибками.

И в буржнете тоже ничего не нашлось.  :(

А в каком разделе форума нужно запрашивать платную помощь? Мне кажется, я уже созрел
13 Сентябрь 2016, 07:20:17
Ответ #12
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
Жалко, что нет понятной инструкции по такому часто встречающемуся вопросу, как добавление нового поля к товару. Получается что в http://prestashop-forum.ru/index.php/topic,2835.0.html, в которую отправляют всех интересующихся вставкой полей, инструкция дана с ошибками.
http://prestashop-forum.ru/index.php/topic,2835.msg14964.html#msg14964
Результат во вложении. Сделано по описанию.
Интструкция понятна для тех, кто владеет минимальными знаниями php и smarty.
13 Сентябрь 2016, 07:29:43
Ответ #13
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
fields_to_copy = array('warranty'); (как в примере на вашем сайте) - получаю белый экран без признаков жизни
пишу $fields_to_copy = array('warranty'); (как в инете увидел у кого-то) - белого экрана нет, но значение в поле все-равно не грузится
еще пробовал fields_to_copy = array($warranty);
А как правильно? Почитать бы где-нибудь.
php.net - на этом сайте можно прочесть как правильно обращаться к переменным класса.
$this->tpl_form_vars