Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

Передача значения переменной из контроллера в другой контроллер


Recommended Posts

Здравствуйте. Помогите, пожалуйста, советом.

Версия Opencart 2.1.0.2

 

Суть вопроса:

В каждой категории в левом меню выводим ссылку на информационную страницу (представление: catalog/view.../information/information.tpl ;) контроллер: catalog/controller/information/information.php).

Содержимое информационной страницы - динамическое. В частности, содержит вывод определённой строки, в зависимости от названия категории, с которой мы перешли на эту страницу.

Создал в контроллере категорий методы, переменную и присваивание ей значений. Заходим в категорию - значение переменной генерируется правильно (проверил выводом переменной в category.tpl

Как мне передать значение этой категории в контроллер information.php для вывода в представлении information.tpl?

Можно ли эту переменную сделать "глобальной" ("сквозной")? И, главное, как?

 

Рассматривал:

1. Передачу методом post при клике по ссылке

2. Добавить ручками таблицу в базу данных, отредактировать модель категории и информации, чтобы при открытии категории значение писалось в таблицу, а при открытии информационной страницы вытягивать его из базы.

3. Использовать сессии? :huh:

 

Есть простое решение? Спасибо.

 

Link to post
Share on other sites

Подпишусь, что бы не потерять интересную тему.

Заодно пять копеек вставлю:)

 

 

Цитата

В каждой категории в левом меню выводим ссылку

А как Вы её выводите?

 

1) Потому что, если категорий мало, то можно сделать её html модулем и каждой категории в схемах назначить свой модуль.

или

2) Можно перед выводом проверять кейсами и подставлять нужную ссылку в зависимости от 

Цитата

Заходим в категорию - значение переменной генерируется правильно

Зачем эта переменная в information.php? делайте проверку в категории (ну, чиста как вариант).

 

Для обоих случаев логика другая, не такая, как у Вас:

В каждой категории ссылка на свою отдельную страницу информации. Никто не запрещает сделать одинаковый текст ссылки, но разные целевые страницы. И тогда в catalog/controller/information/information.php никакая проверка и никакая переменная не нужна вовсе.

Edited by florapraktik
Link to post
Share on other sites

В 18.11.2017 в 19:27, florapraktik сказал:

А как Вы её выводите?

 

1) Потому что, если категорий мало, то можно сделать её html модулем и каждой категории в схемах назначить свой модуль.

или

2) Можно перед выводом проверять кейсами и подставлять нужную ссылку в зависимости от 

 

Временно вывожу статикой - просто вставил в .tpl нужную ссылку (на информационную страницу).

В 18.11.2017 в 19:27, florapraktik сказал:

Зачем эта переменная в information.php? делайте проверку в категории (ну, чиста как вариант).

 

Мне значение этой переменной необходимо для генерации соответствующего содержимого целевой информационной страницы.

Там несколько проверок условий. В зависимости от значения переменной генерируется разное содержимое.

 

В 18.11.2017 в 19:27, florapraktik сказал:

Для обоих случаев логика другая, не такая, как у Вас:

В каждой категории ссылка на свою отдельную страницу информации. Никто не запрещает сделать одинаковый текст ссылки, но разные целевые страницы. И тогда в catalog/controller/information/information.php никакая проверка и никакая переменная не нужна вовсе.

Изменено вчера в 19:34 пользователем florapraktik

Объясню, почему не хочу делать разные целевые страницы.

Есть задача. В определённой папке docs на сервере есть несколько подпапок 1,2,3 (условно и с упрощениями). В папках находятся файлы (один или несколько в каждой).

Что требуется.

а) Есть общая информ страница. Её содержимое генерируется динамически. В содержимом показано дерево вложенных папок и список вложенных файлов (с возможностью скачать файлы). Если клиент через фтп добавляет папку 4,5... и заливает туда файлы, то это автоматически будет отображаться в теле информ. страницы.

Эта часть сделана и работает норм. 

 

А вот с этой частью трабл (для этой части создана отдельная страница, на которую ведёт ссылка из левого меню)

