Jump to content
comrues

Доп. Поля не отображают введённые данные после сохранения

Recommended Posts

Я пытаюсь вывести дополнительные поля в статьях (в админке каталог > статьи).

Дополнительные поля значения в базу данных, но при сохранении статьи в инпутах эти значения не отображаются.

Что я сделал:

Я создал в базе данных в таблице information_description колонку customfields и в неё по замыслу должны записываться в виде json данные всех доп полей которые я создал.

В контроллере уже есть массив $data['information_description'], По этому там я нечего не добовляю.

В twig я добавил:

<input name="information_description[{{ language.language_id }}][customfields][text]" value="{{ information_description[language.language_id][customfields].text }}" />
<input name="information_description[{{ language.language_id }}][customfields][hint]" value="{{ information_description[language.language_id][customfields].hint }}" />

 

В model я добавил 

customfields = '" . $this->db->escape(json_encode($value['customfields'])) . "',

внутрь двух функций:

public function addInformation($data) {...}
public function editInformation($information_id, $data) {...}

а также добавил 

'customfields' => json_decode($result['customfields'], true),

в функцию:

public function getInformationDescriptions($information_id) {...}

Но как я уже сказал, данные записываются в базу данных, а в инпутах не отображаются. Что я сделал не так? 
Заранее спасибо за совет и помощь!

Share this post


Link to post
Share on other sites
2 часа назад, comrues сказал:

customfields = '" . $this->db->escape(json_encode($value['customfields'])) . "',

$value откуда здесь, если

2 часа назад, comrues сказал:

<input name="information_description[{{ language.language_id }}][customfields][text]" value="{{ information_description[language.language_id][customfields].text }}" /> <input name="information_description[{{ language.language_id }}][customfields][hint]" value="{{ information_description[language.language_id][customfields].hint }}" />

 

вообще если в БД пишется, но не выводится - дампить сам вывод

Share this post


Link to post
Share on other sites

Спасибо что ответили)))!
 

40 минут назад, AlexDW сказал:

$value откуда здесь, если

просто код располагается внутри цикла (это код самого opencart):

Спойлер
foreach ($data['information_description'] as $language_id => $value) {
	$this->db->query("INSERT INTO " . DB_PREFIX . "information_description SET information_id = '" . (int)$information_id . "', language_id = '" . (int)$language_id . "', title = '" . $this->db->escape($value['title']) . "', description = '" . $this->db->escape($value['description']) . "', meta_title = '" . $this->db->escape($value['meta_title']) . "', meta_h1 = '" . $this->db->escape($value['meta_h1']) . "', meta_description = '" . $this->db->escape($value['meta_description']) . "', customfields = '" . $this->db->escape(json_encode($value['customfields'])) . "', meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "'");
}

 

 

 

40 минут назад, AlexDW сказал:

 

вообще если в БД пишется, но не выводится - дампить сам вывод

Я не уверен, в правильном ли месте я делаю var_dump. Я его делаю в функции getForm() {...}, что в контроллере. 

Там как раз объявляется переменная в которой массив information_description содержится и после неё я и делаю вар дамп:

Спойлер
if (isset($this->request->post['information_description'])) {
$data['information_description'] = $this->request->post['information_description'];
} elseif (isset($this->request->get['information_id'])) {
$data['information_description'] = $this->model_catalog_information->getInformationDescriptions($this->request->get['information_id']);
} else {
$data['information_description'] = array();
}

Самое главное то, что вардамб выводит нужный массив, при этом в инпуте он не отображается

 

Edited by comrues

Share this post


Link to post
Share on other sites

попробуйте в шаблоне

value="{{ information_description[language.language_id][customfields.text] }}

Share this post


Link to post
Share on other sites
12 часов назад, AlexDW сказал:

попробуйте в шаблоне

value="{{ information_description[language.language_id][customfields.text] }}

К сожалению не помогло

Share this post


Link to post
Share on other sites
12 часов назад, AlexDW сказал:

попробуйте в шаблоне

value="{{ information_description[language.language_id][customfields.text] }}

Самое интересное, что если выводить customfields не массивом, а как отдельное значение, то всё работает.

Т.е. если я в twig вывожу value="{{ information_description[language.language_id].customfields }} и в модели убираю кодирование и декодирование в json,то всё выводится.

но я не могу для каждого отдельного поля создавать новый столбец в базе данных. По этому я и хотел вывести всё массивом.

Может быть есть какие то другие решения?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Similar Content

    • By Admiral1985
      Всем привет, подскажите как можно вывести модуль подписка на рассылку в footer?
      Код в контрльере subscribe.php
       
      <?php class ControllerExtensionModuleSubscribers extends Controller{     public function index(){         $this->load->language('extension/module/subscribers');         $data['heading_title'] = $this->language->get('heading_title');         return $this->load->view('extension/module/subscribers', $data);     }     public function newSubscribe(){         $this->load->model('extension/module/subscribers');         $json = array();         $json['message'] = $this->model_extension_module_subscribers->Subscribe($this->request->post);         $this->response->addHeader('Content-Type: application/json');         $this->response->setOutput(json_encode($json));     } }
       
      Вот код из catalog/view/theme/default/template/extension/module
       
      <div class="container-fluid">    <div class="row">       <div class="box-subscribers">          <form action="" method="post" class="form-inline" class="subscribers">             <div class="subscribers">                <div class="col-xs-12 col-md-3">                   <h3>{{ heading_title }}</h3>                   {{ test }}                </div>                <div class="col-xs-12 col-md-6">                   <div class="input-group">                      <div class="input-group-addon"><i class="fa fa-envelope-o"></i></div>                      <input type="email" name="txtemail" id="txtemail" value="" placeholder="" class="form-control input-lg" />                    </div>                   <p><label><input type="checkbox" id="agree"> {{ entry_submit }} </label></p>                </div>                <div class="col-xs-12 col-md-3"><button type="submit" id="subscribe" class="subscribers btn btn-primary btn-lg" onclick="return Subscribe();" disabled="disabled">{{ button_submit }}</button></div>             </div>          </form>       </div>    </div> </div> <style> .subscribers .col-md-12,.subscribers .col-md-3{text-align:start;}.subscribers .input-group{width:100%;display:table}.subscribers p{padding:10px;text-align:start;} </style> <script>     function Subscribe()     {         var emailpattern = /^\[email protected][a-zA-Z_]+?\.[a-zA-Z]{2,3}(.[a-zA-Z]{2})?$/; // email pattern for email text field         var email = $('#txtemail').val();              if(email != "")         {             if(emailpattern.test(email)){                 $.ajax({                     type: 'POST',                     url: 'index.php?route=extension/module/subscribers/newSubscribe',                     dataType: 'json',                     data: {email: $('#txtemail').val()},                     success: function(data){ alert(data.message);}                 });                 $('#txtemail').val('');                 return false;             }else{                 alert("{{ text_invalid_email }}");                 return false;             }         }         else         {             alert("{{ text_email_require }}");             $(email).focus();             return false;         }     }     $('#agree').click(function(){        if ($(this).is(':checked')){         $('#subscribe').removeAttr('disabled');      } else {         $('#subscribe').attr('disabled', 'disabled');       } }); </script> изучил пару тем на форуме почему то не чего не нашел , как можно вывести данный модуль в footer?

      он щас выглядит вот так 
      фото в низу!
      Спасибо заранее за помощь!

    • By AWARO
      Модуль позволяет установить для магазина произвольное количество скидок, которые будут зависеть от общей суммы заказа. Скидки применяются автоматически, по достижении необходимой суммы в корзине.
      Связки "процент-сумма" задаются в админке, в неограниченном количестве.
       
      Особенности:
      Для работы модуля НЕ ТРЕБУЕТСЯ Ioncube Loader Совместимость с модулем "Simple - упрощенная регистрация и заказ" и любыми другими модулями быстрого заказа Модуль поддерживает любое количество валют Скидка задается в процентах и считается от общей стоимости заказа.  
      !!! ВНИМАНИЕ !!!
      Модуль для версий: OpenCart 3, ocStore 3
    • By AWARO
      499.00 руб
      Скачать/Купить дополнение


      [OC3] Скидка от общей суммы заказа
      Модуль позволяет установить для магазина произвольное количество скидок, которые будут зависеть от общей суммы заказа. Скидки применяются автоматически, по достижении необходимой суммы в корзине.
      Связки "процент-сумма" задаются в админке, в неограниченном количестве.
       
      Особенности:
      Для работы модуля НЕ ТРЕБУЕТСЯ Ioncube Loader Совместимость с модулем "Simple - упрощенная регистрация и заказ" и любыми другими модулями быстрого заказа Модуль поддерживает любое количество валют Скидка задается в процентах и считается от общей стоимости заказа.  
      !!! ВНИМАНИЕ !!!
      Модуль для версий: OpenCart 3, ocStore 3
      Добавил AWARO Добавлено 27.09.2019 Категория Цены, скидки, акции, подарки Системные требования Метод активации Без активации Ioncube Loader Нет OpenCart 3.0 ocStore 3.0 OpenCart.Pro, ocShop Обращение к серверу разработчика Нет Старая цена 799  
    • By Feech
      Поддержка: OpenCart 3.x.x.x
      Возможности:
      Выводит дату последней модификации для страниц категорий, товаров и статьей и для главной страницы. Можно менять вручную дату последней модификации категорий Можно менять вручную дату последней модификации статей Можно менять вручную дату последней модификации главной страницы Установить:
      Модули/Расширения -> Установка расширений. Выбрать архив с модулем и Загрузить. Модули/Расширения -> выбрать установленный модуль (Last Modified ...) -> Активировать Зайти в активированный модуль и установить время для главной страницы Модули/Расширения -> Модификаторы. Нажать кнопку Обновить  
      Обращаем ваше внимание, что заголовок LastModified не отдаётся для WWW-доменов с включенным SSI.
      Перед покупкой проверьте передает ли ваш сервер параметры $_SERVER['HTTP_IF_MODIFIED_SINCE'] или $_ENV['HTTP_IF_MODIFIED_SINCE']
      * Если при установке модуля возникает ошибка "Директория не доступна для записи!" - необходимо поставить бесплатный модуль Localcopy OCMOD для Opencart 3
       
      Зачем нужен Last-Modified
      HTTP заголовок Last-Modified сообщает клиенту время последнего изменения страницы (объекта). Если клиент (браузер, поисковый робот) получил заголовок Last-Modified, то при следующем обращении к адресу, при условии, что страница (объект) есть в локальном кеше, он добавит вопрос If-Modified-Since(не изменилась ли страница после даты, полученной в Last-Modified). В свою очередь сервер, получив запрос If-Modified-Since должен сверить полученную временную метку с временем последнего изменения страницы и, если страница не изменялась ответить 304 Not Modified.
      Экономия Трафика
      Если страница не изменилась, то сервер прекратит передачу данных после отправки заголовков с кодом 304 Not Modified, тело страницы, изображения и другие объекты передаваться не будут.
      Снижение нагрузки на сервер
      Правильная реализация проверки времени последнего изменения страницы может значительно (до 30% и более) сократить нагрузку на сервер. Под правильной реализацией подразумевается проверка времени до начала генерации страницы на динамическом сайте. В таком случае все действия для генерации страницы (запрос контента из базы данных, парсинг шаблонов, получение комментариев и др) выполняться не будут. Особенно это актуально для сайтов с высокой посещаемостью и долгой продолжительностью визита пользователя. Пример: пользователь находится на сайте спортивных новостей и постоянно обновляет главную страницу в ожидании публикации результата матча. За несколько минут страница может быть запрошена и получена десятки раз. Если заголовок Last-Modified отдается и запрос If-Modified-Since обрабатывается правильно, то реально страница будет передана один раз, а на все последующие запросы будет выдан ответ 304 Not Modified.
      Ускорение индексации поисковыми системами
      Поисковые системы через руководство для вебмастеров рекомендуют отсылать заголовок Last-Modifiedи правильно обрабатывать If-Modified-Since.
    • By Feech
      350.00 руб
      Скачать/Купить дополнение


      Last-Modified, If-Modified-Since, 304 not modified. Для Opencart 3. Ускорение индексации поисковыми системами, экономия Трафика, снижение нагрузки на сервер,
      Поддержка: OpenCart 3.x.x.x
      Возможности:
      Выводит дату последней модификации для страниц категорий, товаров и статьей и для главной страницы. Можно менять вручную дату последней модификации категорий Можно менять вручную дату последней модификации статей Можно менять вручную дату последней модификации главной страницы Установить:
      Модули/Расширения -> Установка расширений. Выбрать архив с модулем и Загрузить. Модули/Расширения -> выбрать установленный модуль (Last Modified ...) -> Активировать Зайти в активированный модуль и установить время для главной страницы Модули/Расширения -> Модификаторы. Нажать кнопку Обновить  
      Обращаем ваше внимание, что заголовок LastModified не отдаётся для WWW-доменов с включенным SSI.
      Перед покупкой проверьте передает ли ваш сервер параметры $_SERVER['HTTP_IF_MODIFIED_SINCE'] или $_ENV['HTTP_IF_MODIFIED_SINCE']
      * Если при установке модуля возникает ошибка "Директория не доступна для записи!" - необходимо поставить бесплатный модуль Localcopy OCMOD для Opencart 3
       
      Зачем нужен Last-Modified
      HTTP заголовок Last-Modified сообщает клиенту время последнего изменения страницы (объекта). Если клиент (браузер, поисковый робот) получил заголовок Last-Modified, то при следующем обращении к адресу, при условии, что страница (объект) есть в локальном кеше, он добавит вопрос If-Modified-Since(не изменилась ли страница после даты, полученной в Last-Modified). В свою очередь сервер, получив запрос If-Modified-Since должен сверить полученную временную метку с временем последнего изменения страницы и, если страница не изменялась ответить 304 Not Modified.
      Экономия Трафика
      Если страница не изменилась, то сервер прекратит передачу данных после отправки заголовков с кодом 304 Not Modified, тело страницы, изображения и другие объекты передаваться не будут.
      Снижение нагрузки на сервер
      Правильная реализация проверки времени последнего изменения страницы может значительно (до 30% и более) сократить нагрузку на сервер. Под правильной реализацией подразумевается проверка времени до начала генерации страницы на динамическом сайте. В таком случае все действия для генерации страницы (запрос контента из базы данных, парсинг шаблонов, получение комментариев и др) выполняться не будут. Особенно это актуально для сайтов с высокой посещаемостью и долгой продолжительностью визита пользователя. Пример: пользователь находится на сайте спортивных новостей и постоянно обновляет главную страницу в ожидании публикации результата матча. За несколько минут страница может быть запрошена и получена десятки раз. Если заголовок Last-Modified отдается и запрос If-Modified-Since обрабатывается правильно, то реально страница будет передана один раз, а на все последующие запросы будет выдан ответ 304 Not Modified.
      Ускорение индексации поисковыми системами
      Поисковые системы через руководство для вебмастеров рекомендуют отсылать заголовок Last-Modifiedи правильно обрабатывать If-Modified-Since.
      Добавил Feech Добавлено 19.04.2019 Категория SEO, карта сайта, оптимизация Системные требования Метод активации Без активации Ioncube Loader Нет OpenCart 3.0 ocStore 3.0 OpenCart.Pro, ocShop Обращение к серверу разработчика Нет Старая цена 0  
  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.