0 Пользователей и 1 Гость просматривают эту тему.
  • 35 Ответов
  • 1364 Просмотров
*

kit2m2

  • Живу я здесь
  • 3269
  • 268 / 0
  • Беру сайты на полное сопровождение
Предыдущий программист написал код прямо в контроллере и view.

Можно как-то перенести этот код в плагин? Речь идет о контроллере orders.php (админки). Кнопки то я уже из view перенес, функции из плагина не могу разобраться как вызвать.

Мне не нужно готовое решение, просто объясните принцип, кто знает как...
Расширения для JoomShopping | Расширения на заказ | Сайты и магазины под ключ: Дизайн, Верстка, Программирование, СЕО-оптимизация, Сопровождение, Перенос на Joomla 4+ и JoomShopping 5+
*

sivers

  • Живу я здесь
  • 2464
  • 335 / 0
В контроллере добавьте вызов обработчика события:
Код
$app = JFactory::getApplication();
$app->triggerEvent('onBeforeOrderSave', array($cid, $post));
onBeforeOrderSave - произвольное имя события. В массиве - произвольный набор передаваемых даннных. В плагине обработчик для примера выше будет выглядеть так:
Код
public function onBeforeOrderSave($cid, $post){
}
Таким образом можно функции из контроллера вынести в плагин. В нужных местах вызываете плагин с передачей параметров (если надо) и получаете ответ от плагина.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

kit2m2

  • Живу я здесь
  • 3269
  • 268 / 0
  • Беру сайты на полное сопровождение
Спасибо за ответ. А нельзя как-то обойти вообще редактирование контроллера? Использовать уже имеющие триггеры?
Расширения для JoomShopping | Расширения на заказ | Сайты и магазины под ключ: Дизайн, Верстка, Программирование, СЕО-оптимизация, Сопровождение, Перенос на Joomla 4+ и JoomShopping 5+
*

draff

  • Гуру
  • 5803
  • 434 / 7
  • ищу работу
Использовать уже имеющие триггеры?
функции из плагина не могу разобраться как вызвать
Методы класса контроллера и не получится использовать. А в плагине метод класса получает такое же имя, как указано в trigger
*

sivers

  • Живу я здесь
  • 2464
  • 335 / 0
А нельзя как-то обойти вообще редактирование контроллера?
Код
// Вызываем com_finder для получения его результатов
$cpath = JPATH_SITE.'/components/com_finder';
if(!class_exists('FinderController')) require($cpath.'/controller.php');
if(!class_exists('JHtmlQuery')) require($cpath.'/helpers/html/query.php');
if(!class_exists('JHtmlFilter')) require($cpath.'/helpers/html/filter.php');
$config = array('base_path' => $cpath);
$ctrl = new FinderController($config);
$model = $ctrl->getModel('Search', 'FinderModel');
$view =& $ctrl->getView('search', 'html');
$view->addTemplatePath($cpath.'/views/search/tmpl');
$input->set('view', 'search');
$ctrl->display();

Это рабочий пример вызова компонента "умный поиск" из любого места. Позволяет выполнять методы контроллера, представления и модели. Подкорректируйте под свой компонент и уберите лишнее (модели и представления) - должно работать.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

kit2m2

  • Живу я здесь
  • 3269
  • 268 / 0
  • Беру сайты на полное сопровождение
Немного не понял, причем здесь вызов компонента, если речь идет о компоненте JoomShopping, его контроллере (orders.php) и его плагине (группы: jshoppingadmin)
Расширения для JoomShopping | Расширения на заказ | Сайты и магазины под ключ: Дизайн, Верстка, Программирование, СЕО-оптимизация, Сопровождение, Перенос на Joomla 4+ и JoomShopping 5+
*

sivers

  • Живу я здесь
  • 2464
  • 335 / 0
Немного не понял, причем здесь вызов компонента, если речь идет о компоненте JoomShopping
У меня пример записан для com_finder. Переделайте для com_joomshopping (или как он у вас называется?) и вызывайте его контроллер. По идее, должно хватить такого кода:
Код
$cpath = JPATH_SITE.'/components/com_joomshopping';
if(!class_exists('JoomShoppingController')) require($cpath.'/controller.php');
$config = array('base_path' => $cpath);
$ctrl = new JoomShoppingController($config);
$ctrl->имя_метода_контроллера();
Имена каталога компонента и его класса контроллера посмотрите в компоненте - мне не на чем. Вставить это все можно и в плагин.
А. Еще, если это из админской части компонента, то JPATH_ADMINISTRATOR вместо JPATH_SITE.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

kit2m2

  • Живу я здесь
  • 3269
  • 268 / 0
  • Беру сайты на полное сопровождение
То есть на странице будут работать два контроллера, точнее будет загружаться методы стандартного контроллера + дополнительный метод из другого?

Верно ли я Вас понял?
Расширения для JoomShopping | Расширения на заказ | Сайты и магазины под ключ: Дизайн, Верстка, Программирование, СЕО-оптимизация, Сопровождение, Перенос на Joomla 4+ и JoomShopping 5+
*

draff

  • Гуру
  • 5803
  • 434 / 7
  • ищу работу
Можно как-то перенести этот код в плагин? Речь идет о контроллере orders.php (админки).
контроллере (orders.php) и его плагине (группы: jshoppingadmin)
Вижу только
Код
 JPluginHelper::importPlugin('jshoppingorder');
Может поэтому и не работает, что не тот тип плагина
*

kit2m2

  • Живу я здесь
  • 3269
  • 268 / 0
  • Беру сайты на полное сопровождение
Может поэтому и не работает, что не тот тип плагина
Группа jshoppingadmin выше чем группа jshoppingorder. Она работает везде в админке. Кнопки же выводятся...
Расширения для JoomShopping | Расширения на заказ | Сайты и магазины под ключ: Дизайн, Верстка, Программирование, СЕО-оптимизация, Сопровождение, Перенос на Joomla 4+ и JoomShopping 5+
*

sivers

  • Живу я здесь
  • 2464
  • 335 / 0
Верно ли я Вас понял?
Все верно. Обычно такой необходимости не возникает, но вот когда начинаете делать какие-то костыли, то может понадобиться. Если никакой другой (более штатный) способ не подойдет.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

kit2m2

  • Живу я здесь
  • 3269
  • 268 / 0
  • Беру сайты на полное сопровождение
Если никакой другой (более штатный) способ не подойдет.

Спасибо, за совет, буду пробовать. А есть другие способы?
Расширения для JoomShopping | Расширения на заказ | Сайты и магазины под ключ: Дизайн, Верстка, Программирование, СЕО-оптимизация, Сопровождение, Перенос на Joomla 4+ и JoomShopping 5+
*

sivers

  • Живу я здесь
  • 2464
  • 335 / 0
А есть другие способы?
Сказал бы, если б знал. Но с жумшопингом не знаком. @draff выше намекал, что у этого компонента свои плагины есть и какие-то из них могут подойти для вашей задачи.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

ProtectYourSite

  • Живу я здесь
  • 2356
  • 135 / 4
  • Безопасность вебсайтов
Наверно только системным плагином.
*

draff

  • Гуру
  • 5803
  • 434 / 7
  • ищу работу
Группа jshoppingadmin выше чем группа jshoppingorder. Она работает везде в админке. Кнопки же выводятся..
Можете проверить, добавив в контроллер и вызов плагинов jshoppingadmin
*

kit2m2

  • Живу я здесь
  • 3269
  • 268 / 0
  • Беру сайты на полное сопровождение
Можете проверить, добавив в контроллер и вызов плагинов jshoppingadmin

Что проверить? Плагины группы jshoppingadmin работают во всей админке JoomShopping. Спасибо, конечно, но тема как перенести код из контролера в плагин, а не наоборот, как туда что-то добавить.

Сменил группу плагина на jshoppingorder, абсолютно ничего не изменилось
Расширения для JoomShopping | Расширения на заказ | Сайты и магазины под ключ: Дизайн, Верстка, Программирование, СЕО-оптимизация, Сопровождение, Перенос на Joomla 4+ и JoomShopping 5+
*

kit2m2

  • Живу я здесь
  • 3269
  • 268 / 0
  • Беру сайты на полное сопровождение
То есть на странице будут работать два контроллера, точнее будет загружаться методы стандартного контроллера + дополнительный метод из другого?

Верно ли я Вас понял?

Что-то не получается или мы друг друга неправильно поняли... @sivers - это способ подмены одного контроллера другим?
Расширения для JoomShopping | Расширения на заказ | Сайты и магазины под ключ: Дизайн, Верстка, Программирование, СЕО-оптимизация, Сопровождение, Перенос на Joomla 4+ и JoomShopping 5+
*

sivers

  • Живу я здесь
  • 2464
  • 335 / 0
это способ подмены одного контроллера другим?
нет же. это способ заставить отработать контроллер (вид/модель) на странице чужого компонента. не вместо, а вместе с ним. например, чтоб сделать на странице 2 списка (листинга) объектов, принадлежащих разным компонентом. Иногда заказчики и такое хотят.
У вас не получилось подключить контроллер вообще или не удается вызвать какой-то из его методов? Как объявлен метод? public?
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

kit2m2

  • Живу я здесь
  • 3269
  • 268 / 0
  • Беру сайты на полное сопровождение
Пишет что не находит класс контроллера
Расширения для JoomShopping | Расширения на заказ | Сайты и магазины под ключ: Дизайн, Верстка, Программирование, СЕО-оптимизация, Сопровождение, Перенос на Joomla 4+ и JoomShopping 5+
*

sivers

  • Живу я здесь
  • 2464
  • 335 / 0
Пишет что не находит класс контроллера
Ок, напишите как именно подключаете и откуда скачать JoomShopping - посмотреть.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

kit2m2

  • Живу я здесь
  • 3269
  • 268 / 0
  • Беру сайты на полное сопровождение
Код
$cpath = JPATH_ADMINISTRATOR.'/components/com_joomshopping/controllers';
if(!class_exists('JshoppingControllerOrders')) require_once($cpath.'/orders.php');
$config = array('base_path' => $cpath);
$ctrl = new JshoppingControllerOrdersEx($config);

Компонент

Могу скинуть один контроллер
Расширения для JoomShopping | Расширения на заказ | Сайты и магазины под ключ: Дизайн, Верстка, Программирование, СЕО-оптимизация, Сопровождение, Перенос на Joomla 4+ и JoomShopping 5+
*

sivers

  • Живу я здесь
  • 2464
  • 335 / 0
Пути надо было б поправить и имя класса
Код
$cpath = JPATH_ADMINISTRATOR.'/components/com_jshopping/controllers';
if(!class_exists('JshoppingControllerOrders')) require_once($cpath.'/orders.php');
$config = array('base_path' => $cpath);
$ctrl = new JshoppingControllerOrders($config);
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

sivers

  • Живу я здесь
  • 2464
  • 335 / 0
А дальше надо смотреть. Например, если используются какие-то гет/пост/реквест параметры, то перед созданием объекта контроллера эти параметры можно вписать в $_GET/$_POST/$_REQUEST, чтоб он их прочитал. Но это если нужны.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

kit2m2

  • Живу я здесь
  • 3269
  • 268 / 0
  • Беру сайты на полное сопровождение
Так получается, что названия контроллера должны быть одинаковыми и имя класса тоже?
Расширения для JoomShopping | Расширения на заказ | Сайты и магазины под ключ: Дизайн, Верстка, Программирование, СЕО-оптимизация, Сопровождение, Перенос на Joomla 4+ и JoomShopping 5+
*

sivers

  • Живу я здесь
  • 2464
  • 335 / 0
Так получается, что названия контроллера должны быть одинаковыми и имя класса тоже?

Нет, не совсем. Вам сперва надо знать какой именно контроллер вам нужен. Т.е. его класс. Если есть только объект и вы точно не знаете его класс, то можно посмотреть через print_r() или get_class() (напр. get_class($this); ).
Далее ищите в каком файле папки /controllers/ этот класс определен.
затем (это уже касательно кода) делаете проверку на предмет того, что класс уже подгружен и подключаете файл, только если класс еще не подгружался (т.е. не существует):
Код
if(!class_exists('JshoppingControllerOrders')) require_once($cpath.'/orders.php');
Ну и далее естественно, что создаете объект именно с тем классом, который проверяли:
Код
$ctrl = new JshoppingControllerOrders($config);
Если у вас в одном файле объявлено несколько классов, то проверяйте тот, который вам нужнее. И для него же new. Но в дистрибутиве в orders.php объявлен только один класс.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

kit2m2

  • Живу я здесь
  • 3269
  • 268 / 0
  • Беру сайты на полное сопровождение
Наверно не смогу разобраться самостоятельно (не достаточно знаний). Поможете (не бесплатно)?

Есть код который нужно перенести (из контроллера в плагин), есть заготовка плагина...
Расширения для JoomShopping | Расширения на заказ | Сайты и магазины под ключ: Дизайн, Верстка, Программирование, СЕО-оптимизация, Сопровождение, Перенос на Joomla 4+ и JoomShopping 5+
*

sivers

  • Живу я здесь
  • 2464
  • 335 / 0
Могу попробовать
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

draff

  • Гуру
  • 5803
  • 434 / 7
  • ищу работу
Есть код который нужно перенести (из контроллера в плагин), есть заготовка плагина..
Можно и мне, чисто для интереса.
*

kit2m2

  • Живу я здесь
  • 3269
  • 268 / 0
  • Беру сайты на полное сопровождение
Могу попробовать
Скайп StudioDK-WEB

Контроллер подключился
Расширения для JoomShopping | Расширения на заказ | Сайты и магазины под ключ: Дизайн, Верстка, Программирование, СЕО-оптимизация, Сопровождение, Перенос на Joomla 4+ и JoomShopping 5+
*

kit2m2

  • Живу я здесь
  • 3269
  • 268 / 0
  • Беру сайты на полное сопровождение
Короче пошли другим путем... Так тоже было бы реально, но тогда нужно было бы подключать и view и model (в моем случае...)

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

Все работает, уже проверено.
Расширения для JoomShopping | Расширения на заказ | Сайты и магазины под ключ: Дизайн, Верстка, Программирование, СЕО-оптимизация, Сопровождение, Перенос на Joomla 4+ и JoomShopping 5+
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться