Новости Joomla

SW JProjects v.2.5.0 - компонент каталога цифровых проектов на Joomla

SW JProjects v.2.5.0 - компонент каталога цифровых проектов на Joomla

👩‍💻 SW JProjects v.2.5.0 - компонент каталога цифровых проектов на Joomla.Компонент - менеджер цифровых проектов для Joomla! CMS. Компонент обеспечивает создание каталога цифровых проектов и предоставляет возможность скачивания, в том числе с использованием лицензионных ключей.👩‍💻 v.2.5.0. Что нового?Схемы структур данных для серверов обновлений. Теперь с SW JProjects вы может создавать сервер обновлений не только для расширений Joomla, но и свои собственные. Например, вам нужно, чтобы структура данных сервера обновлений была другая и формат должен быть, например, не XML, а JSON. Формирование структуры данных для сервера обновлений расширений Joomla вынесено в отдельный плагин. Вы можете создать свой собственный плагин и реализовать в нём нужную вам структуру данных, добавив или наоборот исключив отображаемые данные. Сервер обновлений в компоненте по-прежнему отображает информацию о списке проектов и их версиях, о конкретном проекте и его changelog.Можно выбрать схему данных сервера обновлений глобально для всего компонента, выбрать другую схему данных для категории проектов, а так же выбрать схему в каждом проекте.

Разработчикам в качестве образца можно посмотреть плагин схемы данных для Joomla в составе компонента или же плагин-образец JSON-схемы на GitHub.
Группа плагинов swjprojects. Для нужд компонента создана группа плагинов swjprojects. В частности, в этой группе находится плагин структуры данных Joomla расширений для сервера обновлений.Изменение языковых констант. Изменены некоторые языковые константы в панели администратора. Если вы делали переопределение констант - переопределите их снова.👩‍💻 Joomla 6. Внесены изменения для корректной установки и работы компонента на Joomla 6. Компонент успешно протестирован на Joomla 6-beta2.Минимальная версия Joomla - 5. Подняты минимальные системные требования: Joomla 5.0.0 и PHP 8.1.
- Страница расширения👉 Плагин-образец кастомной JSON-схемы данных для сервера обновлений на GitHub.- GitHub расширения- Документация на GitHub- Joomla Extensions Directory#joomla #расширения

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

👩‍💻 Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод triggerEvent(), с помощью которого раньше вызывались события для плагинов. Теперь чтобы в своём коде вызвать событие для плагина и получить от него результаты нужно:- создать объект класса события- передать в него параметры

use Joomla\CMS\Event\AbstractEvent;use Joomla\CMS\Factory;use Joomla\CMS\Plugin\PluginHelper;// Грузим плагины нужных группPluginHelper::importPlugin('system');// Создаём объект события$event = AbstractEvent::create('onAfterInitUniverse', [    'subject' => $this,    'data'    => $data, // какие-то данные    'article' => $article, // ещё материал вдовесок    'product' => $product, // и товаров подвезли]);// Триггерим событиеFactory::getApplication()->getDispatcher()->dispatch(    $event->getName(), // Тут можно строку передать 'onAfterInitUniverse'    $event);// Получаем результаты// В случае с AbstractEvent это может быть не 'result',// а что-то ещё - куда сами отдадите данные.// 2-й аргумент - значение по умолчанию, // если не получены результаты$results = $event->getArgument('result', []);
Плюсы такого подхода - вам не нужно запоминать порядок аргументов и проверять их наличие. Если вы написали свой класс события, то в плагине можно получать аргументы с помощью методов $event->getArticle(), $event->getData(), $event->getProduct() и подобными - реализуете сами под свои нужды. Если такой класс события написали, то создаёте экземпляр своего класса события и укажите его явно в аргументе eventClass
use Joomla\Component\MyComponent\Administrator\Event\MyCoolEvent;$event = MyCoolEvent::create('onAfterInitUniverse', [    'subject'    => $this,    'eventClass' => MyCoolEvent::class, // ваш класс события    'data'       => $data, // какие-то данные    'article'    => $article, // ещё материал вдовесок    'product'    => $product, // и товаров подвезли]);
Ожидаемо, что класс вашего события будет расширять AbsractEvent или другие классы событий Joomla.🙁 Есть неприятный нюанс - нельзя просто так вызывать событие и ничего не передать в аргументы. Аргумент subject обязательный. Но если вы всё-таки не хотите туда ничего передавать - передайте туда пустой stdClass или объект Joomla\registry\Registry.
@joomlafeed#joomla #php #webdev

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

boreus

  • Захожу иногда
  • 51
  • 7 / 0
Есть форма с селектором, в котором список из 70-80 пунктов.
Ссылку на форму сделал модулем(custom html) и вывожу его в каждой статье.
Но, если, предположим человеку понравился товар, он решил купить, тыкает "заказать" и видит огромный список, из которого он опять должен выбирать.
Как сделать чтоб выбирался нужный пункт, в зависимости от статьи с которой он перешел к форме?

Нашел вот такую штуку $_SERVER['HTTP_REFERER'], которая возвращает адрес страницы, с которой посетитель пришёл на данную страницу.
Но не хватает умения применить это.
Посоветуйте, кто знает, куда копать?
« Последнее редактирование: 28.05.2009, 21:43:25 от Forget-me-not »
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Если попробовать так:

Код: php
if ($_SERVER['HTTP_REFERER'] == 'адрес страницы')
{
   $selected = 'selected';
}

и в форме делать просто:

Код
<option <?php echo $selected; ?> value="value1">Это мой выбор</option>
*

boreus

  • Захожу иногда
  • 51
  • 7 / 0
А что должно быть в 'адрес страницы'? Адрес какой страницы?
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Вот это уже сложнее. То есть мы заранее не знаем, откуда придёт клиент, так? Я пока не вижу, как это сделать... Может где-то в сесии хранится ID товара, который он выбрал и оттуда его можно вытащить?

Это можно проверить - надо вывести массив сессий через print_r($_SESSION) и посмотреть, что в нём хранится.
*

boreus

  • Захожу иногда
  • 51
  • 7 / 0
Да, верно, не знаем. Может чем-то поможет структура списка:

Код
<select>
<option value='Название статьи'>Название статьи</option>
...

Может именно к 'Названию статьи' привязаться?
*

boreus

  • Захожу иногда
  • 51
  • 7 / 0
Вот, что дал print_r($_SESSION):
Цитировать
Array ( [__default] => Array ( [session.counter] => 48 [session.timer.start] => 1243402167 [session.timer.last] => 1243412858 [session.timer.now] => 1243413724 [session.client.browser] => Opera/9.64 (Windows NT 5.1; U; ru) Presto/2.1.1 [registry] => JRegistry Object ( [_defaultNameSpace] => session [_registry] => Array ( [session] => Array ( [data] => stdClass Object ( ) ) ) [_errors] => Array ( ) ) [user] => JUser Object ( [id] => 0 [name] => [username] => [email] => [password] => [password_clear] => [usertype] => [block] => [sendEmail] => 0 [gid] => 0 [registerDate] => [lastvisitDate] => [activation] => [params] => [aid] => 0 [guest] => 1 [_params] => JParameter Object ( [_raw] => [_xml] => [_elements] => Array ( ) [_elementPath] => Array (
  • => /home/name/public_html/libraries/joomla/html/parameter/element ) [_defaultNameSpace] => _default [_registry] => Array ( [_default] => Array ( [data] => stdClass Object ( ) ) ) [_errors] => Array ( ) ) [_errorMsg] => [_errors] => Array ( ) ) [session.token] => b118eb4bdd1a7a8097d871042abfdd0c ) [__eb81adcc4edfeccb1ba0f16dfe1a737f] => Array ( [chrono_verification] => f9825b6855a967b8f365a2315a22a3e7 ) )
Использую chronoforms. Список селектора вывожу запросом к базе jos_content, нужен код запроса?

Кстати стандартный SEO включен, ссылки выводятся в виде:
http://www.site.com/menu-alias1/menu-alias2/articleID-article-alias.html

Может тогда через айди или алиас статьи?

Спасибо что откликнулся.
« Последнее редактирование: 27.05.2009, 13:02:48 от boreus »
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Блин, походу в сессии ничего нету... Ты что-то говорил про зависимость от статьи - может по ID статьи можно определить. Хотя нет - нам нужно к товару как-то привязаться.

А можно это вживую глянуть?
*

boreus

  • Захожу иногда
  • 51
  • 7 / 0
Скинул в личку
Попробуй с какой нибудь статьи перейти

А если скажем так делать:
сейчас у меня вывод с запросом выглядит так
Код: php
    $result =  mysql_query("SELECT title, catid FROM jos_content ORDER BY catid ASC");
 while($row = mysql_fetch_array($result))
{
if($row["catid"] == "34")
{
$ar1[] = "<option value='".$row['title']."'>".$row['title']."</option>";
};
...
...
echo '<OPTGROUP label="Nazvanie kategorii №34">Nazvanie kategorii №34</OPTGROUP>';
for ($i = 0; $i <= count($ar1); $i++)
                {echo $ar1[$i];};
...

если выбирать еще и айди материала и вставлять его, скажем в name="" в каждом <option >, а потом сравнивать его с айди, из адреса который возращает нам $_SERVER['HTTP_REFERER'], и если они равны ставить selected="selected"
« Последнее редактирование: 27.05.2009, 13:55:50 от boreus »
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
boreus аха, так можно попробовать сделать. ID из URI придётся вытаскивать через регулярное выражение...
*

boreus

  • Захожу иногда
  • 51
  • 7 / 0
Сделал. Работает!
Сейчас распишу...
*

boreus

  • Захожу иногда
  • 51
  • 7 / 0
Итак, вывод селектора со списком статей из определенных(нужных мне) категорий и  автовыбором опшна статьи, с которой перешли к форме:

Цитировать
   <?php
    $db =& JFactory::getDBO();
    //запрос к таблице jos_content, из нее выбираем айди материала, его заголовок и айди категории
    $result =  mysql_query("SELECT id, title, catid FROM jos_content ORDER BY catid ASC");
    //изначальный вид всех ссылок на материалы в моем случае: http://www.site.com/menu-alias1/menu-alias2/articleID(число)-article-alias.html
    //делаем массив из элементов адреса страницы, с которой перешли к форме, используя $_SERVER['HTTP_REFERER']
    //разделитель "/"

    $url_parts = explode('/', $_SERVER['HTTP_REFERER']);
    //берем из полученного массива последний элемент
    $last_segment = array_pop($url_parts);
    //полчается articleID(число)-article-alias.html, в этой строке выбираем цифры(спасибо моему комраду, синтаксис регулярных выражений меня пугает)
    preg_match ("/^(\d)*/", $last_segment, $matches);
    //записываем полученный результат в переменную для дальнейшего использования - это и есть айди статьи, с которой перешли к форме
    $sel_refer = $matches[0];
    ?>
    //формируем селектор
    <SELECT>
    <OPTION value="Выберите нужный">Выберите нужный</OPTION>
    //пока результат запроса возвращает значения делаем...
    <?php while($row = mysql_fetch_array($result))
{
    //если текущий айди, взятый из базы равен айди статьи-реферера, полученному нами выше,
    //присваиваем переменной атрибут "selected", то есть такой опшн будет выбран

                if($row["id"] == $sel_refer) {$sel_optn = "selected='selected'";};
    //тут я фильтрую статьи по категориям
      if($row["catid"] == "34")
      {
    //нужными наполняю массив
      $ar1[] = "<option value='".$row['title']."' ".$sel_optn.">".$row['title']."</option>";
                       };
    //тут еще несколько условий, для остальных категорий
...
...
    //не забываем сбросить переменную с аттрибутами для следующего прогона цикла, иначе "selected" у вас будет все, начиная с нужной статьи
                       unset($sel_optn);
};
    //в принципе все, дальше выводим массивы, набитые нужными значениями и оформляем
    <OPTGROUP label="Название категории №34">Название категории №34</OPTGROUP>
                      for ($i = 0; $i <= count($ar1); $i++)
                           {echo $ar1[$i];};
    //и т.д. для остальных категорий
...
...
?>
</SELECT>
Сорри за оформление, если с подсветкой синтаксиса делать, комменты на русском не отображаются.

Все, работает. Кому надо - пользуйтесь.

ЗЫ:Это решение только для частного случая, когда SEF ссылки имеют вид http://www.site.com/menu-alias1/menu-alias2/articleID(число)-article-alias.html
Для обычных ссылок это, конечно не подойдет.

ЗЫЫ:По-моему вариант не сильно красивый. Было бы намного элегантней передавать айди статьи POSTом. У кого есть соображения, напишите. Можно собрать тут несколько рецептов. Ведь вещь рано или поздно, но нужная всем.
« Последнее редактирование: 27.05.2009, 23:55:15 от boreus »
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
boreus я вот подумал, а ведь можно же получить ID используя $_GET массив =) Чё-то мы с тобой про него заыбли совсем. И тогда будет всё равно, какого вида ссылка.

Рад, что всё у тебя получилось ;)
*

boreus

  • Захожу иногда
  • 51
  • 7 / 0
а ведь точно! надо почитать про него поподробнее...
спасибо за участие.
*

boreus

  • Захожу иногда
  • 51
  • 7 / 0
Вот сделал способ получить айди статьи, с которой перешли к форме. он короче и подойдет к любого вида ссылкам(с SEF и без):
в коде кнопки "Заказать"(для вставки пхп можно взять например вот такой экстеншн )
Цитировать
//полчаем айди текущей статьи
$sel_refer = JRequest::getInt('id', 0);
//записываем его в переменную сессии(либо можно передать через POST)
$_SESSION[session.sel_refer] = $sel_refer;
Все.
в самой форме используем этот айди из сессии или POSTa в наших целях как хотим :)
*

ocuba

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
Я вижу решение вашей проблемы близко с решением моей задачи. http://joomlaforum.ru/index.php/topic,90383.0.html можете посоветовать, как это можно реализовать?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как в ChronoForms сделать изменение формы в зависимости от выбора?

Автор sashka17

Ответов: 0
Просмотров: 2781
Последний ответ 08.02.2021, 09:33:52
от sashka17
Отправляет письма при каждом обновлении страницы

Автор Igoritaly

Ответов: 4
Просмотров: 1652
Последний ответ 16.03.2017, 18:44:07
от Igoritaly
Как получить URL страницы с помощью PHP ?

Автор Xzizz

Ответов: 10
Просмотров: 2574
Последний ответ 15.08.2016, 14:33:29
от nicalf
Получить содержимое тегов со страницы формы, как ?

Автор Xzizz

Ответов: 0
Просмотров: 1415
Последний ответ 18.01.2016, 16:14:49
от Xzizz
Thanks message без перезагрузки страницы в ChronoForms 5

Автор Shad-777

Ответов: 4
Просмотров: 3571
Последний ответ 21.12.2015, 16:27:25
от Иоланта