б) Если мы находимся в категории А и кликаем по ссылке на информ страницу, то эта страница показывает дерево папок и файлов только из подпапки 1. Для Б - из подпапки 2 и т.п. Так что перед генерацией содержимого мне необходимо проверить значение переменной, которое связано с названием рубрики, из которой мы перешли по ссылке.

 

Если делать всё отдельными страницами, то при добавлении новой категории или подпапки с документами придётся в админке сайта добавлять новую информ страницу, для которой править код, выводить отдельную новую ссылку в колонке слева...

Link to post
Share on other sites

Ну, я так вообще не программист. Но я учусь.:)

А почему нельзя гет параметрами? Безопасность какая-нибудь, да? Но как тогда сортировки и фильтра работают с гет параметрами?

 

Link to post
Share on other sites

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

А почему нельзя гет параметрами? Безопасность какая-нибудь, да? Но как тогда сортировки и фильтра работают с гет параметрами?

Возможно, задачу можно решить гет-запросом.

Я прошу совета у знающих, можно ли передать значение переменной, не используя модель и работу с БД.

Link to post
Share on other sites

4 минуты назад, MikeTheRaven сказал:

Можно и гет-запросом решить. Добавляете категорию к нужной ссылке


if (isset($this->request->get['route']) && $this->request->get['route'] == 'product/category' && !empty($this->request->get['path'])) {
    $this->url->link('information/information', ['information_id' => $result['information_id'], 'category_id' => $this->request->get['path']]);
}

Это я дописываю в контроллере category.php?

 

5 минут назад, MikeTheRaven сказал:

$this->request->get['category_id']

А это в контроллере information.php?

 

Благодарю Вас.

Link to post
Share on other sites

Всем спасибо.

Проблему решил передачей параметра методом GET в ссылке

 

