Загрузка контроллера

Тема в разделе "Общие вопросы", создана пользователем megaCart, 2 янв 2018.

  1. megaCart

    megaCart Пользователь

    Сообщения:
    78
    Симпатии:
    4
    Разрабатываю свой модуль делаю так файл php в ExtensionTestProductProduct:
    PHP:
    <?php
    class ControllerExtensionTestProductProduct extends Controller {
        public function 
    index() {
            
    $this->load->model('setting/setting');
            
    $theme_default $this->model_setting_setting->getSetting('theme_default'0);
            
    //$data['test'] = 'test';
            
    $data['header'] = $this->load->controller('common/header');
            
    $data['footer'] = $this->load->controller('common/footer');
            if (
    file_exists('catalog/view/theme/'.$theme_default['theme_default_directory'].'/template/product/product.twig')) {
                
    $this->response->setOutput($this->load->view($theme_default['theme_default_directory'].'/template/product/product'$data));
            } else {
                
    $this->response->setOutput($this->load->view('default/template/product/product'$data));
            }
        }
    }
    ?>
    здесь находится шаблон:
    PHP:
    $theme_default['theme_default_directory'].'/template/product/product
    когда загружаю контроллер:
    PHP:
    $data['header'] = $this->load->controller('common/header');
    $data['footer'] = $this->load->controller('common/footer');
    и питаюсь выводить:
    Код:
    {{ header }}
    {{ test }}
    {{ footer }}
    
    получаю пустоту но в контролере так работает:
    PHP:
    print_r($this->load->controller('common/footer'));
    но когда комментирую header и footer то шаблон подключается, вопрос как подключить header и footer своему шаблону?
     
  2. Vlad

    Vlad Эксперт

    Сообщения:
    4.161
    Симпатии:
    1.013
    А зачем модулю шапка и подвал? Это же делается для страниц.
     
  3. megaCart

    megaCart Пользователь

    Сообщения:
    78
    Симпатии:
    4
    Модуль идет как страница.
     
  4. Vlad

    Vlad Эксперт

    Сообщения:
    4.161
    Симпатии:
    1.013
    Модуль это не страница. Или модуль или страница. Нужно понимать разницу.
    Ну и желательно подсматривать в соседних контроллерах. Вот например как делается вьюшка в контроллере товара
    PHP:
    $this->response->setOutput($this->load->view('product/product'$data));
    Тут нет никакого пути до шаблона, кроме конечной части.
     
  5. megaCart

    megaCart Пользователь

    Сообщения:
    78
    Симпатии:
    4
    Честно сказать так и сделал, я так думаю что система само найдет пути до нужного шаблона.
     
  6. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    687
    Ну почему же

    Например модуль(расширение) Все товары

    И.. Что делает например 3-ка
    Разрешает публиковать только в extension

    Как управлять расширением, есть только одно место extension/module
    А другого подходящеге не придумали,
    Конечно, можно.. сделать..
    А может система должна позволить разделить расширение и модули?
     
  7. Vlad

    Vlad Эксперт

    Сообщения:
    4.161
    Симпатии:
    1.013
    Можно сделать все, но многие ошибочно думают, что если есть модуль latest, то у него должна быть своя страница.

    Посмотрите на код.. где вы так сделали ))
    PHP:
    $this->response->setOutput($this->load->view('default/template/product/product'$data));
     
  8. megaCart

    megaCart Пользователь

    Сообщения:
    78
    Симпатии:
    4
    Моя ошибка хотел сказать что поменял на:
    PHP:
    $this->response->setOutput($this->load->view('product/item'$data));
     
  9. Vlad

    Vlad Эксперт

    Сообщения:
    4.161
    Симпатии:
    1.013
    и какой код контроллера получился теперь :)
     
  10. megaCart

    megaCart Пользователь

    Сообщения:
    78
    Симпатии:
    4
    как то так:
    PHP:
    <?php
    class ControllerExtensionTestProductProduct extends Controller {
        public function 
    index() {
            
    //$data['test'] = 'test';
            
    $data['header'] = $this->load->controller('common/header');
            
    $data['footer'] = $this->load->controller('common/footer');
            
    $this->response->setOutput($this->load->view('product/item'$data));
        }
    }
    ?>
    система автоматический загружает текущий шаблон.
     
  11. Vlad

    Vlad Эксперт

    Сообщения:
    4.161
    Симпатии:
    1.013
    Ну да. Все верно. Загружает шаблон product/item.twig
     
  12. john7

    john7 Пользователь

    Сообщения:
    38
    Симпатии:
    0
    Помогите разобраться, правильно ли делаю?
    решил попрактиковаться и изменил файл search
    в контроллере
    Код:
    <?php
    class ControllerCommonSearch extends Controller {
       public function index() {
            $data['search'] = 'test';
          
            $this->response->setOutput($this->load->view('common/search', $data));
       }
    }
    в шаблоне вывожу
    Код:
    <div>{{search}}</div>
    Но что-то перестало что-либо выводится.
     
  13. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    687
    $this->response->setOutput($this->load->view('common/search', $data));
    return $this->load->view('common/search', $data);
     
    john7 нравится это.
  14. john7

    john7 Пользователь

    Сообщения:
    38
    Симпатии:
    0
    Заработало, спасибо)
    А если я вношу правки, результат виден минут через 5, как-то можно это ускорить? Обновляю страницу в браузере через комбинацию ctrl+F5.
    т.е. мы упростили нашу конструкцию, но вот смотрю соседние файлы, там похожие конструкции используют дополнительную функцию, для чего?
    Код:
        public function info() {
            $this->response->setOutput($this->index());
        }
    Как правильно подключать еще один файл twig, мне нужно вывести из cart.php только количество товаров, а упрощать cart.twig мне не нужно.
    Создал файл cartold.twig и в header подключил его {{ cartold }}
    Создать новую функцию?
    Код:
    class ControllerCommonCart extends Controller {
        public function index() {
            $data['blabla'] = 'test';      
            return $this->load->view('common/cart', $data);
        }
       
        public function cartold() {
            $data['blablaqwerty'] = 'test2';  
            return $this->load->view('common/cartold', $data);
        }  
    }
     
    Последнее редактирование: 20 сен 2019
  15. john7

    john7 Пользователь

    Сообщения:
    38
    Симпатии:
    0
    создал отдельный контроллер
    В новом файле прописал /controller/common/cartold.php
    Код:
    class ControllerCommonCartold extends Controller {
        public function index() {
            $data['blabla'] = 'test';
            return $this->load->view('common/cartold', $data);
        }
    }
    в файле header.php
    прописал
    Код:
    $data['cartold'] = $this->load->controller('common/cartold');
    в шаблоне /template/common/header.twig
    {{ cartold }}

    Может можно проще?
    Как правильно вытянуть одну переменную из cartold.php в header.php
    Код:
    $data['cartold'] = $this->load->controller('common/cartold', $data['blabla']);
    или может прям в шаблоне twig можно вызвать как-то {{ cartold['blabla'] }}?
    не работает(
     
    Последнее редактирование: 20 сен 2019
  16. Ravilr

    Ravilr Специалист

    Сообщения:
    4.190
    Симпатии:
    1.439
    PHP:
    class ControllerCommonCartold extends Controller {
        public function 
    index() {
            
    $data['blabla'] = 'test';
            
    $data['blabla2'] = 'test2';
            return 
    $data;
        }
    }
    вытягиваем нужное
    PHP:
            $cartold $this->load->controller('common/cartold');
            
    $hhh $cartold['blabla'];
     
  17. john7

    john7 Пользователь

    Сообщения:
    38
    Симпатии:
    0
    принцип понятен, но не понятно как далее в шаблоне его вывести?
     
  18. Ravilr

    Ravilr Специалист

    Сообщения:
    4.190
    Симпатии:
    1.439
    В смысле как? Как и другие. Образно так.
    PHP:
    $data['blabla'] = $cartold['blabla']; 
    все что в дата потом рендерится тут
    PHP:
    return $this->load->view('common/header'$data);
    а в шаблоне выводится как обычно {{ blabla }}
     
  19. john7

    john7 Пользователь

    Сообщения:
    38
    Симпатии:
    0
    я так и сделал, но ошибка появилась - Warning: Illegal string offset 'blabla'
     
  20. Ravilr

    Ravilr Специалист

    Сообщения:
    4.190
    Симпатии:
    1.439
    Значит сделали не правильно. Вы наугад что ли делаете не пойму? Ошибка простая и говорящая. Нет в массиве ключа blabla Где у вас проблема?