Новости Joomla

Как тестировать Joomla PHP-разработчику? Компонент Patch tester.

👩‍💻 Как тестировать Joomla PHP-разработчику? Компонент Patch tester.Joomla - open source PHP-фреймворк с готовой админкой. Его основная разработка ведётся на GitHub. Для того, чтобы международному сообществу разработчиков было удобнее тестировать Pull Requests был создан компонент Patch Tester, который позволяет "накатить" на текущую установку Joomla именно те изменения, которые необходимо протестировать. На стороне инфраструктуры Joomla для каждого PR собираются готовые пакеты, в которых находится ядро + предложенные изменения. В каждом PR обычно находятся инструкции по тестированию: куда зайти, что нажать, ожидаемый результат. Тестировщики могут предположить дополнительные сценарии, исходя из своего опыта и найти баги, о которых сообщить разработчику. Или не найти, и тогда улучшение или исправление ошибки быстрее войдёт в ядро Joomla. Напомню, что для того, чтобы PR вошёл в ядро Joomla нужны минимум 2 положительных теста от 2 участников сообщества, кроме автора. Видео на YouTubeВидео на VK ВидеоВидео на RuTubeКомпонент на GitHub https://github.com/joomla-extensions/patchtester@joomlafeed#joomla #php #webdev #community

Вышел релиз Revo PageBuilder Toolkit for YOOtheme Pro 1.6

Вышел релиз Revo PageBuilder Toolkit for YOOtheme Pro 1.6.2PageBuilder Toolkit - это специализированный плагин для конструктора страниц Yootheme Pro, содержит набор различных утилит для ускорения процесса работы и отладки макета, множественные улучшения в интерфейсе, включая поддержку dark mode, подсказки, быстрая смена разрешения в окне просмотра и много чего еще.v.1.6.2 Что нового?- Индикатор статусов: теперь не просто показывает состояние запросов, но и делает автоматические попытки их отправки при кратковременных сбоях в сети, а если это не помогло, то переводит конструктор в ручной режим, что позволяет сохранит макет и настройки темы прежде чем вы потеряете все, что было сделано с момента последнего сохранения- Подсветка ошибок в макете: плагин анализирует код страницы и может автоматически подсвечивать data атрибуты с кучей мусора, которые попадают в код страницы при копипасте из Figma в TinyMCE (пригодится для старых макетов, в текущей работе плагин сам очищает код мусора). Также есть подсветка семантических ошибок сборки - дубли h1 тега на странице и вложенных друг в друга заголовков.- Улучшена поддержка будущего релиза Yootheme Pro 5 и редактора CodeMirror 6Плагин для русскоязычных пользователей доступен в каталоге расширений SovMart и распространяется за символическую плату (100р). Разработчики Joomla расширений и партнеры автора могут получить плагин бесплатно.Для работы плагина необходим конструктор страниц Yootheme Pro.Разработчик плагина - участник нашего сообщества Александр Судьбинов (@alexrevo), член официальной группы поддержки Yootheme Pro. Страница расширенияОписание на сайте автора@joomlafeed#joomla #yootheme

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

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
Вобщем вопрос: можно ли и как?  ::)
Создаю материал, и в папке  images автоматически создаётся папка, именем которой является alias материала.
И когда добавляешь изображения для статьи, то уже не нужно придумывать имя папки и создавать её, плюс гораздо удобнее вставлять код для вывода Simple Image Gallery.
« Последнее редактирование: 22.03.2016, 00:56:28 от goga_pgasovav »
*

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
В РНР я, к сожалению, не силён. Кроме 'echo'  едва ли самостоятельно что-то напишу (частично шутка).
Нашёл такую вот функцию: 'mkdir'. Зная алиас материала (а он полюбому задаётся либо пользователем, либо самой Joomla, при создании материала), можно подставить это значение в параметр pathname.
Но вот где происходит сохранение материала не могу разобраться. В файле edit.php админского шаблона не нахожу подобного.
*

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
Вобщем сделал частично, но пока, что называется, "через задницу".

Сначала добавил дополнительное поле — checkbox при создании/редактировании материала:

Код: xml
<fieldset name="image_folder" label="Image folder">
    <field name="create_folder"
        type="checkbox"
        label="Create automatically"
        value="1"
        default="0"
        filter="intval"
    />
</fieldset>

Дальше не придумал ничего умнее, чем написать в шаблоне материала следующее:

Код: php
//create folder for images
if ($params->get('create_folder') == 1) {
    $folder_name = $this->item->alias;
    $folder_name = substr($folder_name,0,30); //trim folder name to 30 characters
    
    $destination = JPATH_SITE.'/'."images/news";
    if (!file_exists($destination.$folder_name)) {      
        JFolder::create($destination .'/'. $folder_name, 0755);
    }
}

Собственно сам алгоритм и код работают. Папка создаётся, при условии, что чекбокс отмечен галочкой, обрезается название до нужной мне длины.
НО! Я думаю и ежу понятно, что:
1. Эта хрень выполняется каждый раз, когда загружается страница со статьёй  :o
2. Срабатывает только после того, как страницу хотя бы один раз загрузили, т.е. выполнился РНР-код.

Понимаю, что нечто похожее на мой код выше, надо добавить в какой-то из файлов administrator/com_content/ но не понимаю куда именно
Очень прошу помочь тех, у кого понимание механизмов Joomla куда глубже, чем моё  ::)
« Последнее редактирование: 22.03.2016, 00:59:29 от goga_pgasovav »
*

voland

  • Легенда
  • 11026
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Здесь нужно использовать плагины. И смотреть какие события удобнее использовать
*

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
voland, спасибо. А есть ли соображения, как сделать это без плагинов? Зачастую это громоздкие штуковины, и ради одной галочки в настройках материала крайне не хотелось бы их использовать. Кроме того, я искал плагины, позволяющие сделать это, но так и не нашёл.
*

voland

  • Легенда
  • 11026
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Зачем ***кодить?
Проще написать плагинчик и спокойно забыть о проблеме.
А то как обновляться то будете?
*

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
voland сайт, для которого пытаюсь реализовать эту задумку, работает на 2.5, которая уже не поддерживается. Перейти на 3.0 нет возможности. Так что обновление, в моей ситуации, роли не играет. К тому же я сам написание плагина не осилю.
*

voland

  • Легенда
  • 11026
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
Там все просто.
Тут поискать - была пара сервисов генерации плагинов - дальше обычный PHP
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Плагин - это врезка кода в том месте, где срабатывается событие. Этот механизм придуман, чтобы можно было добавить свой код, но не терять его при обновлении расширения, а также для удобства его дальнейшего изменения. Он будет стоько громоздким, сколько ваш код. Писать плагин несложно, нужно только соблюдение некоторых правил.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

SeBun

  • BanMaster
  • 4030
  • 259 / 5
  • @SeBun48
Оказываю услуги по Joomla | Миграция/Обновление | Сопровождение | IT-аутсорсинг | Недорогие домены и хостинг
*

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
Друзья, мы же не в идеальном мире живём. Когда клиент платит, я ищу фрилансера, который пишет всё, что необходимо, и получаю нормально обновляемую систему. В данном случае иемеем сайт с уже хакнутым ядром на устаревшей системе, которую никто не станет обновлять. Ресурсов для написания плагинов нет. Сам плагин написать я не в состоянии, если есть примеры, то дайте ссылку, но я не вижу смысла разводить здесь оффтоп, который совершенно не касается вопроса.

P.S.: Если вы рассматриваете вариант помощи за плату, то напишите пожалуйста в личку. Возможно мне хватит средств из собственного кармана для создания такого плагина, а разработка пригодится и на будущее. Я совершенно не против. Просто исходя из ситуации, я не рассматривал такой вариант изначально.
« Последнее редактирование: 22.03.2016, 14:35:59 от goga_pgasovav »
*

KKAAZZOO

  • Живу я здесь
  • 2288
  • 119 / 9
Когда клиент платит, я ищу фрилансера, который пишет всё, что необходимо, и получаю нормально обновляемую систему.

Так в чем проблема? Идите в коммерческий раздел
*

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
KKAAZZOO, Вы, видимо, читаете обрывками
*

KKAAZZOO

  • Живу я здесь
  • 2288
  • 119 / 9
Прочитал всю тему, вплоть до вашего последнего поста, где вы сами сказали как решаете проблемы. Более того вы сказали что готовы заплатить из собственного кармана. Коммерческий раздел для этого и предназначен.
*

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
Вообщем послушал я вас, ребята, и решил попробовать самостоятельно полноценный плагин написать.
Практически всё получилось, лишь одно препятствие встало на пути! Но обо всём по порядку:

Значит имеется дополнительное поле в материале:
(о нём уже писал, ничего не изменилось тут)

Код: xml
<fieldset name="image_folder" label="Image folder">
    <field name="create_folder"
        type="checkbox"
        label="Create automatically"
        value="1"
        default="0"
        filter="intval"
    />
</fieldset>

Далее код плагина:

imgdir.php
Код: php
<?php
defined('_JEXEC') or die;
class plgContentImgDir extends JPlugin
{
    public function onContentAfterSave($context, &$article)
    {
        $articleId = (JRequest::getVar('option')==='com_content' && JRequest::getVar('view')==='article')? JRequest::getInt('id') : 0;
        $article =& JTable::getInstance('content');
        $article->load($articleId);
        $folder_name = $article->alias;
        $folder_name = substr($folder_name,0,30);
        
        $art_attribs = new JParameter($article->attribs);
        
        if ($art_attribs->get('create_folder') == 1) {
            $destination = JPATH_SITE.'/'."images/news";
            if (!file_exists($destination.$folder_name)) {      
                JFolder::create($destination .'/'. $folder_name, 0755);
            }
        }
    }
}

?>

Вобщем при сохранении материала выдаёт ошибку: Save failed with the following error: Another article from this category has the same alias
Я пробовал менять onContentAfterSave($context, &$article) на onContentPrepare($context, &$row, &$params, $page = 0) и тогда всё работает прекрасно!
Но в этом случае я получаю решение, аналогичное тому, что было в самом начале: т.е. пока страничку один раз не загрузят директория создана не будет.
Вот такая печаль... Google ничем не помог, так что прошу помощи знатоков!  !
*

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
KKAAZZOO, не увидел сразу Ваше сообщение. Я говорил, что рассмотрю предложения, и тогда видно будет, смогу ли я за это заплатить. Так или иначе сам пробовать начал  :dry:
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Зачем еще раз загрузить JTableContent? Он и так уже передан. Попробуйте так
Спойлер
[свернуть]
На счет свойства $article->create_folder не уверен, если он не передан, то получите по-вашему.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
robert, это потрясающе! Спасибо огромное!
Действительно, заработало только когда убрал проверку параметра if ($article->create_folder==1) {}
Да ещё и так невероятно мой код сократили... Вобщем низкий поклон!

Да и вообще, всем кто писал спасибо! Если бы не вы, я бы не решился плагин писать, и топтался бы на месте, время от времени обходясь хаками ядра... Вобщем вопрос считаю закрытым.
*

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
Не спится мне спокойно. Решил усложнить задачу, и создавать папки в разных каталогах, в зависимости от категории.
У меня две основных категории: "news" и "catalog".
Я тут уже задавался вопросом, как узнать ID или alias самого верхнего уровня, и на фронтэнде это срабатывает безотказно, а вот в плагине моём работать отказывается..
Делал так:

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

После сохранения материала вылетает просто белая страница и ничего не происходит :/ Папка не создаётся.
Хотя после обновления списка материалов вижу, что материал создался успешно.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Не хватало "/":
Спойлер
[свернуть]
Не будь паразитом, сделай что-нибудь самостоятельно!
*

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
robert, вы знаете, что-то не срабатывает. Пытаюсь сохранить и выбрасывает на белую страницу  :(
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Спойлер
[свернуть]
Исправлен по замечанию dmitry_stas.
« Последнее редактирование: 27.03.2016, 12:44:52 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
я так на всякий случай уточню, JFolder же подключен? а то не видно по этому коду.
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
я так на всякий случай уточню, JFolder же подключен? а то не видно по этому коду.
+dmitry_stas :), сам не заметил.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
Во-первых, спасибо всем за помощь!
Во-вторых, надеюсь я ещё не надоел вам окончательно...
Но, к сожалению, пока что плагин не работает должным образом :/
Я попытался как можно глубже разобраться в причинах, и хотя бы найти проблемный участок кода. И таки нашёл!

Значит, для начала надо вообще удалить проверку if(!$isNew).
Объясняю почему: иногда нужно создать папку для уже существующего материала. А эта проверка не даёт это сделать (проверено!).
Кроме того, хотелось бы, чтобы плагин всё-таки работал в зависимости от опции "создавать/не создавать папку". Пока что обработку этого параметра из кода убрал, т.к. не срабатывало.

Ну и самое главное: пустая белая страница вылетает из-за этих строк:

Код: php
$categoriesModel=JCategories::getInstance('content');
$category=$categoriesModel->get($article->catid);
$parent=$category->getParent();

Когда я их удаляю, а вместо $parent->alias прописываю старое доброе 'news', всё сразу же начинает работать.
Вобщем что-то не так с проверкой главной категории...
*

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
Да. Вот ещё что добавить хотел.
В каталоге у меня вложенность типа "Основная категория" > "Подкатегория" > Материал – тут получается определить основную категорию как "catalog"
Но у новостей структура проще: "Новости" > Материал – тут основная категория определяется уже как root.
Я понимал, что это усложнит проверку и может повлиять на работоспособность плагина, потому временно убрал 'news' из параметров в плагине.
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Вобщем что-то не так с проверкой главной категории...
Стоит попробовать подключить JСategories: может быть, он тоже не загружен?
Не будь паразитом, сделай что-нибудь самостоятельно!
*

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
Стоит попробовать подключить JСategories: может быть, он тоже не загружен?
Спасибо! Попробую. Но дело в том, что когда я ставил событие onContentPrepare, то всё работало и без JFolder и без JСategories  :dry:
Всмысле проверял вывод параметров с помощью echo
*

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
Добавил

Код: php
jimport('joomla.application.categories');

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

goga_pgasovav

  • Захожу иногда
  • 445
  • 6 / 0
  • Внимательный джумловод
Аааааа! Урааа! Победа! Заработало! :)
Я просто в последней модификации кода забыл название папок в массиве поменять)
Я приводил "catalog" для примера, а на самом деле папка "collection" называется теперь (раньше я сразу поправлял, а в этот раз забыл!)
Вобщем подключение JСategories помогло!
Ещё раз благодарю robert за поддержку и помощь!

P.S.: Пока что этого вполне достаточно. В будущем было бы прекрасно расширить плагин настройками: например поле для воода ID (или alias) категорий, которые необходимо включать в обработку плагином. Ну чтоб каждый раз не поправлять этот вот массив категорий. И будет полноценное решение для всех желающих.

P.S.2: Ну и печально, что опция "создавать/не создавать" не срабатывает... Папки создаются каждый раз для любого материала из перечисленных категорий. А если, к примеру, новость без изображения, и папку создавать не нужно, то она всё равно будет создана.
« Последнее редактирование: 28.03.2016, 00:26:33 от goga_pgasovav »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Удалила папку Template

Автор Татьянаttt

Ответов: 2
Просмотров: 1789
Последний ответ 08.08.2024, 20:16:40
от Татьянаttt
Как добавить свое изображение в папку images/banner?

Автор RaIsaA

Ответов: 2
Просмотров: 1229
Последний ответ 28.11.2021, 15:54:20
от SeBun
Алиас пункта меню совпадает с именем подкаталога в каталоге с сист.файлами

Автор Andrey N.

Ответов: 14
Просмотров: 4155
Последний ответ 07.10.2021, 23:57:15
от Garrr
Блокировка материала! Что оно такое?

Автор Chebyrek

Ответов: 17
Просмотров: 17145
Последний ответ 30.06.2020, 16:33:09
от 1AZ1
Как вывести путь материала на страницу?

Автор Gromz

Ответов: 6
Просмотров: 2103
Последний ответ 14.12.2019, 20:19:21
от Gromz