Админы, закройте тему.

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Similar Content

    • By sano4kin
      Приветствую!
       
      Делаю кастомное письмо о заказе. Нужно отдельным пунктом вывести стоимость доставки. Переменная {shipping_total} не работает... Нужно вытащить переменную, которая отвечает за стоимость доставки. Знаю что она используется в {totals}, и далее ее использует переменная {totals_text}. Кто знает, где подсмотреть?
    • By dmtrysh7
      Доброго времени суток.
       
      Есть задача:
      Необходимо настроить в админ панели выбор картинки для слайдера. Слайдер - отдельный модуль.
       
      Код контроллера admin/controller/module/slider.php:
      <?php class ControllerModuleSlider extends Controller { private $error = array(); // используется для установки ошибки, если такая возникла public function index() { $this->load->language('module/slider'); //подключаем языковой файл $this->document->setTitle($this->language->get('heading_title')); $this->load->model('setting/setting'); //подключаем модель setting, он позволяет сохранять настройки модуля в БД if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) { // если мы нажали "Сохранить" в панели, мы сохраняем текущие настройки $this->model_setting_setting->editSetting('slider', $this->request->post); // анализ и передача данных в Setting Model для сохранения в базе данных $this->response->redirect($this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL')); // редирект в Module Listing } // объявление переменных // формирование breadcrumbs // обработка ошибок из validate() // статус модуля // обработка текстовых полей // тут работа с изображением (пока что пробую сделать это с одним изображением) $this->load->model('tool/image'); if (isset($this->request->post['config_image1'])) { $data['config_image1'] = $this->request->post['config_image1']; } else { $data['config_image1'] = $this->config->get('config_image1'); } if (isset($this->request->post['config_image1']) && is_file(DIR_IMAGE . $this->request->post['config_image1'])) { $data['thumb1'] = $this->model_tool_image->resize($this->request->post['config_image1'], 100, 100); } elseif ($this->config->get('config_image1') && is_file(DIR_IMAGE . $this->config->get('config_image1'))) { $data['thumb1'] = $this->model_tool_image->resize($this->config->get('config_image1'), 100, 100); } else { $data['thumb1'] = $this->model_tool_image->resize('no_image.png', 100, 100); } $data['placeholder'] = $this->model_tool_image->resize('no_image.png', 100, 100); // далее завершающая часть (setOutput ) } protected function validate() { // проверка прав доступа пользователя для работы с модулем if (!$this->user->hasPermission('modify', 'module/category')) { $this->error['warning'] = $this->language->get('error_permission'); } // проверка заданы ли текстовые поля if (!$this->request->post['config_image1']) { $this->error['code'] = $this->language->get('error_code'); } return !$this->error; } }  
      Кусок кода представления  admin/view/template/module/slider.tpl:
      <div class="form-group"> <label class="col-sm-2 control-label" for="input-image"><?php echo $entry_image; ?></label> <div class="col-sm-10"><a href="" id="thumb-image" data-toggle="image" class="img-thumbnail"><img src="<?php echo $thumb1; ?>" alt="" title="" data-placeholder="<?php echo $placeholder; ?>" /></a> <input type="hidden" name="config_image1" value="<?php echo $config_image1; ?>" id="input-image" /> </div> </div>  
      Кусок кода catalog/controller/module/slider.php:
      <?php class ControllerModuleSlider extends Controller { public function index() { $this->load->language('module/slider'); //подключаем любой языковой файл $data['heading_title'] = $this->language->get('heading_title'); //объявляем переменную heading_title с данными из языкового файла $data['slider_slide1_span'] = $this->config->get('slider_slide1_span'); $data['slider_slide2_span'] = $this->config->get('slider_slide2_span'); $data['slider_slide3_span'] = $this->config->get('slider_slide3_span'); $data['slider_slide4_span'] = $this->config->get('slider_slide4_span'); $data['slider_slide1_bold'] = $this->config->get('slider_slide1_bold'); $data['slider_slide2_bold'] = $this->config->get('slider_slide2_bold'); $data['slider_slide3_bold'] = $this->config->get('slider_slide3_bold'); $data['slider_slide4_bold'] = $this->config->get('slider_slide4_bold'); $data['config_image1'] = $this->config->get('config_image1'); //стандартная процедура для контроллеров OpenCart, выбираем файл представления модуля для вывода данных if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/slider.tpl')) { return $this->load->view($this->config->get('config_template') . '/template/module/slider.tpl', $data); } } }?>  
      Кусок кода catalog/view/template/module/slider.tpl:
      <div class="main_title slide" > <img src="<?php echo $config_image1; ?>" alt="<?php echo $slider_slide1_span . ' ' . $slider_slide1_bold; ?>"> <div class="container--small"> <div class="title_text"> <span><?php echo $slider_slide1_span; ?></span> <h1><?php echo $slider_slide1_bold; ?></h1> </div> </div> </div>  
      Проблема в том, что в представление catalog/view/module/slider.tpl $config_image1 передаётся как (unknown). Есть мысли, что это из-за модификации имён переменных, т.к. они участвуют в AJAX запросах. 
       
      Подскажите, пожалуйста, почему приходит (unknown)?
      Не использую модель, т. к. с текстовыми полями это работает и по аналогии (из setting.php) пытаюсь сделать с картинкой.
    • By Ronni10
      Как в /catalog/model/extension/total/shipping.php обратиться к продуктам в корзине? K $this->cart->getProducts(). Opencart 2.3
    • By VickoF
      Добрый день. У меня в классе продукта есть метод кототрый импортирует нужные товары, записей много и постоянно выскакивает ошибка таймаута. Решено запускать скрипт через консоль по ssh. Подскажите как в таком случае вызвать нужный контролер и в нем метод? Кто занимался подобным?
    • By Snoop3000
      Добрый день всем. Делаю свою страницу вывода нужной информации на печать, где надо вывести данные с \admin\controller\sale\order.php. Оттуда все что мне надо я вытянул, но не могу добраться до фото товара (отдельно контроллера своего нету, делаю все через order.php).
      То есть, создана таблица, где должна быть фото товара и его параметры. Что только не пробовал, даже добавил в order.php контроллер:
      $this->load->controller('catalog/product'); $data['kartinka'] = $product['image']; Но в файле info.tpl и дальше $kartinka просто пустое значение
      <img src="<?php echo $kartinka; ?>" style="float:left"> Моих знаний не хватает, я не могу понять как передать простое значение $product['image'] в другое место, отличающее от product.tpl.
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

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.