Новости Joomla

Joomla 6 нуждается в вашей помощи с тестированием.Вышел недавно релиз Joomla 6 alpha1

Joomla 6 нуждается в вашей помощи с тестированием.Вышел недавно релиз Joomla 6 alpha1

👩‍💻 Joomla 6 нуждается в вашей помощи с тестированием.Вышел недавно релиз Joomla 6 alpha1. Это релиз, в который включены уже проверенные изменения, но ещё очень многие исправления и улучшения ждут своей очереди. Joomla следит за качеством и безопасностью своего кода и каждое изменение должно быть успешно протестировано как минимум ещё двумя участниками сообщества. Разработка Joomla ведётся на платформе GitHub.Филипп Уолтон (Philip Walton) - один из разработчиков, кто активно вносит свой вклад в ядро Joomla. Он уже несколько месяцев посвящает свои послеполуденные часы пятницы работе с Joomla и предлагает присоединиться к нему. 📆 Пятница, 30 мая 2025, с 15:00 до 17:00 по UTC (Лондон) - с 18:00 до 20:00 по Москве.В чате Google Meet Филипп готов помочь с тестированием тем, кто будет делать это в первый раз. А так же он подготовил список лёгких Pull Request, которые можно протестировать довольно быстро. Чем больше тестов будет проведено сейчас, тем меньше ошибок вылезет потом. На данный момент 148 (уже 147 на момент написания заметки) PR на GitHub Joomla ждут тестирования.👩‍💻 Open to all. All together.Также вам поможет сделать первые шаги это видео.GitHub JoomlaДа, это вечер пятницы. Но тестирование занимает порой минут 15, а доброе дело сделано. Просто убедитесь, что разработчик чего-то не пропустил и всё работает как ожидается.#joomla #joomla6 #community

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

borodatych

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Создание компонента MVC
« : 13.03.2015, 21:21:39 »
Доброго времени суток.

Начну с того я в основном работал с такими FW как Yii, Zend, Kohana.
В итоге у меня образовалось не понимание платформы Joomla, расхождение паттернов или как там оно по умному...

На текущий момент выпала задачка поработать с Joomla версии 2.5.х - нужно создать компонент для магазина автозапчастей.
Прочитал порядка 4-6 туториалов с разных на вроде как вменяемых сайтах.
Все они приводят одни и теже примеры, с разными пояснениями - один вид, контроллер по дефолту и модель с таки же именем как вид.

В случае использованных мною ранее FW, главным является контроллер, который определяется через маршрут - путем анализа REQUEST_URI по регулярному вырожению.
Далее в контролере я определяю модель, получаю данные и передаю их в вид, по дефолту с таким де именем как контроллер(ну почти).
В Joomla, как я понял, главным является вид, то что в GET переменой view, если не юзать ЧПУ(не знаю даже если оно тут).
И далее от нее все пляшет - это как я понял, возможно Неправильно.

Все в принципе работает, но не хочется плодить бесконечное кол-во таких ячеек/частей, хочется как то сгруппировать.

У меня получилось вывести ?option=com_autocatalog&view=marks
Далее идет ?option=com_autocatalog&view=model&mark=ID
И все работает, но у некотрых каталогов нужно переключить, так скажем, интерфейс, или по другому(может правильному) контроллер (алгоритм, ход мыслей).

В итоге я формирую такой url: ?option=com_autocatalog&view=bmw&controller=bmw&task=customAction
controller=bmw - должен вроде отрабатывать по умолчанию, но решил "перебздеть"

Метод customAction присутвтует в контроллере в site/controller/bmw.php, но он не отрабатыват.
Делаю "ход конем" добавлю этот же метод:

Код
public function customAction(){
    echo  'custom action bmw';
}

В site/autocatalog.php, перепаковываю->заливаю и вижу искомую надпись.

Что я Неправильно делал, почему в site/controller/bmw.php не отработало?

В итоге мне нужно получить такую схему:

?option=com_autocatalog
&interface=(bmw|toyota)
&method=(getMarkets|getModel|...)


Надеюсь получилось объяснить. Если что спрашивайте дополню, не знаю что излить еще нужно...
Благодарю за внимание.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Создание компонента MVC
« Ответ #1 : 13.03.2015, 21:31:44 »
главным является контроллер, который определяется через маршрут - путем анализа REQUEST_URI по регулярному вырожению.
Далее в контролере я определяю модель, получаю данные и передаю их в вид
Да, так и должно быть.
Приведу код входной точки com_content
Код: php-brief
defined('_JEXEC') or die;

require_once JPATH_COMPONENT.'/helpers/route.php';
require_once JPATH_COMPONENT.'/helpers/query.php';

$controller = JControllerLegacy::getInstance('Content');
$controller->execute(JFactory::getApplication()->input->get('task'));
$controller->redirect();
Откройте код какого-нибудь стандартного компонента и посмотрите.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Создание компонента MVC
« Ответ #2 : 13.03.2015, 21:41:33 »
В форме, в поле, где указываете task, вам по условию необходимо указывать нужный контроллер.метод. Для этого вы можете из реквеста считывать &controller=bmw&task=customAction и указывать их, либо указывать предполагаемое значение по умолчанию. Но так обычно не делают. Зачем вам плодить 100500 контроллеров для одного вида? Делайте все в одном, вызывайте один метод, а уж в нем распарсиваете реквест и, в зависимости от значения присутствующих/отсутствующих параметров вызываете в том же контроллере соседний метод.

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

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Re: Создание компонента MVC
« Ответ #3 : 13.03.2015, 21:45:42 »
в Joomla алгоритм действий переключают через task(задача)
передаете ?option=com_autocatalog&task=myTask
и в вашем контроллере дефолтном пишите:
public function myTask(){
//и тут можете вызвать модель или написать нужную вам логику
}

Так же можете вызвать задачу в  контроллере из папки controllers для этого нужно написать ?option=com_autocatalog&task=controllerName.taskName&...
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Создание компонента MVC
« Ответ #4 : 13.03.2015, 21:51:42 »
borodatych, не заморачивайтесь. IMHO, Joomla отличается от других CMS только своей API. Пишите, как вам удобнее - я так делаю :), придерживаясь принципов:
1. экономия ресурсов
2. минимум кода
3. удобочитаемость кода
« Последнее редактирование: 13.03.2015, 21:55:53 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

borodatych

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Re: Создание компонента MVC
« Ответ #5 : 13.03.2015, 21:58:49 »
Благодарю за ответ, robert, не помогло...

url: /index.php?option=com_autocatalog&view=bmw&controller=bmw&task=customAction

Точка входа:
Код
<?php defined('_JEXEC') or die;

JLog::addLogger(
    ['text_file' => 'com_autodealer.php'],
    JLog::ALL,
    ['com_autodealer']
);

JError::$legacy = false;

JLoader::register('AutoDealerCFG', dirname(__FILE__). '/helpers/cfg.php');
JLoader::register('AutoDealerLNG', dirname(__FILE__). '/helpers/lng.php');
JLoader::register('AutoDealerAPI', dirname(__FILE__). '/helpers/lib.php');

$doc =& JFactory::getDocument();
$doc->addStyleSheet( '/media/com_autodealer/css/main.css' );
$doc->addStyleSheet( '/media/com_autodealer/css/fw.css' );
$doc->addStyleSheet( '/media/com_autodealer/css/style.css' );

jimport('joomla.application.component.controller');

$controller = JControllerLegacy::getInstance('AutoDealer');
$input = JFactory::getApplication()->input;
///$controller->execute($input->getCmd('task', 'display'));
$controller->execute(JFactory::getApplication()->input->get('task'));
$controller->redirect();


dev/autocatalog/site/controllers/bmw.php:
Код
<?php defined('_JEXEC') or die;

jimport('joomla.application.component.controller');

class AutocatalogControllerBmw extends JControllerLegacy {

    public function customAction(){
        echo  'custom action bmw';
    }

}


dev/autocatalog/site/models/bmw.php:
Код
<?php defined('_JEXEC') or die;

jimport('joomla.application.component.modelitem');

class AutocatalogModelBmw extends JModelItem{

    public function getTypes(){
        if( !isset($this->_object) ){
            $this->_object = 'BMW Types';
        }
        return $this->_object;
    }

}

dev/autocatalog/site/views/bmw/view.html.php:
Код
<?php defined('_JEXEC') or die;

jimport('joomla.application.component.view');

class AutocatalogViewBmw extends JViewLegacy{

    protected $types;

    public function display($tpl = null){
        $this->types = $this->get('Types');
        parent::display($tpl);
    }
    
}


dev/autocatalog/site/views/bmw/tmpl/default.php:
Код
<?php defined('_JEXEC') or die;

print'<pre>';
print_r([
    'types'  => $this->types,
    'models' => $this->sModels
]);
print'</pre>';



Результат:
Код
Array
(
    [types] => BMW Types
    [models] =>
)
*

borodatych

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Re: Создание компонента MVC
« Ответ #6 : 13.03.2015, 22:01:01 »
AlekVolsk
То есть единственный выход - в виде обрабатывать переменные и на их основе уже дальше рулить?
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Re: Создание компонента MVC
« Ответ #7 : 13.03.2015, 22:03:02 »
Благодарю за ответ, robert, не помогло...

url: /index.php?option=com_autocatalog&view=bmw&controller=bmw&task=customAction

потому что вызов должен быть: index.php?option=com_autocatalog&task=bmw.customAction
*

borodatych

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Re: Создание компонента MVC
« Ответ #8 : 13.03.2015, 22:10:36 »
Istaan
Премного благодарен, пока достаточно.
*

borodatych

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Re: Создание компонента MVC
« Ответ #9 : 13.03.2015, 22:20:20 »
Прошу прощения, поторопился с выводами...

url: ?option=com_autodealer&view=bmw&controller=bmw&task=bmw.customAction

Все без изменений кроме:

dev/autocatalog/site/controllers/bmw.php:
Код
<?php defined('_JEXEC') or die;

jimport('joomla.application.component.controller');

class AutoDealerControllerBmw extends JControllerLegacy {

    public function customAction(){
        $this->customAction =  'custom action bmw';
    }

}


dev/autocatalog/site/views/bmw/tmpl/default.php:
Код
<?php defined('_JEXEC') or die;

AutoDealerAPI::instance()->e([
    'types'  => $this->types,
    'customAction' => $this->customAction
]);

Пусто, но...


С dev/autocatalog/site/controllers/bmw.php:
Код
<?php defined('_JEXEC') or die;

jimport('joomla.application.component.controller');

class AutoDealerControllerBmw extends JControllerLegacy {

    public function customAction(){
        echo  'custom action bmw';
    }

}

Вывод есть, но мне нужно передать результат в вид...
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Создание компонента MVC
« Ответ #10 : 13.03.2015, 22:34:00 »
Попробуйте так
Код: php-brief
   public function customAction(){
        $this->customAction =  'custom action bmw';
$view = $this->getView('bmw', 'html');
$view->setLayout('default');
$view->display();
    }
Естественно, у вас должен существовать views/bmw/view.html.php с function display($tpl = null).

P.S. См пост от Istaan - тогда не нужно возиться с view.html.php.
« Последнее редактирование: 13.03.2015, 22:59:40 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Re: Создание компонента MVC
« Ответ #11 : 13.03.2015, 22:37:00 »
ну для начала вы неправильно думаете что сделав так  ?option=com_autodealer&view=bmw&controller=bmw&task=bmw.customAction
вы вызовите отображение вида bmw!
На самом деле у вас выполнится только то что тут:
 public function customAction(){
        $this->customAction =  'custom action bmw';
    }
и все..
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Re: Создание компонента MVC
« Ответ #12 : 13.03.2015, 22:41:44 »
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Re: Создание компонента MVC
« Ответ #13 : 13.03.2015, 22:46:10 »
Вам нужно так:
Код: php
public function customAction(){
$view = $this->getView('bmw', 'html');
$view->customAction =  'custom action bmw';
$view->display();
}
И тогда передасца в вид значение!
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Создание компонента MVC
« Ответ #14 : 13.03.2015, 22:57:12 »
Код: php
public function customAction(){
$view->customAction =  'custom action bmw';
}
Да.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

borodatych

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Re: Создание компонента MVC
« Ответ #15 : 14.03.2015, 21:08:31 »
ну для начала вы неправильно думаете
Понял. Действительно сейчас путь можно сделать короче - ?option=com_autodealer&task=bmw.models

Вам нужно так:
Код: php
public function customAction(){
$view = $this->getView('bmw', 'html');
$view->customAction =  'custom action bmw';
$view->display();
}
И тогда передасца в вид значение!
Спасибо, то что нужно.

Но пока для счастья не хватает два момента:
1. Как в методе customAction для $view->customAction данные брать с модели по определенному методу, с возможностью передать свои параметры.
Что то типа:
Код
public function customAction(){
$view = $this->getView('bmw', 'html');
        $myArr = [];
$view->customAction = getData('model','method',$myArr);
$view->display();
}

2. В этом же методе подключить другой шаблон:
Код
public function customAction(){
$view = $this->getView('bmw', 'html','customAction');
        $myArr = [];
$view->customAction = getData('model','method',$myArr);
$view->display();
}
*

flyingspook

  • Живу я здесь
  • 3590
  • 247 / 9
*

borodatych

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Re: Создание компонента MVC
« Ответ #17 : 14.03.2015, 21:48:36 »
@borodatych
переводите 2.5* на 3* версию
Если честно, как то сыкотно. В свое время обновлял 1.5....было тяжело...
*

flyingspook

  • Живу я здесь
  • 3590
  • 247 / 9
Re: Создание компонента MVC
« Ответ #18 : 14.03.2015, 21:59:33 »
Если честно, как то сыкотно. В свое время обновлял 1.5....было тяжело...
уже все равно придется, аккуратно со всеми бэкапами не спеша и все будет нормально
*

borodatych

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Re: Создание компонента MVC
« Ответ #19 : 14.03.2015, 22:05:36 »
уже все равно придется, аккуратно со всеми бэкапами не спеша и все будет нормально
Хорошо. То что мне хочется в 2.5 не сделать?
*

flyingspook

  • Живу я здесь
  • 3590
  • 247 / 9
Re: Создание компонента MVC
« Ответ #20 : 14.03.2015, 22:09:44 »
Хорошо. То что мне хочется в 2.5 не сделать?
Сделать, но потом не обновить, а если обновить то переделывать.
*

borodatych

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Re: Создание компонента MVC
« Ответ #21 : 14.03.2015, 22:23:37 »
Сделать, но потом не обновить, а если обновить то переделывать.
Понимаю, но есть текущая задачка. Если есть подскажите, лишнем не будет.
Модуль потом пойдет в паблик, так что так итак потом под 3.х писать, и потдерживать 2.5.х
Что бы не казаться лентяем...прыгнул в метод getView, и как понял именно в этом методе я могу только сослаться на dev/catalog/site/views/bmw/view.customAction.php, переписав так:
Код
public function customAction(){
$view = $this->getView('bmw', 'customAction');
        $myArr = [];
$view->customAction = getData('model','method',$myArr);
$view->display();
}
Даже если по другому ни как, ито сойдет.
Но осталось одно - как получить данные с модели по методу, с возможностью передачи своих данных (последнее не обязательно, для образовательных целей)
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
*

borodatych

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Re: Создание компонента MVC
« Ответ #23 : 15.03.2015, 00:53:28 »
Код: php
$model = $this->getModel();
$view->data = $model->getData();

Как передать данные из контроллера в модель
Этого более чем достаточно.
А по ссылке все остальное не достающее.
От души!
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Re: Создание компонента MVC
« Ответ #24 : 15.03.2015, 01:41:20 »
Но пока для счастья не хватает два момента:
1. Как в методе customAction для $view->customAction данные брать с модели по определенному методу, с возможностью передать свои параметры.
Зачем вам тогда таск не совсем понятно?!
ведь все что вам нужно сделать делается банально вызовом ?option=com_autodealer&view=bmw!

в Joomla таски не совсем то что в Yii или Zend!
Если компоненту указать view это будет значить что дефолтный контроллер вызовет метод display! в методе dispaly будет подключена вьюха и ко вьюхе будет подключенна модель, которая относится к этой вьюхе!
В вьюхе вы можете дергать любой метод из модели через $this->get('MethodName');  (в модели метод должен называться public funciton getMethodName(); а дальше в шаблоне вьюхи вы выводите все что вам нужно!

Задачи в Joomla обычно юзают например для действий каких то, например удаления, редактирования, изменения! Но для отображения зачем пихать в контроллер не понятно!
*

borodatych

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Re: Создание компонента MVC
« Ответ #25 : 15.03.2015, 02:12:49 »
@Istaan
Если компоненту указать view это будет значить что дефолтный контроллер вызовет метод display!
Да, именно про это и гласят все уроки, как в частности:
Начните с этого: Создание компонента для Joomla 2.5

Но у меня очень много видов получается.
Как минимум для BMW - марок, рынка, модели, модификации, года выпуска, коробка, и тд
Поэтому мне захотелось как то их сгруппировать.
Если я пошел не верным путем, и у вас есть лучшие идеи, будет просто здорово, хочется сделать правильно, а не чтоб работало.
..для чтоб работало, я бы не задавал вопросов вообще..
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Re: Создание компонента MVC
« Ответ #26 : 15.03.2015, 02:25:05 »
Как минимум для BMW - марок, рынка, модели, модификации, года выпуска, коробка, и тд
Поэтому мне захотелось как то их сгруппировать.
Если я пошел не верным путем, и у вас есть лучшие идеи, будет просто здорово, хочется сделать правильно, а не чтоб работало.
Скажите а вы что собираетесь для каждой модели авто новый вид и задачу делать?)
Вам нужен для вашей задачи только один вид - вид списка (где вы выберете все записи)! А дальше вам банально прикручивать переменные!
Например:
?option=com_autodealer&view=autos&dealer=bmw&year=2012&korobka=auto&....&...
где вы в модели просто считаете эти переменные из $_REQUESR и на основании их уже сформируете условия для выборки из базы!
*

borodatych

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Re: Создание компонента MVC
« Ответ #27 : 15.03.2015, 03:09:17 »
?option=com_autocatalog&view=autos&dealer=bmw&year=2012&korobka=auto&....&...
где вы в модели просто считаете эти переменные из $_REQUESR и на основании их уже сформируете условия для выборки из базы!
Думал об этом, но у файла тогда потенциал большой. Поэтому в принципе и затеял группировку.
*

borodatych

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Re: Создание компонента MVC
« Ответ #28 : 15.03.2015, 03:10:55 »
...был дубль, из-за связи...
« Последнее редактирование: 15.03.2015, 03:39:43 от borodatych »
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Re: Создание компонента MVC
« Ответ #29 : 15.03.2015, 14:38:44 »
Думал об этом, но у файла тогда потенциал большой. Поэтому в принципе и затеял группировку.
Затеяли что то вы нескладное! Вам нужен всего один вид, и фильтры!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Подскажите как сделать русификацию компонента)

Автор stardel

Ответов: 4
Просмотров: 6827
Последний ответ 08.04.2015, 09:08:00
от oxotnikkz
Документация по созданию компонента для Joomla 2.5

Автор Sulpher

Ответов: 74
Просмотров: 57010
Последний ответ 17.11.2014, 13:43:07
от limon142
Как использовать облачные хранилища при создание пакета расширений?

Автор Aspik

Ответов: 4
Просмотров: 1658
Последний ответ 12.09.2014, 16:57:59
от Aspik
Вывод макета компонента в расширении XML

Автор DimkaJack

Ответов: 5
Просмотров: 1484
Последний ответ 21.08.2014, 19:05:24
от DimkaJack
Форма редактирования элемента компонента

Автор popoff17

Ответов: 5
Просмотров: 1527
Последний ответ 17.04.2014, 12:34:43
от b2z