Новости 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 Гость просматривают эту тему.
  • 29 Ответов
  • 2111 Просмотров
*

tm2010

  • Захожу иногда
  • 76
  • 0 / 0
Уважаемые Гуру
Строго не судите, очень слаб в компонентах, поэтому возможно вопрос покажется глупым
имеют list view аренда квартир, view каждой квартиры, ее занятость цена и тд все вроде, укладывается в модель MVC
Теперь , грубо говоря на этапе выбора квартиры нужно дать возможность ее забронировать, тоесть во view нужно ввести часть полей записи запроса на бронирование(Имя дата ,телефон, показать цену и тд)
Модель и view запроса на бронирование в админке сделал, просто чтобы была возможность редактировать.
А на фронте не понимаю как правильно, по инерции сделал дополнительный view  квартиры c какими-то полями для показа параметров квартиры, но тут же надо заполнить форму запроса на бронирование.
Можно ли скажем  использовать form-ы и  поля заготовленные в модели запроса на бронирование или просто тупо нарисовать форму с нужными полями и вручную сохранить? имею минимальный опыт работы с формами.
Тоесть, хотелось бы иметь максимальную проверку полей от джумлы , но не знаю как сделать это в чужом view (квартир)
или правильно делать модель записей бронирования и минуя view (тоже ни разу не делал такого), как то добавлять новую запись.
 
Может есть какие либо примеры где посмотреть
Спасибо заранее.любое мнение интересно.
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
По логике MVC у вас должно быть два разных вида
1. Вид это ваш список квартир
2. вид формы бронирования

Форму из другой модели можно дёрнуть аяксом..
И в форму можно динамично строить с любыми полями )
*

tm2010

  • Захожу иногда
  • 76
  • 0 / 0
И в форму можно динамично строить с любыми полями )
Спасибо.дернуть аяксом ... тоесть Joomla будет осуществлять проверку полей? ( я их сформировал в component creator). Примерчик бы какой, аяксом умею простейшие вещи типа загрузать raw формат из другой модели, без проверки.
Хотя...

Составляю простейшую форму где проставляю необходимые поля , и подтягиваю аяксом как обычный едит, только create сообразить как сделать
Спасибо большое :D :D :D :D :laugh:

« Последнее редактирование: 27.11.2017, 19:46:56 от tm2010 »
*

tm2010

  • Захожу иногда
  • 76
  • 0 / 0
 >
По логике MVC у вас должно быть два разных вида
1. Вид это ваш список квартир
2. вид формы бронирования

Форму из другой модели можно дёрнуть аяксом..
И в форму можно динамично строить с любыми полями )
Алекс , в общем как всегда - запутался в собственных соплях и не могу найти причину, до аякса дело не дошло.
поскольку довольно слаб в кишочках Joomla, надергал из интернета решений создал вид который как то работал ( тоесть сохранял в базу данных записи запросов, но с проверкой полей уперся, сейчас уже не помню причину.
поскольку делал урывками, чтото поломал и сейчас "добился" того что мой вид - заполнения и сохранения формы
ни черта не делает - тоесть не сохраняет.
поскольку искал на англоязычных сайтах , не сразу нашел Ваш конструктор компонентов, где вы описываете как сделать форму обратной связи. Сделал компонент - работает. Практически все уже переписал из него в свой - после нажатия на кнопку сохранить не запускается в модели метод save , где у вас сохранение и отправка почты
Вы не взгляните ?
view
Спойлер
[свернуть]

модель
Спойлер
[свернуть]

Контроллер
Спойлер
[свернуть]

Трассировка показывает что в модели выполняются функции getTable,getForm  до save дело не доходит
посмотреть как это работает можно на http://apartment-rentals-budapest.com/component/rentflat/clientbrequest
где-то я думаю проморгал разницу между именем компонента и именем вида, или еще что-то более важное, чего я не понимаю >:(
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
у вас не хватает <input type="hidden" name="option" value="com_rentflat" />
*

tm2010

  • Захожу иногда
  • 76
  • 0 / 0
у вас не хватает <input type="hidden" name="option" value="com_rentflat" />
Поставил в default.php
Спойлер
[свернуть]

действия не возымело, в default.php сгенерированным вашим конструктором, такого по-моему тоже нет
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Попробуйте так:
 <form action="<?php echo JRoute::_( 'index.php' )?>" method="post" class="form-validate">
*

tm2010

  • Захожу иногда
  • 76
  • 0 / 0
<form action="<?php echo JRoute::_( 'index.php' )?>" method="post" class="form-validate">
Спойлер
[свернуть]

я туда еще положил в корень ваш router.php что был сгенерирован вашим конструктором не особо понимая что он делает.
Убрал сейчас тоже. тоже никакого эффекта
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
а вы уверенны что метод save не срабатывает?
*

tm2010

  • Захожу иногда
  • 76
  • 0 / 0
Да, Vim debug  ставлю брейки на разных функциях модели, первая getTable, вторая getForm
save не работает.

и очень непонятно что после нажатия на save рабочий URL становится из классического
/index.php?option=com_rentflat&view=clientbrequest&layout=edit
в - component/rentflat/?view=clientbrequest&layout=edit
как левая часть - component/rentflat/ - ктото rewrite делает?
так и правая &layout=edit я во фронте компонента сейчас не нашел, постирал
чего его туда кидает этот view?  не пойму
думаю взять ваш компонент, сгенеренный конструктором и переписать его аккуратно под свои нужды, можно недели потратить на  поиски глупой ошибки
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
На функциях модели это всё хорошо, но для начала сделайте в контроллере:
public function save(){
die('correct');
}
и скажите или сработало
*

tm2010

  • Захожу иногда
  • 76
  • 0 / 0
На функциях модели это всё хорошо, но для начала сделайте в контроллере:
public function save(){
die('correct');
}
и скажите или сработало
> хорошо попробую попозже, сейчас убегаю

мне кажется  лучше с помощью вашего конструктора сделать  com_rentflat учебный с двумя view 1- дефолтный а второй вот с этой хрень - brequests
скорее всего я чтото гдето неправильно по конвенциям Joomla не переименовал или наоборот переименовал
только я непонял, можно ли в ваших таблицах создать только свои поля?
ps по форуму? можно ли в настройках аккаунта сделать послать по  почте нотификацию, что то не нашел
*

tm2010

  • Захожу иногда
  • 76
  • 0 / 0
собственно сделал
результат в URL
в контроллере  save срабатывает и после выдает вот такие ворнинги:

Warning: Declaration of RentflatControllerClientbrequest::allowSave() should be compatible with Joomla\CMS\MVC\Controller\FormController::allowSave($data, $key = 'id') in /var/www/web3/web/components/com_rentflat/controllers/clientbrequest.php on line 18
Call Stack
#   Time   Memory   Function   Location
1   0.0004   366960   {main}( )   .../index.php:0
2   0.0220   1221968   Joomla\CMS\Application\CMSApplication->execute( )   .../index.php:49
3   0.0220   1221968   Joomla\CMS\Application\SiteApplication->doExecute( )   .../CMSApplication.php:267
4   0.4436   1971424   Joomla\CMS\Application\SiteApplication->dispatch( )   .../SiteApplication.php:233
5   0.4477   1994616   Joomla\CMS\Component\ComponentHelper::renderComponent( )   .../SiteApplication.php:194
6   0.4486   2005856   Joomla\CMS\Component\ComponentHelper::executeComponent( )   .../ComponentHelper.php:367
7   0.4487   2026288   require_once( '/var/www/web3/web/components/com_rentflat/rentflat.php' )   .../ComponentHelper.php:392
8   0.4496   2046584   Joomla\CMS\MVC\Controller\BaseController::getInstance( )   .../rentflat.php:19
9   0.4500   2050528   require_once( '/var/www/web3/web/components/com_rentflat/controllers/clientbrequest.php' )   .../BaseController.php:283

( ! ) Warning: Declaration of RentflatControllerClientbrequest::save() should be compatible with Joomla\CMS\MVC\Controller\FormController::save($key = NULL, $urlVar = NULL) in /var/www/web3/web/components/com_rentflat/controllers/clientbrequest.php on line 18
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Вроде всё правильно, должно работать!
*

tm2010

  • Захожу иногда
  • 76
  • 0 / 0
протрассировал parrent::save в контроллере
$validData давал false
мой кастом validation message в форме перекрывал ошибку в поле Gender
Оказалось дряхлеющий мозг  старого павиана забыл что из каких-то тестовых соображений поставил return false в validation rules для поля gender. как водится - сам идиот, надо было не стесняться и выложить XML полей
я то решил что custom validation message появляется всегда если его обьявить в XML
а оно указыает когда rule  дает false
Alex спфсибо
*

tm2010

  • Захожу иногда
  • 76
  • 0 / 0
*

tm2010

  • Захожу иногда
  • 76
  • 0 / 0
Алекс , можно еще вопрос
У вас в уроке есть способ перенаправления страницы на дополнительный view result , где находится страница уведомления что почта отправлена и тд
я наверное так и сделаю,  но мне непонятно почему нигде не работает редирект на
index.php?option=com_content&view=article&id=4 ( на статью с текстом что все отправилось)
гдебы я не ставил этот url, во view  <form action="<?php echo JRoute::_
или в контроллере
Спойлер
[свернуть]

страница уходит на site http://apartment-rentals-budapest.com/component/rentflat/?view=clientbrequests
что впрочем понятно по дефолту на list view
ну получится у меня на показ артикля прыгнуть?
« Последнее редактирование: 11.12.2017, 17:12:47 от tm2010 »
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Эм в контроллере должно работать что то типа:
Код
public function save($key = null, $urlVar = null){
    if( parent::save($key, $urlVar) ){

        $this->setRedirect('index.php');
        return true;
    }
    return false;
}

У меня по крайней мере работает!
*

tm2010

  • Захожу иногда
  • 76
  • 0 / 0
Опять уперся, дня три убил, ничего не понимаю
есть работающая форма во фронте которая делает save
Спойлер
[свернуть]
мысль была добавить Cancel с тем чтобы в как то разнообразить выход из формы, ну например вернуться назад к выбору дат в уже выбранной квартире, но так чтобы выполнять это в функции cancel контролера
Добавляю <input type="hidden" name="task" value="clientbrequest.cancel" />
соответственно кнопку Cancel( она тут уже есть) понимаю что не вижу никакой логической связи между этими элементами, тоесть никакой гарантии что кнопка cancel будет отправлять clientbrequest.cancel
собственно обе кнопки в этом варианте сохраняют (функция save)
лазил по инету, нашел советы Дмитрия Рекуна
https://joomla.stackexchange.com/questions/5819/cancel-button-in-custom-default-php-layout-leads-to-form-validation-error
сделал так как   вроде он советует.
Спойлер
[свернуть]
при нажатии на Save в отладке JS вижу
        Joomla.submitform(task); что task="clientbrequest.save"
дальше куда-то скачет в jquery и в основном контроллере
controller = JControllerLegacy::getInstance('RentFlat');
// Perform the Request task
$input = JFactory::getApplication()->input;
в отладчике вижу
$input->data['task'] = (string [6]) `cancel`           
$input->data['option'] = (string [12]) `com_rentflat`     
обе кнопки вызывают функцию cancel
от ошибок JS связанных с обработкой этих кнопок вроде избавился.
где еще перехватить исполнение кода не знаю
Может кто-нибудь увидит мою глупость , бросающуюся в глаза?
сейчас по ссылке  http://apartment-rentals-budapest.com/?option=com_rentflat&view=clientbrequest
стоит второй вариант view под спойлером
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
у вас в коде два таска:

так делать низя ) У вас система не поймёт какой таск ей обрабатывать!
Оставьте одно поле task В котором значение value пустота:
то есть должно быть так: <input type="hidden" name="task" value="" />
Смысл кода который вы увидели у Димы в том что при нажатии на кнопку это значение подставляется в поле task и уже летит куда надо!

и тогда уже в контроллере в controllers/clientbrequest.php вы можете переопределить метод cancel и сделать с ним что угодно!
*

tm2010

  • Захожу иногда
  • 76
  • 0 / 0
Обалдеть, работает
Спасибо! не устану говорить)))
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Можно ли поинтересоваться с чего начать изучение для понимания как в FrontEnd производить сохранение в разных моделях?
Что-то я тоже часто встаю в ступор по этому поводу.

