Добавленное поле не видно в админке и не сохраняется

Автор tispoint, 12 сентября 2016, 11:16:55

« назад - далее »

tispoint

Поле в базе есть, во фронте отображается, при импорте из 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');
}
}





tispoint


Adik

Цитировать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}

tispoint

Получается, что в override/.../ AdminProductsController.php
метод copyFromPost у меня вроде бы уже есть
дальше пишу в этом же файле функцию renderForm, потом initFormInformations
?

mAgency

Попробуйте сначала без переопределения сделать. В файле AdminProductsController.php сделайте измения. Потом перенесите, когда все будет работать.
Интернет-магазин под ключ.
Какой выбрать движок для интернет магазина ?
Какой движок лучше ?
Magento или Prestashop ?
Решение всех Ваших вопросов в создании Интернет-магазина.

tispoint

Не получается.
А нет ли у кого-нибудь файлов с уже сделанным добавлением поля?
Я бы посмотрел и по аналогии сделал...

Миколас

Ты файл удали /cache/class_index.php.
Изменений не увидишь, если его не удалить.

tispoint

Да, я знаю, что этот файл надо тереть каждый раз.

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

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

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

И опять же: функция renderForm() не особо короткая - в каком месте мне вставлять  fields_to_copy  - в начале в конце или без разницы?

Миколас

Естествено что так $fields_to_copy  правильно. "$" обязательно перед названием переменной.

Миколас


tispoint

Включение отображения ошибок принесло такое сообщение
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, в которую отправляют всех интересующихся вставкой полей, инструкция дана с ошибками.

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

А в каком разделе форума нужно запрашивать платную помощь? Мне кажется, я уже созрел

coder

Цитата: tispoint от 12 сентября 2016, 22:49:58
Жалко, что нет понятной инструкции по такому часто встречающемуся вопросу, как добавление нового поля к товару. Получается что в http://prestashop-forum.ru/index.php/topic,2835.0.html, в которую отправляют всех интересующихся вставкой полей, инструкция дана с ошибками.
http://prestashop-forum.ru/index.php/topic,2835.msg14964.html#msg14964
Результат во вложении. Сделано по описанию.
Интструкция понятна для тех, кто владеет минимальными знаниями php и smarty.

coder

Цитата: tispoint от 12 сентября 2016, 20:53:17
fields_to_copy = array('warranty'); (как в примере на вашем сайте) - получаю белый экран без признаков жизни
пишу $fields_to_copy = array('warranty'); (как в инете увидел у кого-то) - белого экрана нет, но значение в поле все-равно не грузится
еще пробовал fields_to_copy = array($warranty);
А как правильно? Почитать бы где-нибудь.
php.net - на этом сайте можно прочесть как правильно обращаться к переменным класса.
$this->tpl_form_vars