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

era

  • Администратор
  • 1588
  • 392 / 5
  • В туалете лучше быть пользователем, чем админом.
Re: Документация по компонентам
« Ответ #180 : 26.05.2006, 07:44:48 »
Что-то вроде:
SELECT
  ID,
  NOW() - POLE_V_TABLICE as RAZNICA,
  chto-to eshe
FROM
  TABLE
WHERE
  katoe-to uzstovie
ORDER BY
  POLE_V_TABLICE


И получица что разница будет записана в поле RAZNICA

Re: Документация по компонентам
« Ответ #181 : 26.05.2006, 08:19:25 »
Что-то вроде:
SELECT
  ID,
  NOW() - POLE_V_TABLICE as RAZNICA,
  chto-to eshe
FROM
  TABLE
WHERE
  katoe-to uzstovie
ORDER BY
  POLE_V_TABLICE


И получица что разница будет записана в поле RAZNICA

Угу, хороший пример! Спасибо пригодится. Только вот Это без PERIOD_DIFF. И дата в секундах ее потом править все равно на рхр придется)) Можно конечно и в самом запросе как-нибудь указать..вывод дней..месяцев. Только вот у меня в Джумле не проходит такой запрос: SELECT DATE_FORMAT, я уже сталкивался с такой проблемой, о ней писал где-то выше. А так пример мне понравился...сам бы еще не скоро доехал..))

Re: Документация по компонентам
« Ответ #182 : 26.05.2006, 08:47:03 »
Да так и есть, и память вам не изменяет, именно в днях я и хотел. Вот тогда зачем Вы мне предложили PERIOD_DIFF? Ну не в этом суть я же говорил что сравнить нужно более 300 строк в которых не одна и таже дата, а все разные и получается что текущую дату нужно сравнить с тремя сотнями разных дат. Вот покажите мне пример запроса в базу (SELECT PERIOD_DIFF), без помощи рнр чтобы запрос вернул 300 значений - разностей дат.
Вам нужен с PERIOD_DIFF или DATEDIFF? Вы определились?
а так запрсо пройтейший:

SELECT *, DATEDIFF(NOW(),datefield) AS different
FROM sometable
WHERE 1

Вернет хоть 3000 результирующих записей ;)

Re: Документация по компонентам
« Ответ #183 : 26.05.2006, 09:15:25 »
Вам нужен с PERIOD_DIFF или DATEDIFF? Вы определились?
а так запрсо пройтейший:

SELECT *, DATEDIFF(NOW(),datefield) AS different
FROM sometable
WHERE 1

Вернет хоть 3000 результирующих записей ;)

А тут и определятся нечего. Я ж написал..вот так и есть. Я возьму этот запрос на заметку, спасибо. Просто DATEDIFF не понимает мой мускуть..очевидно его добавили в поздних версиях. На сайте так и написано:
Цитировать
Added new ADDTIME(), DATE(), DATEDIFF(), LAST_DAY(), MAKEDATE(), MAKETIME(), MICROSECOND(), SUBTIME(), TIME(), TIMEDIFF(), TIMESTAMP(), UTC_DATE(), UTC_TIME(), UTC_TIMESTAMP(), and WEEKOFYEAR() functions.

Просто..теперь буду знать, что и таким запросом можно вывести разницу))

А запрос вида SELECT PERIOD_DIFF( NOW(  ) ,  dropdate)  AS different
FROM table выводит действительно все поля..., просто нужно было записывать как другое поле. Разобрался..))) Еще раз 10Х))

Re: Документация по компонентам
« Ответ #184 : 02.06.2006, 16:00:10 »
Понадобилось в компонент добавить немного статистики. Вопрос таков:
Как можно взять ссылку сайта с которого ко мне пришли, и "носить" ее по страницам, до тех пор пока пользователь не выполнит определенные действия? Эта ссылка будет добавлятся в базу данных, только если этот пришедший пользователь размещает какое либо оъявление. Если я использую getenv [$HTTP_REFERER], то ссылка записывается с той страницы, с которой отправил пользователь объявление. Если использую $_SERVER['HTTP_REFERER'], то поле в базе вообще пустое...даже вроде как не передает ссылку с другого сайта (выводил эхом - на главной странице пусто). Или быть может..вообще что-то не так делаю? Подозреваю, что нужно каким то образом создавать сессию юзера..и в ней все носить..Вроде как уже создаются сессии пользователей и хранятся в БД...но вот каким образом это можно увязать с моим компонентом?

Re: Документация по компонентам
« Ответ #185 : 02.06.2006, 18:34:44 »
Может есть какие идеи? С чего хотяб начать-то? А то я деже и не знаю в какую сторону глядеть..

Re: Документация по компонентам
« Ответ #186 : 04.06.2006, 02:13:24 »
Помоему все просто при пером посещении пользователя брать у него $_SERVER['HTTP_REFERER'] и записовать в сессию (setUserState) после чего в нужный момент просто брать данные о реферере из сессии (getUserState).
Тоесть сам процесс забора реферера выглядит так:
Код
if (!eregi($_SERVER['HTTP_HOST'], $_SERVER['HTTP_REFERER']))
   $mainframe->setUserState('referer',$_SERVER['HTTP_REFERER']);
*

Pirx

  • Осваиваюсь на форуме
  • 18
  • 2 / 1
  • Too smart to be stupid
Re: Документация по компонентам
« Ответ #187 : 30.06.2006, 21:14:31 »
Хочу задать уточняющий вопрос - где в компоненте искать имя/id залогиненного юзера, в каком объекте оно находится и как получить к нему доступ?

Спасибо.
*

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
Re: Документация по компонентам
« Ответ #188 : 30.06.2006, 21:45:32 »
$my->id
$my->username
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
*

Pirx

  • Осваиваюсь на форуме
  • 18
  • 2 / 1
  • Too smart to be stupid
Re: Документация по компонентам
« Ответ #189 : 30.06.2006, 21:58:47 »
$my->id
$my->username

Спасибо, хоть пока ждал ответа - сам разобрался :)

На будущее (если у себя бумажку потеряю) есть объект $my
В файле /includes/joomla.php есть такая функция:
Код
function getUser() {
global $database;

$user = new mosUser( $this->_db );

$user->id = intval( $this->_session->userid );
$user->username = $this->_session->username;
$user->usertype = $this->_session->usertype;
$user->gid = intval( $this->_session->gid );

if ($user->id) {
$query = "SELECT params"
. "\n FROM #__users"
. "\n WHERE id = ". intval( $user->id )
;
$database->setQuery( $query );
$params = $database->loadResult();
} else {
$params = '';
}
$user->params = $params;

return $user;
}

В ней определяются все свойства объекта $my, например:
$my->id - ID пользователя
$my->gid - ID группы
$my->usertype - Тип доступа (Registered, Manager, Administrator, SuperAdministrator)
$my->username - Имя пользователя

Для себя добавил следующие фишки, чтобы получить имя пользователя (не логин, а имя) и е-мейл:
Код
		//VXG - added retrieval of name of the user
if ($user->id) {
$query = "SELECT name"
. "\n FROM #__users"
. "\n WHERE id = ". intval( $user->id )
;
$database->setQuery( $query );
$usr_name = $database->loadResult();
} else {
$usr_name = 'Not specified';
}
$user->name = $usr_name;

// VXG - added retrieval of e-mail from DB
if ($user->id) {
$query = "SELECT email"
. "\n FROM #__users"
. "\n WHERE id = ". intval( $user->id )
;
$database->setQuery( $query );
$email = $database->loadResult();
} else {
$email = '';
}
$user->email = $email;

Код вставлять перед строчкой return $user;

Re: Документация по компонентам
« Ответ #190 : 07.07.2006, 07:15:06 »
В моем компоненте есть возможность с данными загружать изображение. Изображение загружается как в AkoGallery. Хочу сделать чтобы пользователь мог загружать 2 или 3 фотки с данными. Подскажите как это можно сделать базируясь на AkoGallery.
И подскажите как можно сделать загрузку фоток как на мейле, то есть там пользователь сначала цепляет фотки а потом отправляет данные (письмо)? Вот как бы сделать чтобы пользователь тоже сначала прицеплял фотки, а потом вводил данные какие ему нужно и отправлял..? У меня есть идея, которая может и не будет работать, добавить 3 поля для выбора фоток, для каждой фотки сделать функцию которая будет уменьшать изображение и тд. Но тогда получается что пользователь вводит данные потом выбирает одну за другой фотки и все это отправляет на сервер. Так я думаю он замучается ждать пока функции обработают фотки, вообщем долго будут уходить данные на сервер. А вот думется если сделать как на мейле, то после загрузки первой фотки, юзер сам будет решать цеплять ему еще фотки или ограничится одной.
Подскажите как и с чего начать? Может кто уже что-нибудь подобное делал?

Re: Документация по компонентам
« Ответ #191 : 20.07.2006, 08:18:13 »
Ребят, подскажите мне вот что: Как устроен механизм сессии, а именно как стартуется сессия, как в нее записать что-либо, как в нужный момент забрать из нее, и все что известно о механизме сессий в Джумле? Хочу разобраться с сессиями, а то боюсь изобрести велосипед)) Заранее спасибо!

Re: Документация по компонентам
« Ответ #192 : 20.07.2006, 14:04:59 »
Никто не знает как работает механизм сессий? Хочу сделать что-то вроде корзины инет-магаза, но не знаю как в Джумле устроен механизм сессий, Выручайте, кто что знает...поделитесь))
*

PyKaB

  • Захожу иногда
  • 88
  • 19 / 13
Re: Документация по компонентам
« Ответ #193 : 20.07.2006, 14:46:32 »
не знаю, но рискну предположить, что все просто, т.к. класс mosSession простой.
class mosSession extends mosDBTable {
        /*** @param database A database connector object */
        function mosSession( &$db )

        /*** @param string Key search for @param mixed Default value if not set @return mixed  */
        function get( $key, $default=null )

        /*** @param string Key to set @param mixed Value to set @return mixed The new value  */
        function set( $key, $value )

        /*** Sets a key from a REQUEST variable, otherwise uses the default @param string The variable key @param string The REQUEST variable name @param mixed The default value @return mixed  */
        function setFromRequest( $key, $varName, $default=null )

        /*** Insert a new row @return boolean  */
        function insert()

        /*** Update an existing row @return boolean    */
        function update( $updateNulls=false ) {

        /*** Generate a unique session id @return string  */
        function generateId()

        /*** @return string The name of the session cookie   */
        function getCookie()

        /*** Purge lapsed sessions @return boolean   */
        function purge( $inc=1800, $and='' )

Re: Документация по компонентам
« Ответ #194 : 20.07.2006, 14:49:08 »
если взглянуть на код класса mosSession можно прейти к выводу что чтобы манипулировать данными сессий в джумле лече станадартынми средствами. Большенство методов mosSession  являются просто обвертками стандартынх пхп функций. За подробностями обратитесь к joomla.php ;)

Re: Документация по компонентам
« Ответ #195 : 20.07.2006, 14:54:09 »
Оке..спасибо!!)) С енглишь у меня туговато..., но как бы не совсем...поэтому думаю, что разберусь..)) В случае чего переспрошу!)
*

PyKaB

  • Захожу иногда
  • 88
  • 19 / 13
Re: Документация по компонентам
« Ответ #196 : 20.07.2006, 15:03:14 »
если взглянуть на код класса mosSession можно прейти к выводу что чтобы манипулировать данными сессий в джумле лече станадартынми средствами. Большенство методов mosSession  являются просто обвертками стандартынх пхп функций. За подробностями обратитесь к joomla.php ;)
ну да - там большинство функций по строчке-две

Re: Документация по компонентам
« Ответ #197 : 23.07.2006, 19:33:33 »
PHPIns!de #16, Декабрь'2005

Тема с обложки
  • Ошибки при использовании Ajax
  • Sajax - реализация Ajax в PHP
  • Ajax и PHP без использования XmlHttpRequest
Идеи
  • Ошибки начинающих TDD-практиков
  • Основы использования PHP для работы с FTP
  • Сборка PHP 5 с драйверами mysql и mysqli одновременно
+Бонус
  • Учебник по созданию компонент Joomla!



Качаем тут: http://phpclub.ru/detail/magazine/2005/12/

Re: Документация по компонентам
« Ответ #198 : 24.07.2006, 01:09:20 »
Если не лень выложите ктонибудь именно эту статейку в любом виде. Буду безмерно благодарен (;
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Re: Документация по компонентам
« Ответ #199 : 24.07.2006, 01:22:47 »
Если не лень выложите ктонибудь именно эту статейку в любом виде. Буду безмерно благодарен (;
если не ошибаюсь, там перевод руководства Joseph L. LeBlanc "The Daily Message Joomla Component Tutorial". и мне кажется, что лучше читать оригинал, чем переводы... Более полезен этого руководства может быть раздел документации на оф. сайте Joomla: http://help.joomla.org/content/section/12/125/ Потому что в нем, уже рассматривается использование шаблонов patTemplate и прочих новшеств, появившихся уже после выхода руководства LeBlanc'а, которое писалось во времена Mambo 4.5.1-4.5.2
« Последнее редактирование: 24.07.2006, 01:26:30 от smart »

Re: Документация по компонентам
« Ответ #200 : 24.07.2006, 02:56:05 »
А ну если это то тотуриал по Daily Mess то я его читал... вышенаписанная просьба больше недействительна.
*

PyKaB

  • Захожу иногда
  • 88
  • 19 / 13
Re: Документация по компонентам
« Ответ #201 : 24.07.2006, 12:05:16 »
А ну если это то тотуриал по Daily Mess то я его читал... вышенаписанная просьба больше недействительна.
именно он

Re: Документация по компонентам
« Ответ #202 : 25.07.2006, 16:03:03 »
Подскажите как заставить работать такую конструкцию, те работать в цикле:

require_once($mosConfig_absolute_path "/administrator/components/com_mycomp/class.mycomp.php");
$a=4;
for (
$s=1$s<=$a$s++) {       
       
$row = new qwery_two ($database);
       if (!
$row->bind($_POST"fig vam!")) {
          echo 
"<script> alert('" $row->getError() . "'); window.history.go(-1); </script>\n";
          exit();
       }
        
$row->ideal=$s;
        
$row->mydate;
        
$row->dropdate;
}

В базу добавляется только последнее значение $s, а нужно чтобы записи добавлялись по порядку от 1 до 4, возможно такое? Или это не так делается? Скрипт приведен примерный, но суть та же)

Re: Документация по компонентам
« Ответ #203 : 25.07.2006, 17:05:53 »
Код
$row->store() 
Невижу... он наверное после цикла у вас стоит...
Вероятно надо слелать так:
Код
require_once($mosConfig_absolute_path . "/administrator/components/com_mycomp/class.mycomp.php");
$a=4;
for ($s=1; $s<=$a; $s++) {       
       $row = new qwery_two ($database);
       if (!$row->bind($_POST, "fig vam!")) {
          echo "<script> alert('" . $row->getError() . "'); window.history.go(-1); </script>\n";
          exit();
       }
        $row->ideal=$s;
        $row->mydate;
        $row->dropdate;
if (!$row->store()) {
mosErrorAlert( $row->getError() );
exit();
}
}
« Последнее редактирование: 25.07.2006, 17:13:32 от smart »

Re: Документация по компонентам
« Ответ #204 : 25.07.2006, 17:17:20 »
Код
$row->store() 
Невижу... он наверное после цикла у вас стоит...
Вероятно надо слелать так:
Хмм..а вот почему-то я без него обходился..Хорошо спасибо, попробую. О результатах дам знать.))

Re: Документация по компонентам
« Ответ #205 : 26.07.2006, 06:32:33 »
pav, спасибо!! Работает! +  ;)
*

oppo

  • Захожу иногда
  • 365
  • 82 / 8
  • ΨΨΨ я - УКРАЇНЕЦЬ
Re: Документация по компонентам
« Ответ #206 : 02.08.2006, 02:33:27 »
значит по выборке значений из базы. у объекта $database есть следующие методы:

$database->query();

$database->loadObject(объект);
$database->loadObjectList();
$database->loadResult();

$database->loadResultArray();

еще есть полезный метод  $database->query_batch(); который позволяет выполнять сразу несколько запросов, разделенных точкой с запятой.

Очень полезная инф. сохранил себе ..
Еще:
$database->getNumRows(); возвращает количество рядов (только для SELECT )

А $database->query_batch(); что то не встречал в примерах ..
*

oppo

  • Захожу иногда
  • 365
  • 82 / 8
  • ΨΨΨ я - УКРАЇНЕЦЬ
Re: Документация по компонентам
« Ответ #207 : 05.08.2006, 22:58:02 »
 
Код
   
$query = "SELECT  `name`,`pass` FROM #__op  WHERE id='".$id."' AND  catid='".$catid."'
........
$acses = $database->loadResultArray();
print_r(array_values ($acses))."<BR>";
Решил попробывать loadResultArray(); - странно печатает из базы только одно значение
тоесть работает как $database->loadResult(); так что должно ?
получается чтоб взять несчастные 2 значения и не гонять foreach нужно использовать
$database->loadObject ($acses)  ;
$name=$acses->name;
« Последнее редактирование: 05.08.2006, 23:22:59 от oppo »

Re: Документация по компонентам
« Ответ #208 : 06.08.2006, 00:38:48 »
А может запрос действительно только одну запись возвращает вы не проверяли?
*

userxp

  • Живу я здесь
  • 2019
  • 403 / 6
  • Злой и ужасный бармалей
Re: Документация по компонентам
« Ответ #209 : 06.08.2006, 12:17:59 »
Если запрос SELECT field1, field2, field3 ...
то $arr = $database->loadResultArray() вернёт массив

строка 1
$arr[0][0] - field1
$arr[0][1] - field2
$arr[0][2] - field3
...
строка 2
$arr[1][0] - field1
$arr[1][1] - field2
$arr[1][2] - field3
...
и т.д.
Как правильно задавать вопрос службе технической поддержки  yes!
SGA CM 7.2.0 RC0 KANG Build GWK74 + s95allinonescript + CWM 5.0.2.6 + Modem XWKT3
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Документация по созданию user profile плагина для Joomla 1.6

Автор n_drey

Ответов: 13
Просмотров: 2802
Последний ответ 05.10.2011, 21:03:46
от n_drey