Вот например сейчас собрал данные с формы cart и отправил данные аяксом на обработку в другой вид(gotobank) и из вида пытаюсь подключить модель (order) и сделать в ней save не выходит, хотя в своемже соседнем компоненте проворачивал это.

Я тут видимо что-то на корню не понимаю - подскажите чего надо изучить?
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Вот например сейчас собрал данные с формы cart и отправил данные аяксом на обработку в другой вид(gotobank) и из вида пытаюсь подключить модель (order) и сделать в ней save не выходит, хотя в своемже соседнем компоненте проворачивал это.
Потому что вы не понимаете принципов MVC наверно, или что то перепутали! Вид служит только для вывода подготовленных данных! Данные для обработки нужно слать в контроллер! Контроллер уже может дёрнуть модель если вам нужно, в которой и делаете метод save и возвращаете контроллеру результат всего этого, а потом уже контроллер должен вам вернуть какие либо данные, а там уже от задачи зависит, либо вернуть json либо какой то HTML (а HTML в таких случаях лучше формировать в layouts) и в конце работы задачи контроллера делаете exit;
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Потому что вы не понимаете принципов MVC наверно, или что то перепутали! Вид служит только для вывода подготовленных данных! Данные для обработки нужно слать в контроллер! Контроллер уже может дёрнуть модель если вам нужно, в которой и делаете метод save и возвращаете контроллеру результат всего этого, а потом уже контроллер должен вам вернуть какие либо данные, а там уже от задачи зависит, либо вернуть json либо какой то HTML (а HTML в таких случаях лучше формировать в layouts) и в конце работы задачи контроллера делаете exit;
Конечно чего-то не понимаю, но...
Вид взаимодействует с моделью для вывода так вот может ли вид взаимодействовать с несколькими моделями и при этом в одной из них запустить метод save.

