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

konstantinopol

  • Захожу иногда
  • 66
  • 2 / 0
 
 Я взял модуль mostRead и решил переписать его таким образом чтобы он высвечивал 10 топ по оценке пользователей(оценка производится с помощью плагина StarVote)

 mostRead собирает 10 самых читаемых из phpMyAdmin и пишел это всё в array который потом высвечивается, я же хочу вписать в array то что мне нужно и высветить сеё!

 У меня всё есть, единственная проблема я немогу вытащить нужную мне информацию из phpMyAdmin. Запрос работает без проблем и выдаёт те 10 которые нужно передать но как эту инфу записать в array


Код
           $query = 'SELECT a.title' .
                        ' FROM #__redim_starvote AS a' .
                        ' INNER JOIN #__content AS f ON a.id = f.id' .
                        ' ORDER BY (a.total_value/a.total_votes) DESC'.
                        ' LIMIT 10';

            $db->setQuery($query);
            $rows=$db->loadObjectList();


             $i;
             $lists        = array();

             foreach($rows as $row){
                 $lists[$i]->link = htmlspecialchars($row->title)
                 $i++;
             }



                return $lists;

Зарание благодарен! ^-^
*

SDKiller

  • Живу я здесь
  • 2705
  • 329 / 5
  • ...ergo sum
А у Вас структура массива $lists какая?

Если одномерный - то просто $lists[$i], а если многомерный ассоциативный, то $lists[$i]['link']
*

Lex

  • Завсегдатай
  • 1615
  • 274 / 1
Если уверен что $rows не пустая то как-то так
foreach($rows as $row){
                 $lists[] = htmlspecialchars($row->title,ENT_QUOTES,'utf-8');              
             }
или так
foreach($rows as $key => $row){
                 $lists[$key] = htmlspecialchars($row->title,ENT_QUOTES,'utf-8');              
             }
Жизнь заставила учиться.
В личке на вопросы не отвечаю.
*

konstantinopol

  • Захожу иногда
  • 66
  • 2 / 0

Идиотизм заключается в том что когда я ввожу данный запрос только в phpMyAdmin всё красиво выводится, а когда пускаю это всё через
$db->setQuery($query);
$rows=$db->loadObjectList();


и пытаюсь вписать это всё а array ничего не получается. Return получает пустой array...
Сделал вывод результата на экран, точно пустой...  :(

Фигня какае то...
*

konstantinopol

  • Захожу иногда
  • 66
  • 2 / 0
А у Вас структура массива $lists какая?

Если одномерный - то просто $lists[$i], а если многомерный ассоциативный, то $lists[$i]['link']

Обычный одномерны array со структурой lists[$i]
*

SDKiller

  • Живу я здесь
  • 2705
  • 329 / 5
  • ...ergo sum
А у Вас title в какой таблице

Просто судя по запросу Вы его выбираете из #__redim_starvote

Цитировать
'SELECT a.title' .
                        ' FROM #__redim_starvote AS a'

Но тогда вообще не видно смысла в объединении запроса с
Цитировать
#__content AS f
*

konstantinopol

  • Захожу иногда
  • 66
  • 2 / 0
А у Вас title в какой таблице

Просто судя по запросу Вы его выбираете из #__redim_starvote

Но тогда вообще не видно смысла в объединении запроса с


Пардон там действительно должно стоять f.title, но разницы никакой нет. В каждой таблице имеется title и в любом случае выводятся значения.
*

SDKiller

  • Живу я здесь
  • 2705
  • 329 / 5
  • ...ergo sum
Обычный одномерны array

->link уберите.

Цитировать
В каждой таблице имеется title и в любом случае выводятся значения

Тогда смысл грузить сервер объединённым запросом, если всё можно получить из одной таблицы?
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
konstantinopol проверьте, список вообще инициализируется? Сделайте дамп переменной $rows
Код
var_dump($rows);
Ну и проверьте, есть ли требуемые значения. Если все ок, то дальше будет искать, что не так. Но кажется, все правильно делаете, только $i у Вас почему-то неиницализирована. Сделайте её $i = 0;
*

konstantinopol

  • Захожу иногда
  • 66
  • 2 / 0
->link уберите.

Тогда смысл грузить сервер объединённым запросом, если всё можно получить из одной таблицы?

Вот вывод:
Код
Array
(
    [0] =>
    [1] =>
    [2] =>
    [3] =>
    [4] =>
    [5] =>
    [6] =>
    [7] =>
    [8] =>
    [9] =>
)

Потому что title в этих таблица разные, поэтому и приходится запрос обьединять.
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: достать топ лист из phpMyAdmin(loadObjectList())
« Ответ #10 : 28.12.2010, 15:48:33 »
Вот вывод:
Код
Array
(
    [0] =>
    [1] =>
    [2] =>
    [3] =>
    [4] =>
    [5] =>
    [6] =>
    [7] =>
    [8] =>
    [9] =>
)
Это точно вывод $rows? Просто в $rows должны быть объекты, но их нет. Значит косяк в запросе.
*

konstantinopol

  • Захожу иногда
  • 66
  • 2 / 0
Re: достать топ лист из phpMyAdmin(loadObjectList())
« Ответ #11 : 28.12.2010, 15:52:06 »
Это точно вывод $rows? Просто в $rows должны быть объекты, но их нет. Значит косяк в запросе.

При var_dump($rows); выводится NULL.
В заросе косяка быть неможет потому что сам его проверял на phpMyAdmin
Возможно косяк в передаче листа на $rows...
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: достать топ лист из phpMyAdmin(loadObjectList())
« Ответ #12 : 28.12.2010, 15:55:41 »
Но все же стоит проверить запрос, так как $rows у Вас NULL.
После $rows = $db->loadObjectList(); добавьте
 
Код
		
if ($db->getErrorNum()) {
JError::raiseError(500, $db->stderr());
}
*

Diiimonn

  • Захожу иногда
  • 234
  • 29 / 0
Re: достать топ лист из phpMyAdmin(loadObjectList())
« Ответ #13 : 28.12.2010, 16:01:39 »
весь листинг функции приведите
Создание расширений для Joomla
Skype: diiimonn
ICQ: 351181332
*

konstantinopol

  • Захожу иногда
  • 66
  • 2 / 0
Re: достать топ лист из phpMyAdmin(loadObjectList())
« Ответ #14 : 28.12.2010, 20:44:38 »
Но все же стоит проверить запрос, так как $rows у Вас NULL.
После $rows = $db->loadObjectList(); добавьте
 
Код
		
if ($db->getErrorNum()) {
JError::raiseError(500, $db->stderr());
}

Действительно выдёт ошибку...
Код
500 - DB function failed with error number 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 0, 10' at line 1 SQL=SELECT a.id, f.title FROM lie_redim_starvote AS a INNER JOIN lie_content AS f ON a.id = f.id ORDER BY (a.total_value/a.total_votes) DESC LIMIT 10 LIMIT 0, 10

никак не думал что проблема заключается в DB...
Щас буду рыться и думать как устранить эту проблему.
Буду рад подсказкам! ))
*

konstantinopol

  • Захожу иногда
  • 66
  • 2 / 0
Re: достать топ лист из phpMyAdmin(loadObjectList())
« Ответ #15 : 28.12.2010, 20:45:34 »
весь листинг функции приведите

Если я правильно понял что требуется... то вот...
Код
<?php

// no direct access
defined('_JEXEC') or die('Restricted access');

require_once (JPATH_SITE.DS.'components'.DS.'com_content'.DS.'helpers'.DS.'route.php');

class modMostReadBySectionOrCategoryHelper
{
function getList(&$params)
{
global $mainframe;

$db =& JFactory::getDBO();
$user =& JFactory::getUser();

$menus = &JSite::getMenu();
$currentMenu = $menus->getActive();
$menuOption=$currentMenu->query['option'];

if($menuOption=='com_content'){
$menuView=$currentMenu->query['view'];
if($menuView=='section'){
$secid=$currentMenu->query['id'];
$secCondition = ' AND a.sectionid='.$secid;
}elseif($menuView=='category'){
$catid=$currentMenu->query['id'];
$catCondition = ' AND a.catid='.$catid;
}
}elseif($menuOption=='com_sectionex'){
$menuView=$currentMenu->query['view'];
if($menuView=='category'){
$secid=$currentMenu->query['id'];
$secCondition = ' AND a.sectionid='.$secid;
}
}

$count = intval($params->get('count', 10));
$show_front = $params->get('show_front', 1);
$aid = $user->get('aid', 0);

$contentConfig = &JComponentHelper::getParams( 'com_content' );
$access = !$contentConfig->get('show_noauth');

$nullDate = $db->getNullDate();
jimport('joomla.utilities.date');
$date = new JDate();
$now = $date->toMySQL();

if ($catid) {
$ids = explode( ',', $catid );
JArrayHelper::toInteger( $ids );
$catCondition = ' AND (cc.id=' . implode( ' OR cc.id=', $ids ). ')';
}
if ($secid) {
$ids = explode( ',', $secid );
JArrayHelper::toInteger( $ids );
$secCondition = ' AND (s.id=' . implode( ' OR s.id=', $ids ). ')';
}

//Content Items only
$query = 'SELECT f.title' .
' FROM #__redim_starvote AS a' .
' INNER JOIN #__content AS f ON a.id = f.id' .
' ORDER BY (a.total_value/a.total_votes) DESC'.
' LIMIT 10';

$db->setQuery($query, 0, $count);
$rows=$db->loadObjectList();



var_dump($rows);
$i=0;
$lists = array();
for ($i=0; $i < 10; $i++) {


$lists[$i] = htmlspecialchars($rows[$i]->f.title);
}

return $lists;
}
}
« Последнее редактирование: 28.12.2010, 20:52:18 от konstantinopol »
*

konstantinopol

  • Захожу иногда
  • 66
  • 2 / 0
Re: достать топ лист из phpMyAdmin(loadObjectList())
« Ответ #16 : 28.12.2010, 21:12:25 »
всем спасибо, проблема была в LIMIT 10
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Убила базу в phpMyadmin... ее можно вернуть?

Автор uspeh29

Ответов: 1
Просмотров: 1231
Последний ответ 31.10.2010, 14:50:24
от Lex