Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Получить данные из контроллера в админкке в каталог


Recommended Posts

Прошу не кидаться тапками. Читал не мало , понимаю что принципе невозможно, но сложилась ситуация, очень нужно получить данные из контроллера админ части в контроллер каталога. Есть какой то костыль или какой то способ это сделать? версия 3.0.2 окстор.

Подскажите варианты плиз, перечитал немало когда то во второй версии был случай , такое делалось . В третьей перебрал всю церочку работы движка, насколько понимаю, не получается у меня. ((

Надіслати
Поділитися на інших сайтах


Можете установить расширение runkit чтобы можно было переопределять константу DIR_APPLICATION

Потом до вызова контроллера изменяете admin на catalog и после вызова восстанавливаете.

 

Если нету возможности установки runkit тогда нужно менять код и делать возможность загрузки из каталога в

system\engine\action.php

system\engine\loader.php

 

Чтобы можно было так:

$this->load->controller('common/search', array(), 'catalog');

Надіслати
Поділитися на інших сайтах

может быть будет легче просто сделать нужную выборку из БД (добавить нужные функции из моделей админки в модели каталога, если нужно) и вывести что надо?
Странное вообщето желание...

Надіслати
Поділитися на інших сайтах

14 минут назад, Prooksius сказал:

может быть будет легче просто сделать нужную выборку из БД (добавить нужные функции из моделей админки в модели каталога, если нужно) и вывести что надо?
Странное вообщето желание...

 

Согласен, но там данные так запутанно достаются с бд , выборка замудренная с нескольких таблиц, чтобы сказать я асс в этом то нет. хочется просто вызвать и забыть)).

 

26 минут назад, buslikdrev сказал:

Можете установить расширение runkit чтобы можно было переопределять константу DIR_APPLICATION

Потом до вызова контроллера изменяете admin на catalog и после вызова восстанавливаете.

 

Если нету возможности установки runkit тогда нужно менять код и делать возможность загрузки из каталога в

system\engine\action.php

system\engine\loader.php

 

Чтобы можно было так:

$this->load->controller('common/search', array(), 'catalog');

 

насчет runkit не слышал, спасибо попробую, второй способ оригинально, ) но ненастолько силен, чтобы одолеть. Как понимаю в лоадер передать третий параметр, но не могу понять где регистр переопределить с помощью этого параметра.

Надіслати
Поділитися на інших сайтах


а не проще ли взять метод из контройлера админки и поставить в тот контройлер где он нужен, ну если возникнет проблема с моделью на админской стороне то создаем такую же модель в каталоге

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

Надіслати
Поділитися на інших сайтах

вы бы лучше написали что вам нужно получить со стороны админки, потому как может быть и не нужно будет придумывать велосипед

Надіслати
Поділитися на інших сайтах

3 часа назад, controll сказал:

не могу понять где регистр переопределить

Не нужно регистр переопределять. Если бы путь строился регистром, тогда могли через регистр, а так константа там.

Вам просто нужно третий параметр в функциях добавить и изменять DIR_APPLICATION в action.php

 

Вот такое решение написал, если кому-то нужно дёргать в свой модуль:

Спойлер

	private function load_controller($route, $data = array(), $catalog = 'catalog') {
		$controller = null;

		if (is_file(str_replace('admin', 'catalog', DIR_APPLICATION) . 'controller/' . $route . '.php')) {
			$template_directory = $this->registry->get('config')->get('template_directory');

			if (is_file(str_replace('admin/view/template/', 'catalog/view/theme/default/template/', DIR_TEMPLATE) . $route . '.twig')) {
				if (!is_dir(DIR_TEMPLATE . 'catalogs')) {
					mkdir(DIR_TEMPLATE . 'catalogs', 0755);
				}
				$new_route = '';
				foreach (explode('/', str_replace('/' . basename($route), '', $route)) as $result) {
					$new_route .= '/'. $result;
					if (!is_dir(DIR_TEMPLATE . 'catalogs' . $new_route)) {
						mkdir(DIR_TEMPLATE . 'catalogs' . $new_route, 0755);
					}
				}
				copy(str_replace('admin/view/template/', 'catalog/view/theme/default/template/', DIR_TEMPLATE) . $route . '.twig', DIR_TEMPLATE . 'catalogs/' . $route . '.twig');
			}

			if (is_file(DIR_TEMPLATE . 'catalogs/' . $route . '.twig')) {
				$this->registry->get('config')->set('template_directory', 'catalogs/');
			}

			include_once(str_replace('admin', 'catalog', DIR_APPLICATION) . 'controller/' . $route . '.php');
			$controller = new ControllerCommonSearch($this->registry);
			$controller = call_user_func_array(array($controller, 'index'), array($data));

			$this->registry->get('config')->set('template_directory', $template_directory);
		}

		return $controller;
	}

 

echo $this->load_controller('common/search', array());

 

  • +1 1
Надіслати
Поділитися на інших сайтах

7 часов назад, buslikdrev сказал:

Не нужно регистр переопределять. Если бы путь строился регистром, тогда могли через регистр, а так константа там.

Вам просто нужно третий параметр в функциях добавить и изменять DIR_APPLICATION в action.php

 

Спасибо ), получил. Что-то мне казалось все более сложно, копал целый день до этого, не мог уловить момент с определением админ или каталог, неопытность ))

Надіслати
Поділитися на інших сайтах


19 минут назад, controll сказал:

 

Спасибо ), получил. Что-то мне казалось все более сложно, копал целый день до этого, не мог уловить момент с определением админ или каталог, неопытность ))

UPD Написал, а после заметил ваш вариант.

 

Я пошел немного другим путем

 

action.php

private $namespace = DIR_APPLICATION;

public function __construct($route, $namespace = false) {
	$this->id = $route;

    switch ($namespace){
      case 'admin':
      case 'catalog':
        $this->ns = DIR_PATH . $namespace . '/';
        break;
    }
................................

public function execute($registry, array $args = array()) {
		// Stop any magical methods being called
		if (substr($this->method, 0, 2) == '__') {
			return new \Exception('Error: Calls to magic methods are not allowed!');
		}
		
		$file  = $this->namespace . 'controller/' . $this->route . '.php';
		$class = 'Controller' . preg_replace('/[^a-zA-Z0-9]/', '', $this->route);
		
................................

в loader.php

 

public function controller($route, $data = array(), $namespace = false) {
		// Sanitize the call
		$route = preg_replace('/[^a-zA-Z0-9_\/]/', '', (string)$route);
		
		// Keep the original trigger
		$trigger = $route;
		
		// Trigger the pre events
		$result = $this->registry->get('event')->trigger('controller/' . $trigger . '/before', array(&$route, &$data));
		
		// Make sure its only the last event that returns an output if required.
		if ($result != null && !$result instanceof Exception) {
			$output = $result;
		} else {
			$action = new Action($route, $namespace);
			$output = $action->execute($this->registry, array(&$data));
		}

........................................

и всё, можно вызвать везде при необходимости $this->load->controller('common/search', array(), 'catalog'); ну или любой другой. Третий параметр по желанию, остальному коду не мешает.

PS в конфигах у меня всегда есть DIR_PATH на public_html , не знаю почему такого нет, мне всегда ее не хватает )))).

Желательно это всё в ocmod

Змінено користувачем controll
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.