Новости Joomla

JoomGallery 4.1.0 - компонент галереи изображений для Joomla

JoomGallery 4.1.0 - компонент галереи изображений для Joomla

JoomGallery 4.1.0 - компонент галереи изображений для Joomla.Новая итерация компонента продолжает развиваться, ведь с v.4.x компонент был переписан практически с нуля.👩‍💻 v.4.1.0. Что нового?- Редактирование метаданных изображений. Теперь метаданные можно не только читать, но и напрямую редактировать и записывать обратно в изображение JPG. Поддерживаются данные EXIF ​​и IPTC.- Полная совместимость с Joomla! 4.x, 5.x и 6.x. Компонент почистили от устаревших методов в коде.- Заметно ускорили загрузку больших галерей. Списки в админке, особенно для очень больших галерей ( >30 000 изображений), теперь загружаются значительно быстрее.- Несколько сеток lightGallery на одной странице. Будь то плагины контента или модули изображений: теперь вы можете отображать несколько галерей или категорий на одной странице без каких-либо ограничений.- Множество мелких исправлений ошибок и оптимизаций.Сайт проектаGitHub расширенияСкачать#joomla #расширения

Вышел релиз Joomla 5.3.2

Релиз исправлений ошибок Joomla 5.3.2

Проект Joomla рад сообщить о выпуске Joomla 5.3.2. Это релиз исправлений ошибок для серии Joomla 5.3.

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

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Получение модели в виде
« : 11.01.2011, 11:21:10 »
Здесь обсуждалось для 1.5

В 1.6 переписать метод display контроллера, чтобы добавить нужную модель не получается. То есть вот так не прокатит:
Код
$model = &$this->getModel('modelName');
$view->setModel($model, true);

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

Если кто-то уже начал писать под 1.6 - как Вы это обходите? Подключаете напрямую?
*

dremora

  • Захожу иногда
  • 461
  • 48 / 12
Re: Получение модели в виде
« Ответ #1 : 11.01.2011, 11:37:27 »
Я никак не обхожусь... Я раньше всё делал в режиме лагаси и без MVC. Потому, для меня это двойная нагрузка.

Потому стал делать строго по мануалам. И разобрал компонент.
Кстати, а что пишут в официальных источниках?

И значение этого?
Всё что не анархия, то фашизм...
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Re: Получение модели в виде
« Ответ #2 : 11.01.2011, 11:45:45 »
Да нигде нету документации. Везде самые простые примеры - работа с одной сущьностью... А нововведений дофига (особенно в адмнке), разобраться тяжко.
*

dremora

  • Захожу иногда
  • 461
  • 48 / 12
Re: Получение модели в виде
« Ответ #3 : 11.01.2011, 12:06:28 »
Ну например, где нужна новая модель, по такому принципу? Я не делал под 1.5 native. Можешь считать меня нубом. Но, желание научиться есть.

Кстати, я переписал под "advsearches". И всё заработало как нужно. И вот мне нужно, сделать так... Что-бы появилась кнопка импорта. Что-бы я смог пополнить эту таблицу из com_content.

Вероятно, для этого мне потребуется добавить модель... Как мне это сделать?
Всё что не анархия, то фашизм...
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Re: Получение модели в виде
« Ответ #4 : 11.01.2011, 12:48:27 »
Ну в 1.5 можно было добавить в метод display() нужного Контроллера-наследника следующий код:

Цитировать
$model = &$this->getModel('mName');
$view = &$this->getView('vName', 'html');
$view->setModel($model, false);

Таким образом шла передача нужной Модели в Вид.

В 1.6 такое у меня не получается сделать. Не знаю почему, но метод display() в Контроллере-наследнике вообще не учитывается. Может я чего-то косячу или ещё какой-то баг, но когда я добавляю метод display() в Контроллере-наследнике, то он не отрабатывает...
*

StarCat

  • Захожу иногда
  • 54
  • 8 / 0
Re: Получение модели в виде
« Ответ #5 : 11.01.2011, 13:24:02 »
Ну я конектил model для метода display в контроллере наследнике через проксик типа так

Код
public function &getModel($name = 'Имя контроллера', $prefix = 'Префикс')
{
$model = parent::getModel($name, $prefix, array('ignore_request' => true));
return $model;
}
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Re: Получение модели в виде
« Ответ #6 : 11.01.2011, 13:31:20 »
А дальше? Как Вы нужную Модель потом в Вид передавали из Контроллера-наследника?
*

StarCat

  • Захожу иногда
  • 54
  • 8 / 0
Re: Получение модели в виде
« Ответ #7 : 11.01.2011, 13:37:10 »
Пардон торопился и немного попутал в параметрах не имя контроллера а имя модели
Код
public function &getModel($name = 'Имя модели', $prefix = 'Префикс')
Ну вот и получаем уже по умолчанию переопределенный метод getModel с нужной нам моделью. и передавать ничего уже не надо вид будет работать именно с этой моделью
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Re: Получение модели в виде
« Ответ #8 : 11.01.2011, 14:12:46 »
Пардон торопился и немного попутал в параметрах не имя контроллера а имя модели
Код
public function &getModel($name = 'Имя модели', $prefix = 'Префикс')
Ну вот и получаем уже по умолчанию переопределенный метод getModel с нужной нам моделью. и передавать ничего уже не надо вид будет работать именно с этой моделью
Блин, а как другую модель передать? Как передать несколько моделей?
*

dremora

  • Захожу иногда
  • 461
  • 48 / 12
Re: Получение модели в виде
« Ответ #9 : 11.01.2011, 14:37:14 »
Он прав...

Код
defined('_JEXEC') or die;
jimport('joomla.application.component.controlleradmin');

class PhocaGuestbookCpControllerPhocaGuestbooks extends JControllerAdmin
{
protected $option = 'com_phocaguestbook';



public function &getModel($name = 'PhocaGuestbook', $prefix = 'PhocaGuestbookCpModel')
{
$model = parent::getModel($name, $prefix, array('ignore_request' => true));
return $model;
}
}
Всё что не анархия, то фашизм...
*

StarCat

  • Захожу иногда
  • 54
  • 8 / 0
Re: Получение модели в виде
« Ответ #10 : 11.01.2011, 14:43:40 »
Я наверно что то непонимаю. Или какая-то у Вас мегазадача :)
Делайте все тогда в контроллере компонента (1го уровня) там все вот эти штуки с getModel и setModel проходят.
Непонятно зачем вам тогда контроллеры видов?

можете кинуть код контроллера где вы пытаетесь прикрутить модель в методе display?
« Последнее редактирование: 11.01.2011, 15:13:17 от StarCat »
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Re: Получение модели в виде
« Ответ #11 : 11.01.2011, 15:41:28 »
Я наверно что то непонимаю. Или какая-то у Вас мегазадача :)
Делайте все тогда в контроллере компонента (1го уровня) там все вот эти штуки с getModel и setModel проходят.
Непонятно зачем вам тогда контроллеры видов?

можете кинуть код контроллера где вы пытаетесь прикрутить модель в методе display?
Да нету никакой мегазадачи.

Мне нужно в Виде PrefixViewName1 получить возможность вызывать Модель PrefixModelName2.

Мои действия:

1. В PrefixControllerName1 (это Контроллер-наследник) я добавляю метод display():

Цитировать
$model = &$this->getModel('Name2');
$view = &$this->getView('Name1', 'html');
$view->setModel($model, false);

2. В Виде PrefixViewName1 я делаю вызов модели:
Цитировать
$modelName2 = &$this->getModel('Name2');

Логика верная?

P.S.
Кода сейчас нет- он дома, а я на работе... Вечером скину. Но может до этого момента и тут разбермся ;)
*

StarCat

  • Захожу иногда
  • 54
  • 8 / 0
Re: Получение модели в виде
« Ответ #12 : 11.01.2011, 17:07:25 »
я на самом деле не уверен что контроллер наследник у Вас вообще отрабатывает. какой у вас параметр task передается? он должен выглядеть приблизительно так task=ИмяКонтроллераНаследника.Имятаска

т.е чтобы отработал display в контроллере наследнике ваш task должен быть таким task=PrefixControllerName1.display
« Последнее редактирование: 11.01.2011, 17:12:55 от StarCat »
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Re: Получение модели в виде
« Ответ #13 : 11.01.2011, 17:22:20 »
я на самом деле не уверен что контроллер наследник у Вас вообще отрабатывает. какой у вас параметр task передается? он должен выглядеть приблизительно так task=ИмяКонтроллераНаследника.Имятаска

т.е чтобы отработал display в контроллере наследнике ваш task должен быть таким task=PrefixControllerName1.display
Ну о том и речь! Я поэтому тему и создал :)
В 1.5 метод display() в наследнике всегда срабатывал без передачи task. А тут - фигу. Значит все таки придется выкручиваться... Тупо как-то...
*

StarCat

  • Захожу иногда
  • 54
  • 8 / 0
Re: Получение модели в виде
« Ответ #14 : 11.01.2011, 17:31:27 »
В 1.5 метод display() в наследнике всегда срабатывал без передачи task.
Да неужели! По моему всегда таск передавался :) Хотя я могу и ошибатся. Но имея 5 контроллеров наследников в каждом из которых имеем метод display как нам выбрать нужный.
ЗЫ вот кстати проверил на стандартном com_media (1.5). Передается там прекрасно таск
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Re: Получение модели в виде
« Ответ #15 : 11.01.2011, 17:45:05 »
Но имея 5 контроллеров наследников в каждом из которых имеем метод display как нам выбрать нужный.
Ну как я понимаю, выбирается нужный Контроллер исходя из имени Вида.

Вообщем, я полностью запутался :) У меня уже мозг кипит от 1.6  :laugh:
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Re: Получение модели в виде
« Ответ #16 : 12.01.2011, 10:58:29 »
Вот код контроллера, который отвечает за создание/редактирование записи:
[spoiler title="Код контроллера"]
Код: php
jimport('joomla.application.component.controllerform');

 /*
 * Controller for the tournament
 */
class EsportsControllerTournament extends JControllerForm
{
/**
* Display the view.
*
* @return void.
*/
public function display()
{
//debug
echo 'aaaaa';
parent::display();
}
}
[/spoiler]
По идее, когда я открываю создание/редактирование записи должна появляться надпись aaaaa. Но этого не происходит, потому что метод display() игнорится... А мне нужно через этот контроллер передать в Вид ешё несколько моделей. Вот как это сделать?
*

Lex

  • Завсегдатай
  • 1615
  • 274 / 1
Re: Получение модели в виде
« Ответ #17 : 12.01.2011, 11:08:42 »
parent::display;
попробуй убрать.
Жизнь заставила учиться.
В личке на вопросы не отвечаю.
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Re: Получение модели в виде
« Ответ #18 : 12.01.2011, 11:16:27 »
parent::display;
попробуй убрать.
Дык заметь, я даже ошибку допустил parent::display;, а должно быть parent::display();. Вообще код застопорился бы, но такого не произошло, потому что метод display() не отрабатывает.
*

SmokerMan

  • Гуру
  • 5291
  • 720 / 26
Re: Получение модели в виде
« Ответ #19 : 12.01.2011, 11:46:45 »
что нужно не понятно то? в JControllerForm есть метод getModel, вот его и вызывай
Код
class EsportsControllerTournament extends JControllerForm
{
public function getModel($name = 'Модель', $prefix = 'ПрефиксModel', $config = array('ignore_request' => true))
{
$model = parent::getModel($name, $prefix, $config);
return $model;
}
}
ссори не заметил выше.
ты лучше напиши чего нужно сделать то?
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Re: Получение модели в виде
« Ответ #20 : 12.01.2011, 11:49:08 »
Хорошо, я его вызваю и получаю модель. А как её в Вид дальше передать? :) Блин, мы по кругу ходим ^^
*

SmokerMan

  • Гуру
  • 5291
  • 720 / 26
Re: Получение модели в виде
« Ответ #21 : 12.01.2011, 11:50:37 »
Хорошо, я его вызваю и получаю модель. А как её в Вид дальше передать? :) Блин, мы по кругу ходим ^^
а зачем тебе ее в вид передавать. Вид как раз берет данные из модели.
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Re: Получение модели в виде
« Ответ #22 : 12.01.2011, 12:10:37 »
а зачем тебе ее в вид передавать. Вид как раз берет данные из модели.
Ну Вид же использует модель по умолчанию, а мне её не хватает. Мне нужно туда передать ещё одну модель.
*

Lex

  • Завсегдатай
  • 1615
  • 274 / 1
Re: Получение модели в виде
« Ответ #23 : 12.01.2011, 13:37:55 »
Не собирался пока разбираться, но не поленился качнул, все бросил и полазил по файлам. Первые впечатления (возможно ошибаюсь). bzzik, а ты не пытаешься использовать JControllerForm не по назначению. Так понял что JControllerForm не предназначен для показа данных. Только для валидации и сохранения, т.е. когда форма уже показана и заполнена. В этом случае даже не знаю для каких целей могут понадобиться две модели да еще в view и зачем этому контроллеру view?
Жизнь заставила учиться.
В личке на вопросы не отвечаю.
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Re: Получение модели в виде
« Ответ #24 : 12.01.2011, 13:48:49 »
Lex - спасибо, что пытаешься помочь. Да, ты прав. JControllerForm используется для валидации и сохранения. Но я думал, что в нем можно переопределить метод display(), ведь JControllerForm расширяет JController, в котором есть этот метод. Блин, расплодили контроллеров - в 1.5 было проще, расширил JController и доволен.

Но все равно мне тогда не ясно, как в Виде, который отображает одну запись (в режиме редактирования/создания) успользовать несколько моделей? Получается, что никак. Только через хелперы работать с базой... А это - дублирование кода.
*

Lex

  • Завсегдатай
  • 1615
  • 274 / 1
Re: Получение модели в виде
« Ответ #25 : 13.01.2011, 10:50:11 »
В 1.5 было так

Контроллер
Код: php
function display()
{
$model = $this->getModel();
$model1 = $this->getModel('Newmodel','MycomModel');
$view = $this->getView('Viewname','html');
$view->setModel($model1,false);
$view->setModel($model);
$view->display();
}

Представление
Код: php
function display($tpl = null) {
$c = $this->get('functionname1','modelname1');
$this->assignRef('defmodel',$c);
$n = $this->get('functionname2','modelname2');
$this->assignRef('newmodel',$n);
parent::display($tpl);
}
Может и для 1.6 подойдет
Жизнь заставила учиться.
В личке на вопросы не отвечаю.
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Re: Получение модели в виде
« Ответ #26 : 13.01.2011, 11:07:00 »
Lex - совершенно верно, было. Я об этом писал в этой теме. Но в 1.6 это не работает, по крайней мере для Вида редактирования/создания записи - метод display() не отрабатывает.

На оф. форуме тоже пока ответа не дали...
*

StarCat

  • Захожу иногда
  • 54
  • 8 / 0
Re: Получение модели в виде
« Ответ #27 : 13.01.2011, 15:50:53 »
В 1.5 было так

Контроллер
Код: php
function display()
{
$model = $this->getModel();
$model1 = $this->getModel('Newmodel','MycomModel');
$view = $this->getView('Viewname','html');
$view->setModel($model1,false);
$view->setModel($model);
$view->display();
}

Представление
Код: php
function display($tpl = null) {
$c = $this->get('functionname1','modelname1');
$this->assignRef('defmodel',$c);
$n = $this->get('functionname2','modelname2');
$this->assignRef('newmodel',$n);
parent::display($tpl);
}
Может и для 1.6 подойдет

Это все верно и для 1.6 но по умолчанию отрабатывает контроллер компонента который лежит в корне папки с компонентом, все остальные контроллеры из папки controllers отрабатывают только по параметру task через точку. это было и в 1.5 ( например com_media правда там параметр таск разбирался в самом компонете) это и в 1.6 (здесь таск разбирается методом getInstance самого класса JController). Специально проверил :)

Или путь к контроллеру, имя контроллера подставлялось в тупую например как в компоненте баннеров

Код
require_once( JPATH_COMPONENT.DS.'controllers'.DS.$controllerName.'.php' );
$controllerName = 'BannerController'.$controllerName;

// Create the controller
$controller = new $controllerName();

// Perform the Request task
$controller->execute( JRequest::getCmd('task') );
« Последнее редактирование: 13.01.2011, 16:15:11 от StarCat »
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
Re: Получение модели в виде
« Ответ #28 : 13.01.2011, 16:12:53 »
То есть получается, что в 1.5 можно было расширить базовый контроллер компонента, определить в нем метод display() и работать без потери функционала. А в 1.6, если базовый контроллер компонента расширяет JController, то мы теряем часть возможностей, которые доступны в JControllerAdmin & JControllerForm & JControllerList, и ещё до кучи не можем перепределить display() в контроллерах наследниках.
*

StarCat

  • Захожу иногда
  • 54
  • 8 / 0
Re: Получение модели в виде
« Ответ #29 : 13.01.2011, 16:26:51 »
То есть получается, что в 1.5 можно было расширить базовый контроллер компонента, определить в нем метод display() и работать без потери функционала. А в 1.6, если базовый контроллер компонента расширяет JController, то мы теряем часть возможностей, которые доступны в JControllerAdmin & JControllerForm & JControllerList, и ещё до кучи не можем перепределить display() в контроллерах наследниках.
Да почему же? :) Все осталось то же самое + добавился замечательный метод getInstance самого класса JController для разбора параметра таск
Ничто же не мешает так же вызвать контроллер наследник
Код
require_once( JPATH_COMPONENT.DS.'controllers'.DS.$controllerName.'.php' );
$controllerName = 'MyController'.$controllerName;
$controller = new $controllerName();
$controller->execute( 'display' );

bzzik тут дело не в методе display, а в том что сам контроллер не подключается.
« Последнее редактирование: 13.01.2011, 16:37:29 от StarCat »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться