Добавление своей области для модулей

Тема в разделе "Общие вопросы", создана пользователем DiMoss, 9 мар 2016.

  1. DiMoss

    DiMoss Продвинутый пользователь

    Сообщения:
    862
    Симпатии:
    236
    Сделал дополнительную область(колонку) для размещения модулей на главной странице.
    Всё работает отлично, но есть одна недоработка - когда захожу в редактирование схемы и добавляю новое поле с модулем, то в списке выбора областей размещения нет той, которую создал я. Чтобы она появилась, необходимо сохранить схему с добавленным модулем, потом зайти вновь и тогда в списке уже появляется та, которую создал я.
    В целом конечно не критично! Но хотелось бы понимать как это исправить и куда копать!
     
  2. Vlad

    Vlad Эксперт

    Сообщения:
    4.129
    Симпатии:
    999
    схему, а может макеты ?? ;)

    Наверно просто забыли в шаблоне в самом низу, в скрипте, добавить
    Код:
        html += '    <option value="content_top_rop"><?php echo $text_content_top_rop; ?></option>';
     
    DiMoss нравится это.
  3. DiMoss

    DiMoss Продвинутый пользователь

    Сообщения:
    862
    Симпатии:
    236
    Может и макеты! Кто ж их знает :)

    В общем я вот про это...
    Снимок.JPG

    А добавить и вправду забыл! Теперь всё заработало! Благодарю!
     
    Последнее редактирование: 10 мар 2016
  4. Vlad

    Vlad Эксперт

    Сообщения:
    4.129
    Симпатии:
    999
    еще бы написали, хотя бы в каких файлах правили (пока не забыли), а инструкцию кто нибудь продолжит. Темка та нужная...
     
  5. DiMoss

    DiMoss Продвинутый пользователь

    Сообщения:
    862
    Симпатии:
    236
    Vlad, вы про добавление собственных областей под модули? Чуть позже могу написать инструкцию.

    А свою ошибку правил в файле admin/view/template/design/layout_form.tpl
    Добавил строку
    PHP:
    html += '    <option value="column_special"><?php echo $text_column_special?></option>';
    в функцию
    PHP:
    function addModule() {
     
  6. Vlad

    Vlad Эксперт

    Сообщения:
    4.129
    Симпатии:
    999
    в каком файле правил я знаю )) Я же из него и подсказал. Я про все файлы, чтобы инструкцию сделать можно было. Ну если будет инструкция то отлично!
     
  7. DiMoss

    DiMoss Продвинутый пользователь

    Сообщения:
    862
    Симпатии:
    236
    Доброго времени суток! Как и обещал - создам инструкцию по добавлению собственной области для размещения модулей.

    Начнём....

    1) Создадим контроллер для новой области

    в папке catalog/controller/common/* создаём файл column_extra.php и размещаем туда код...
    PHP:
    <?php
    class ControllerCommonColumnExtra extends Controller {
      public function 
    index() {
        
    $this->load->model('design/layout');
          if (isset(
    $this->request->get['route'])) {
            
    $route = (string)$this->request->get['route'];
          } else {
            
    $route 'common/home';
          }
          
    $layout_id 0;

          if (
    $route == 'product/category' && isset($this->request->get['path'])) {
            
    $this->load->model('catalog/category');
            
    $path explode('_', (string)$this->request->get['path']);

            
    $layout_id $this->model_catalog_category->getCategoryLayoutId(end($path));
          }

          if (
    $route == 'product/product' && isset($this->request->get['product_id'])) {
            
    $this->load->model('catalog/product');

            
    $layout_id $this->model_catalog_product->getProductLayoutId($this->request->get['product_id']);
          }

          if (
    $route == 'information/information' && isset($this->request->get['information_id'])) {
            
    $this->load->model('catalog/information');

            
    $layout_id $this->model_catalog_information->getInformationLayoutId($this->request->get['information_id']);
          }

          if (!
    $layout_id) {
            
    $layout_id $this->model_design_layout->getLayout($route);
          }

          if (!
    $layout_id) {
              
    $layout_id $this->config->get('config_layout_id');
          }

          
    $this->load->model('extension/module');

          
    $data['modules'] = array();

          
    $modules $this->model_design_layout->getLayoutModules($layout_id'column_extra');

          foreach (
    $modules as $module) {
            
    $part explode('.'$module['code']);

            if (isset(
    $part[0]) && $this->config->get($part[0] . '_status')) {
              
    $data['modules'][] = $this->load->controller('module/' $part[0]);
            }

           if (isset(
    $part[1])) {
             
    $setting_info $this->model_extension_module->getModule($part[1]);

             if (
    $setting_info && $setting_info['status']) {
               
    $data['modules'][] = $this->load->controller('module/' $part[0], $setting_info);
             }
           }
         }

         if (
    file_exists(DIR_TEMPLATE $this->config->get('config_template') . '/template/common/column_extra.tpl')) {
           return 
    $this->load->view($this->config->get('config_template') . '/template/common/column_extra.tpl'$data);
         } else {
           return 
    $this->load->view('default/template/common/column_extra.tpl'$data);
         }
       }
    }
    2) Создаём шаблона для вывода на витрину

    в папке catalog/view/theme/default/template/common/* создаём файл column_extra.tpl и вставляем туда код...
    PHP:
    <?php if ($modules) { ?>
      <aside id="column-extra">
        <?php foreach ($modules as $module) { ?>
          <?php echo $module?>
        <?php ?>
      </aside>
    <?php ?>
    3) Теперь нужно сделать так, чтобы мы могли разместить в эту область что либо, т.е. выбрать её в админке

    в файле admin/view/template/design/layout_form.tpl в шаблоне находим код
    PHP:
    <?php if ($layout_module['position'] == 'column_right') { ?>
      <option value="column_t" selected="selected"><?php echo $text_column_right?></option>
    <?php } else { ?>
      <option value="column_right"><?php echo $text_column_right?></option>
    <?php ?>
    после вставляем
    PHP:
    <?php if ($layout_module['position'] == 'column_extra') { ?>
      <option value="column_extra" selected="selected"><?php echo $text_column_extra?></option>
    <?php } else { ?>
      <option value="column_extra"><?php echo $text_column_extra?></option>
    <?php ?>
    снизу под шаблоном находим функцию
    PHP:
    function addModule()
    в этой функции находим месторасположение других областей, например
    PHP:
    html += '<option value="column_right"><?php echo $text_column_right?></option>';
    после вставляем
    PHP:
    html += '<option value="column_extra"><?php echo $text_column_extra?></option>';
    Почти готово!

    4) Создадим переменную с названием колонки

    находим файл перевода admin/language/russian/design/layout.php и добавляем
    PHP:
    $_['text_column_extra']   = 'Доп. колонка';
    либо называем её так, как душе угодно

    5) Сделаем ссылку на перевод в контроллере admin/controller/design/layout.php

    ищем
    PHP:
    $data['text_column_right'] = $this->language->get('text_column_right');
    до или после вставляем
    PHP:
    $data['text_column_extra'] = $this->language->get('text_column_extra');
    6) Выводим в шаблон

    Тут всё зависит от того, куда именно вы хотите вывести. Я буду выводить на главную страницу. По аналогии не должно составить труда вывести и в другое место

    в файле catalog\controller\common\home.php после
    PHP:
    $data['column_right']     = $this->load->controller('common/column_right');
    добавляем
    PHP:
    $data['column_extra'] = $this->load->controller('common/column_extra');
    Вывод в шаблон
    PHP:
    <?php echo $column_extra?> 
     
    Последнее редактирование: 22 сен 2016
    Rik, ввапвп, Bkmz и 4 другим нравится это.
  8. RoS

    RoS Специалист

    Сообщения:
    227
    Симпатии:
    220
    Уточнение по 3 пункту
    Если вставляете
    PHP:
    <?php if ($layout_module['position'] == 'column_secondary') { ?>
      <option value="column_secondary" selected="selected"><?php echo $text_column_secondary?></option>
    <?php } else { ?>
      <option value="column_secondary"><?php echo $text_column_secondary?></option>
    <?php ?>
    после
    PHP:
    <?php if ($layout_module['position'] == 'column_right') { ?>
      <option value="column_right" selected="selected"><?php echo $text_column_right?></option>
    <?php } else { ?>
      <option value="column_right"><?php echo $text_column_right?></option>
    <?php ?>
    то и
    PHP:
    html += '<option value="column_secondary"><?php echo $text_column_secondary?></option>';
    нужно вставить после
    PHP:
    html += '<option value="column_right"><?php echo $text_column_right?></option>';
    Не допускать вставку кода крест на крест (один код вставили до, а второй после) или в разброс. Иначе будут косяки.
     
    DiMoss нравится это.
  9. DiMoss

    DiMoss Продвинутый пользователь

    Сообщения:
    862
    Симпатии:
    236
    Благодарю за уточнение! Исправил!

    Но всё же я так и не пойму почему выбор области для модуля не запоминается.
     
  10. RoS

    RoS Специалист

    Сообщения:
    227
    Симпатии:
    220
    Проверьте последовательность позиций. Как я указал выше. Потому что при первом назначении выбирается нужная позиция, а при повторном редактировании она перескакивает на другую позицию
     
  11. RoS

    RoS Специалист

    Сообщения:
    227
    Симпатии:
    220
    @DiMoss , а вы на чистом движке пробовали? С любым модулем или с конкретным? Потому что инструкция верна. У меня на v2.0.3.1 проблем не возникало.
     
  12. DiMoss

    DiMoss Продвинутый пользователь

    Сообщения:
    862
    Симпатии:
    236
    @RoS , движка не совсем "чистая", но и не шибко переделанная. Ранее я уже добавлял область под модули и она прекрасно работает! Что с этой не так не могу понять. Контроллер домашней страницы видит контроллер новой области и содержимое выводится на витрину. То которое я руками впишу! А вот модули не зацепляются к ней......никакие не работают.
    Загвоздка именно в том, что выбранная область не сохраняется. Последовательность соблюдена как Вы и рекомендовали.
     
    Последнее редактирование: 22 сен 2016
  13. RoS

    RoS Специалист

    Сообщения:
    227
    Симпатии:
    220
    Попробуйте добавить еще одну позицию, скопируйте колонку и не менять название полностью, а добавить например 2, вот так column_right_2 чтоб было быстрее. Возможно в первом случае ошибку маленькую допустили, и главное не спешить. Сперва сделайте изменения в админке, удостовериться что модуль сохраняет позицию, а потом делать вывод на сайт
     
  14. DiMoss

    DiMoss Продвинутый пользователь

    Сообщения:
    862
    Симпатии:
    236
    Исправил column_secondary на column_extra и всё заработало! Видимо у движки свои виды не переменную column_secondary))))
    Второй раз сталкиваюсь с подобной проблемой. Первый раз на вордпрессе....чутка психанул даже)))) Вроде всё верно делаешь, а оказывается что тот name который я использовал был зарезервирован движкой. Вот и тут может что то подобное!

    Или проблема с русской C. Вполне возможно что где то прописал кириллицу!
     
    Последнее редактирование: 12 мар 2016
  15. Potapkin

    Potapkin Новичок

    Сообщения:
    19
    Симпатии:
    1
    Notice: Error: Could not load template /homе/public_html/catalog/view/theme/default/template/default/template/common/column_extra.tpl! in /public_html/system/storage/modification/system/library/template/basic.php on line 26 в чем ошибка?

    opencart 2.2
     
    Последнее редактирование: 21 сен 2016
  16. DiMoss

    DiMoss Продвинутый пользователь

    Сообщения:
    862
    Симпатии:
    236
    Может в этом!?!?
     
  17. Potapkin

    Potapkin Новичок

    Сообщения:
    19
    Симпатии:
    1
    разобрался вроде создал еще пару папок
    /homе/public_html/catalog/view/theme/default/template/common/column_extra.tpl
    на
    /homе/public_html/catalog/view/theme/default/template/default/template/common/column_extra.tpl



    выставляю слайд-шоу на новую позицию и новая ошибка
    Notice: Undefined variable: column_extra in /home/c/cs04102/,,,.com.ua/public_html/system/storage/modification/catalog/view/theme/default/template/common/header.tpl on line 200
    это строчка куда я вставил
    Вывод в шаблон
    <?php echo $column_extra; ?>

     
  18. DiMoss

    DiMoss Продвинутый пользователь

    Сообщения:
    862
    Симпатии:
    236
    Не должно быть обращения к шаблону по адресу ..../default/template/default/template/....
    Что то не так сделали!
     
  19. DiMoss

    DiMoss Продвинутый пользователь

    Сообщения:
    862
    Симпатии:
    236
    Скорей всего вы не добавили
    PHP:
    $data['column_extra'] = $this->load->controller('common/column_extra');
    в контроллер хэдера
     
  20. Potapkin

    Potapkin Новичок

    Сообщения:
    19
    Симпатии:
    1
    спасибо работает, а как исправить? Не должно быть обращения к шаблону по адресу ..../default/template/default/template/....
    Что то не так сделали! все делал по инструкции копировать вставить ничего своего не добавлял