прохождение запроса по MVC мне видится следующим клиент->...->контроллер вида->вид->модель->вид->представление.

*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Сработало после того как создал структуры формы .xml и добавил функции в модель в которой происходит сохранение getForm getTable loadFormData
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Конечно чего-то не понимаю, но...
Вид взаимодействует с моделью для вывода так вот может ли вид взаимодействовать с несколькими моделями и при этом в одной из них запустить метод save.
Один вид, один контроллер, одна модель, это основа MVC...

прохождение запроса по MVC мне видится следующим клиент->...->контроллер вида->вид->модель->вид->представление.
Вот потому что вам так видится у вас и проблемы...
Правильное взаимодействие (по крайней мере у всех нормальных MVC фреймворков)


В Joomla это немного почему то извратили, и там контроллер запускает вид который бегает в модель, и выводит данный, притом вид бегает в модель односторонне, только получает данные, какие то данные отправить в неё не может..

Но в любом случае любая задача которая вам нужна, особенно с аяксом, решается как я писал выше:
1. Бежим в контроллер, запускаем в нём какой то метод, в нём подготавливаем данные
2. Подготовленные данные отправляем в модель (которая их например сохраняет в базе)
3. контроллером отдаём какие то данные обратно на ваш сайт
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
В Joomla это немного почему то извратили, и там контроллер запускает вид который бегает в модель, и выводит данный, притом вид бегает в модель односторонне, только получает данные, какие то данные отправить в неё не может..
Не понял до конца. Так все-таки как в Joomla это происходит?
клиент -> контроллер -> вид  -> модель -> вид -> клиент - это неправильно?
клиент -> контроллер -> модель -> контроллер -> вид (плюсом может быть  -> модель -> вид ) -> клиент - это правильно?

И другая проблема меня стала беспокоить. Я думал я умею подключать другие модели, а оказалось что нет.
есть два вида которые подключают другую модель код одинаков - результаты противоположны.

вот пример:
Код
class HzcatalogViewGoToBank extends JViewLegacy
{

public function display($tpl = null)
    {
...
$model = JModelLegacy::getInstance( 'order' , 'HzcatalogModel');
...
echo $model->some();
Этот работает, а нижний нет...
Код
class HzcatalogViewCart extends JViewLegacy
{

public function display( $tpl = null )
{
...
$model = JModelLegacy::getInstance( 'order' , 'HzcatalogModel');
echo $model->some();

Первый вызывается как raw вид для выполнения и вывода AJAX запроса, второй как вид HTML
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Не понял до конца. Так все-таки как в Joomla это происходит?
клиент -> контроллер -> вид  -> модель -> вид -> клиент - это неправильно?
Ну если почитать ту же википедию то там написано что то типа:
Цитировать
Модель предоставляет данные и методы работы с ними: запросы в базу данных, проверка на корректность. Модель не зависит от представления — не знает как данные визуализировать — и контроллера — не имеет точек взаимодействия с пользователем — просто предоставляя доступ к данным и управлению ими.
Чётко написано что модель не зависит от представления, а в Joomla модель как раз и зависит от представления, и можно из представления передавать данные в модель!


клиент -> контроллер -> модель -> контроллер -> вид (плюсом может быть  -> модель -> вид ) -> клиент - это правильно?
ну я выше же нарисовал схему как правильно, и как во всех фреймворках )


И другая проблема меня стала беспокоить. Я думал я умею подключать другие модели, а оказалось что нет.
есть два вида которые подключают другую модель код одинаков - результаты противоположны.
Возможно у вас где то ошибка перед эти кодом или после него, проверьте, но тут больше вас должно беспокоить что вы ломаете MVC парадигму )
С вида не должна вызываться модель )

У меня другой подход для вывода AJAX данных, который более соответствует логике MVC
1. Обращаемся в контроллер: index.php?option=com_hzcatalog&task=order.form

в контроллере controllers/order.php
создаёте метод:
publick function order(){
тут можно сбегать в модель получить какие то данные
вывести данные через JLayoutHelper::render() или отдать какие то JSON данные
exit;
}
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Спасибо! Тут видимо только практика поможет... Буду въезжать.
*

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 428 / 4
Спасибо! Тут видимо только практика поможет... Буду въезжать.
Советую поиграться с каким нить нормальным фреймворком, например Laravel, многие вещи сразу на места станут )
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться