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

kreker92

  • Захожу иногда
  • 390
  • 18 / 0
Всем здрасьте  ^-^

Создаю свой первый плагин на Joomla 2.5 и уже, вроде, даже написал, но как только установил понял, что он почему-то не отрабатывает.
Пришел к выводу, что проблема в названии класса.
Т.е. для проверки я изменил плагин remember, а точнее remember.php
Код
defined('_JEXEC') or die;

class plgSystemRemember extends JPlugin
{
function onAfterRender()
{
?>
<script type="text/javascript">
alert('hi2');
console.log('hi');
</script>

<?php

}
}

Он отлично отрабатывает, но когда я устанавливаю и включаю свой плагин, который отличается только названием класса (plgHelloworld), ничего не отрабатывает. Если поставить в мой плагин класс как в плагине remember, а в самом remember поменять, то мой начинает отрабатывать.
Поэтому вывод, что нужно куда-то занести свой класс, чтобы он обрабатывался, только не пойму куда.

Т.к. не нашел ничего по этому поводу ни на форуме, ни в документации, ни где либо еще спрашиваю вас.

Или может кто даст ссылочку на документацию где описан данный момент.

Заранее огромное спасибо!
« Последнее редактирование: 27.11.2013, 12:24:39 от b2z »
Все вопросы и предложения на почту.
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Свой System-плагин для Joomla 2.5
« Ответ #1 : 15.11.2013, 12:00:41 »
имя класса должно быть plgГруппа_плагинаИмя_Плагина!
тоесть если у вас системный плагин Helloworld, то имя класса должно быть plgSystemHelloworld если контент плагин то plgContentHelloworld
У меня в подписи есть ссылки на сервис для создания каркаса плагина! Также можете найти у меня в блоге статью по созданию плагинов!
« Последнее редактирование: 15.11.2013, 13:06:17 от Istaan »
*

kreker92

  • Захожу иногда
  • 390
  • 18 / 0
Re: Свой System-плагин для Joomla 2.5
« Ответ #3 : 16.11.2013, 04:59:06 »
Спасибо! =)
Дело пошло.
Вот только никак не могу решить проблему с подключением jQuery.
Т.е. он подключен в хелпере VirtueMart, но он почему-то подключается только после отработки плагина.
Испробовал все встроенные системные методы JPlugin, а именно onAfterInitialise, onAfterRoute, onAfterDispatch, onAfterRender, onBeforeRender, onBeforeCompileHead.
Остановился на onAfterRoute, кажется он последним выполняется.
(Где-то находил страницу с последовательностью выполнения этих методов, но что-то потерял =) )

Выполняю такой код:
Код
<?php
defined('_JEXEC') or die;

class plgSystemVmRandomItem extends JPlugin
{
public function onAfterRender()
{
$app = JFactory::getApplication();
if($app->getName() == 'site') { //check that it's not administration panel
$document = & JFactory::getDocument();
$show_time = 1;
$data_arr = array('show_time'=>$show_time);
$js_obj = json_encode($data_arr);
?>

<script type="text/javascript">
$.ajax({
url:"vmrandomitem.php",
type:"POST",
success:function(result) {
console.log(result);
}
});
</script>

<?php
}
}
}
?>

Итог выполнения плагина -- ошибка в консоли: Uncaught ReferenceError: $ is not defined (index):8 (anonymous function)

Предполагаю, что проблема может решиться подключением jquery в плагине методом $document->addScript(), но двойное подключение jquery на сайте не очень хорошо.
Помогите пожалуйста решить данную проблему, т.к. ничего дельного не нахожу.
Все вопросы и предложения на почту.
*

mohax

  • Давно я тут
  • 901
  • 66 / 3
Re: Свой System-плагин для Joomla 2.5
« Ответ #4 : 16.11.2013, 10:14:04 »
Так подключать скрипт Неправильно. Для этого в Joomla есть спец. средства Тогда Ваш скрипт подключится в блоке head сайта.
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
*

kreker92

  • Захожу иногда
  • 390
  • 18 / 0
Re: Свой System-плагин для Joomla 2.5
« Ответ #6 : 17.11.2013, 20:52:41 »
Вместо $ используйте jQuery.
С jQuery тоже самое.

Так подключать скрипт Неправильно. Для этого в Joomla есть спец. средства Тогда Ваш скрипт подключится в блоке head сайта.
Поправил код по документации, но скрипт вообще не отрабатывает. Даже ошибок никаких не пишет ни PHP, ни консоль.
Код: php
<?php
defined('_JEXEC') or die;

class plgSystemVmRandomItem extends JPlugin
{
public function onAfterRender()
{
$app = JFactory::getApplication();
if($app->getName() == 'site') { //check that it's not administration panel
$document =& JFactory::getDocument();
$show_time = 1;
$data_arr = array('show_time'=>$show_time);
$js_obj = json_encode($data_arr);

$content = 'alert( \'Hello Joomla!\' )';
echo $content;
$document->addScriptDeclaration( $content );
}
}
}
?>
Все вопросы и предложения на почту.
*

beagler

  • Живу я здесь
  • 3276
  • 392 / 4
  • https://alorisman.ru/
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Свой System-плагин для Joomla 2.5
« Ответ #8 : 17.11.2013, 23:17:58 »
А вы не прочитали название тригера? onAfterRender выполняется уже после того как страница отрисовалась (скажем так сгенерится)...

function onBeforeRender(){
   if ( JFactory::getApplication()->isSite() ) {
      $doc = JFactory::getDocument();
      $scriptBody = 'alert("Hello Joomla")';
      $doc->addScriptDeclaration( $scriptBody );
   }
}

« Последнее редактирование: 17.11.2013, 23:21:16 от Istaan »
*

kreker92

  • Захожу иногда
  • 390
  • 18 / 0
Re: Свой System-плагин для Joomla 2.5
« Ответ #9 : 22.11.2013, 00:31:45 »
Надеюсь я вам пока не надоел))
У меня следующая проблема и, опять же, с синтаксисом встроенных методов Joomla.

В этот раз проблема с SQL-запросом.
Составил запрос, возвращает как раз то, что надо
Код: sql
SELECT a.file_url_thumb, c.product_name, c.virtuemart_product_id
FROM `tw__virtuemart_medias` AS a
RIGHT JOIN `tw__virtuemart_product_medias` AS b ON a.virtuemart_media_id = b.virtuemart_media_id
RIGHT JOIN `tw__virtuemart_products_ru_ru` AS c ON b.virtuemart_product_id = c.virtuemart_product_id
RIGHT JOIN `tw__virtuemart_products` AS d ON d.published = 1
ORDER BY RAND()
LIMIT 1;

При переделке какое-то время выдавал ошибку, а потом стал выдавать
stdClass Object ( [published] => 1 [id] => 2 [title] => Login [module] => mod_login [position] => login [content] => [showtitle] => 1 [params] => [menuid] => 0 )

И пытается дальше обработать присланные данные.
Код: php
<?php

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

class plgSystemVmRandomItem extends JPlugin
{
//can use methods methods onAfterDispatch(), onAfterRender(), onBeforeRender(), onBeforeCompileHead()
public function onBeforeRender()
{
$app = JFactory::getApplication();
if($app) { //check that it's not administration panel
$doc = JFactory::getDocument();
$doc->addStyleSheet(JURI::base(). "plugins/system/vmrandomitem/vmrandomitem.css");
$doc->addScript(JURI::base(). "plugins/system/vmrandomitem/vmrandomitem.js");
$db = JFactory::getDBO();  //connect to


$query = $db->getQuery(true)
->select(array('a.file_url_thumb', 'c.product_name', 'c.virtuemart_product_id'))
->from('`tw__virtuemart_medias` AS a')
->join('RIGHT', '`tw__virtuemart_product_medias` AS b ON a.virtuemart_media_id = b.virtuemart_media_id')
->join('RIGHT', '`tw__virtuemart_products_ru_ru` AS c ON b.virtuemart_product_id = c.virtuemart_product_id')
->join('RIGHT', '`tw__virtuemart_products` AS d ON d.published = 1')
->order('RAND()')
->setLimit(1);

if ($db->getErrorNum()) {
echo $db->getErrorMsg();
exit;
}

$row = $db->loadObject(); //loading results like StdClass
print_r($row);
}
}
}

?>

В чем моя ошибка?
« Последнее редактирование: 22.11.2013, 00:35:15 от kreker92 »
Все вопросы и предложения на почту.
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Свой System-плагин для Joomla 2.5
« Ответ #10 : 22.11.2013, 01:30:29 »
if($app) { //check that it's not administration panel - бред ;)
if ($app->isSite()) // правильная проверка на админку

А вообще, судя по содержанию плагина, Вам модуль делать надо. Где Вы хотите выводить данные?
*

kreker92

  • Захожу иногда
  • 390
  • 18 / 0
Re: Свой System-плагин для Joomla 2.5
« Ответ #11 : 22.11.2013, 07:43:36 »
if($app) { //check that it's not administration panel - бред ;)

Я знаю, что это бред, не обращайте внимания)
Просто на сайте почему-то ошибок не выводится и я временно убрал условие проверки.
Меня смущает именно неверная отработка SQL-запроса.

А вообще, судя по содержанию плагина, Вам модуль делать надо. Где Вы хотите выводить данные?
Данные я хочу выводить во всплывающем окне.
Решил, что плагина мне хватит, т.к. добавляю все необходимое через javascript.
« Последнее редактирование: 22.11.2013, 07:48:00 от kreker92 »
Все вопросы и предложения на почту.
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
*

kreker92

  • Захожу иногда
  • 390
  • 18 / 0
Re: Свой System-плагин для Joomla 2.5
« Ответ #13 : 22.11.2013, 19:29:56 »
Сделайте echo $query - запрос парвильный?

Ничего не выводится...
Как такое может быть?

Код: php
$query = $db->getQuery(true)
->select(array('a.file_url_thumb', 'c.product_name', 'c.virtuemart_product_id'))
->from('`#__virtuemart_medias` AS a')
->join('RIGHT', '`#__virtuemart_product_medias` AS b ON a.virtuemart_media_id = b.virtuemart_media_id')
->join('RIGHT', '`#__virtuemart_products_ru_ru` AS c ON b.virtuemart_product_id = c.virtuemart_product_id')
->join('RIGHT', '`#__virtuemart_products` AS d ON d.published = 1')
->order('RAND()')
->setLimit(1);

echo '$query: '. $query .'<br />';
« Последнее редактирование: 22.11.2013, 20:50:11 от kreker92 »
Все вопросы и предложения на почту.
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Свой System-плагин для Joomla 2.5
« Ответ #14 : 22.11.2013, 19:39:41 »
Мхм. По идее должен отобразиться чистый запрос, но почему его нет - непонятно.
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Свой System-плагин для Joomla 2.5
« Ответ #15 : 22.11.2013, 19:45:03 »
а вообще после запроса вставьте die('123'); появится ли белый экран?
*

kreker92

  • Захожу иногда
  • 390
  • 18 / 0
Re: Свой System-плагин для Joomla 2.5
« Ответ #16 : 23.11.2013, 00:24:00 »
а вообще после запроса вставьте die('123'); появится ли белый экран?

Да, вывод 123.

Код: php
<?php

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

class plgSystemVmRandomItem extends JPlugin
{
//can use methods methods onAfterDispatch(), onAfterRender(), onBeforeRender(), onBeforeCompileHead()
public function onBeforeRender()
{
$app = JFactory::getApplication();

$doc = JFactory::getDocument();
$doc->addStyleSheet(JURI::base(). "plugins/system/vmrandomitem/vmrandomitem.css");
$doc->addScript(JURI::base(). "plugins/system/vmrandomitem/vmrandomitem.js");
$db = JFactory::getDBO();   //connect to
$live_site = trim(JURI::base()).'/';
$params = $this->params;

$query = $db->getQuery(true)
->select(array('a.file_url_thumb', 'c.product_name', 'c.virtuemart_product_id'))
->from('`#__virtuemart_medias` AS a')
->join('RIGHT', '`#__virtuemart_product_medias` AS b ON a.virtuemart_media_id = b.virtuemart_media_id')
->join('RIGHT', '`#__virtuemart_products_ru_ru` AS c ON b.virtuemart_product_id = c.virtuemart_product_id')
->join('RIGHT', '`#__virtuemart_products` AS d ON d.published = 1')
->order('RAND()')
->setLimit(1);

echo '$query: '. $query .'<br />';


die('123');



}
}

?>
Все вопросы и предложения на почту.
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Свой System-плагин для Joomla 2.5
« Ответ #17 : 23.11.2013, 02:01:22 »
странно у меня ваш запрос выводится!
*

kreker92

  • Захожу иногда
  • 390
  • 18 / 0
Re: Свой System-плагин для Joomla 2.5
« Ответ #18 : 26.11.2013, 14:52:36 »
Ура! Заработал!
Ошибку я не очень понял, но решением было исправить на такой вид:
Код: php
$query = $db->getQuery(true);
$query->select(array('a.file_url_thumb', 'c.product_name', 'c.virtuemart_product_id'));
$query->from('`#__virtuemart_medias` AS a');
$query->join('RIGHT', '`#__virtuemart_product_medias` AS b ON a.virtuemart_media_id = b.virtuemart_media_id');
$query->join('RIGHT', '`#__virtuemart_products_ru_ru` AS c ON b.virtuemart_product_id = c.virtuemart_product_id');
$query->join('RIGHT', '`#__virtuemart_products` AS d ON d.published = 1');
$query->order('RAND()');
$query->setLimit(1);

echo '$query: '. $query .'<br />';

$db->setQuery($query);
$queryResult = $db->loadResult();
print_r($queryResult);

Но появилась новая проблема. Выводит только file_url_thumb.
Вывод:
Код: sql
SELECT a.file_url_thumb,c.product_name,c.virtuemart_product_id FROM `#__virtuemart_medias` AS a RIGHT JOIN `#__virtuemart_product_medias` AS b ON a.virtuemart_media_id = b.virtuemart_media_id RIGHT JOIN `#__virtuemart_products_ru_ru` AS c ON b.virtuemart_product_id = c.virtuemart_product_id RIGHT JOIN `#__virtuemart_products` AS d ON d.published = 1 ORDER BY RAND()
images/stories/virtuemart/product/resized/dsc039528_220x.jpg

Т.е. выводит только первое запрошенное поле. Почему так получается?
В чем прокол?
Все вопросы и предложения на почту.
*

kreker92

  • Захожу иногда
  • 390
  • 18 / 0
Re: Свой System-плагин для Joomla 2.5
« Ответ #19 : 26.11.2013, 14:59:03 »
Решил проблему.
Надо loadResult заменить на loadObject
Простите за тупой вопрос  crazy!
Все вопросы и предложения на почту.
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
*

kreker92

  • Захожу иногда
  • 390
  • 18 / 0
Re: Свой System-плагин для Joomla 2.5
« Ответ #21 : 26.11.2013, 16:20:44 »
Old code:
Код: php
				$query = $db->getQuery(true)
->select(array('a.file_url_thumb', 'c.product_name', 'c.virtuemart_product_id'))
->from('`tw__virtuemart_medias` AS a')
->join('RIGHT', '`tw__virtuemart_product_medias` AS b ON a.virtuemart_media_id = b.virtuemart_media_id')
->join('RIGHT', '`tw__virtuemart_products_ru_ru` AS c ON b.virtuemart_product_id = c.virtuemart_product_id')
->join('RIGHT', '`tw__virtuemart_products` AS d ON d.published = 1')
->order('RAND()')
->setLimit(1);

New code:
Код: php
$query = $db->getQuery(true);
$query->select(array('a.file_url_thumb', 'c.product_name', 'c.virtuemart_product_id'));
$query->from('`#__virtuemart_medias` AS a');
$query->join('RIGHT', '`#__virtuemart_product_medias` AS b ON a.virtuemart_media_id = b.virtuemart_media_id');
$query->join('RIGHT', '`#__virtuemart_products_ru_ru` AS c ON b.virtuemart_product_id = c.virtuemart_product_id');
$query->join('RIGHT', '`#__virtuemart_products` AS d ON d.published = 1');
$query->order('RAND()');
$query->setLimit(1);

У меня новая проблема...
Скрипт выполняется до загрузки HTML, и я не могу ничего вставить на страницу.
То бишь console.log(jQuery(".body-top").length); возвращает 0, а должен был 1.
Все вопросы и предложения на почту.
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Свой System-плагин для Joomla 2.5
« Ответ #22 : 26.11.2013, 16:34:49 »
Ну да, плагин же привязан к событию onBeforeRender, HTML еще нет...
*

kreker92

  • Захожу иногда
  • 390
  • 18 / 0
Re: Свой System-плагин для Joomla 2.5
« Ответ #23 : 26.11.2013, 16:47:21 »
А как решить проблему?
Все вопросы и предложения на почту.
*

ELLE

  • Глобальный модератор
  • 4506
  • 893 / 0
Re: Свой System-плагин для Joomla 2.5
« Ответ #24 : 26.11.2013, 16:50:19 »
onAfterRender выполняется уже после того как страница отрисовалась (скажем так сгенерится)...
*

kreker92

  • Захожу иногда
  • 390
  • 18 / 0
Re: Свой System-плагин для Joomla 2.5
« Ответ #25 : 26.11.2013, 17:01:36 »
Если использовать onAfterRender, тогда не подключается jQuery.
А с onBeforeRender не подгружается HTML.

Получается замкнутый круг.
« Последнее редактирование: 26.11.2013, 17:05:19 от kreker92 »
Все вопросы и предложения на почту.
*

ELLE

  • Глобальный модератор
  • 4506
  • 893 / 0
Re: Свой System-плагин для Joomla 2.5
« Ответ #26 : 26.11.2013, 17:10:27 »
onBeforeCompileHead тогда
http://docs.joomla.org/Plugin/Events

вы наверное не поняли, я вам предлагаю не заменить событие, а добавить для подключение скриптов другое
« Последнее редактирование: 26.11.2013, 17:17:36 от ELLE »
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Re: Свой System-плагин для Joomla 2.5
« Ответ #27 : 26.11.2013, 17:27:08 »
вы наверное не поняли, я вам предлагаю не заменить событие, а добавить для подключение скриптов другое
+
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Re: Свой System-плагин для Joomla 2.5
« Ответ #28 : 26.11.2013, 17:42:11 »
А вы обернули ваши скрипты в
jQuery(document).ready(function($){
 alert($(".body-top").length);
});
*

kreker92

  • Захожу иногда
  • 390
  • 18 / 0
Re: Свой System-плагин для Joomla 2.5
« Ответ #29 : 27.11.2013, 10:28:41 »
Про
вы наверное не поняли, я вам предлагаю не заменить событие, а добавить для подключение скриптов другое
Сначала идет php, потом забираются переменные и выполняется javascript.
А javascript выполняется в onBeforeRender. В onAfterRender библиотека jQuery не подключается.
А по логике сначала выполняется onBeforeRender.

А вы обернули ваши скрипты в
jQuery(document).ready(function($){
 alert($(".body-top").length);
});
Спасибо! Забыл...
Как раз этого и не хватало.
Всё, доделал я плагин)
Правда не особо он хорош, т.к. просто для зачета его делал.

Всем спасибо за помощь!

Если кому интересно, что я там понаписал:
Код: xml
<?xml version="1.0" encoding="utf-8"?>
<extension version="2.5" type="plugin" group="system">
<name>VM - Random item</name>
<author>Viktor Zaytsev</author>
<creationDate>November 6th, 2013</creationDate>
<copyright>zaycev-web.ru</copyright>
<license>GNU General Public License</license>
<authorEmail>zvv1992@gmail.com</authorEmail>
<authorUrl>http://www.zaycev-web.ru</authorUrl>
<version>1.0</version>
<description>Plugin for viewing random item for each visitor's session.</description>
<files>
<filename plugin="vmrandomitem">vmrandomitem.php</filename>
<filename>index.html</filename>
<filename>vmrandomitem.css</filename>
<filename>vmrandomitem.js</filename>
</files>
<config>
<fields name="params">
<fieldset name="basic">
<field name="plugin-developer" type="spacer" description="Plugin developer's site" label="plugin developer's site &lt;a href='http://zaycev-web.ru'&gt;zycev-web.ru&lt;/a&gt;" />
<field name="text-options" type="spacer" default="With default values" label="&lt;b&gt;With default values&lt;/b&gt;" description="With default values" />
<field name="page-nums"  type="text" default="1" label="Page nums" description="На каких по счету страницах сделать вывод случайного товара. Пример: 1,2,3;" />
<field name="rand-num-start"  type="text" default="1" label="Start random number" description="Начало промежутка выбора случайной страницы для показа товара." />
<field name="rand-num-end"  type="text" default="1" label="End random number" description="Конец промежутка выбора случайной страницы для показа товара." />
<field name="start-to-show"  type="text" default="0" label="Starting time to show. Sec" description="После какого времени нахождения на странице показать случайный товар." />
<field name="show-time"  type="text" default="10" label="Show time. Sec" description="Как долго показывать товар." />
<field name="animation-speed"  type="text" default="" label="Animation speed. Sec" description="Скорость анимации скрытия и показа всплывающего окна со случайным товаром." />
</fieldset>
</fields>
</config>
</extension>

Код: php
<?php

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

class plgSystemVmRandomItem extends JPlugin
{
//can use methods methods onAfterDispatch(), onAfterRender(), onBeforeRender(), onBeforeCompileHead()
public function onBeforeRender()
{
$app = JFactory::getApplication();
if($app->isSite()) { //check that it's not administration panel
$doc = JFactory::getDocument();
$doc->addStyleSheet(JURI::base(). "plugins/system/vmrandomitem/vmrandomitem.css");
$doc->addScript(JURI::base(). "plugins/system/vmrandomitem/vmrandomitem.js");
$db = JFactory::getDBO();   //connect to
$params = $this->params;

function set_page_num($params) {
if($params->get('page-nums')) {
$page_nums = $params->get('page-nums');
if(substr_count($page_nums, 'each')) {
return 'each';
} else {
return str_to_arr($params->get('page-nums'));
}
} else {
return 1;
}
}

function set_rand_num_start($params) {
if($params->get('rand-num-start'))
return str_to_int($params->get('rand-num-start'));
}

function set_rand_num_end($params) {
if($params->get('rand-num-end'))
return str_to_int($params->get('rand-num-end'));
}

function set_start_to_show($params) {
if($params->get('start-to-show'))
return str_to_int($params->get('start-to-show'))*1000;
else
return 0;
}

function set_show_time($params) {
if($params->get('show-time'))
return str_to_int($params->get('show-time'))*1000;
else
return 10;
}

function set_animation_speed($params) {
if($params->get('animation-speed'))
return str_to_int($params->get('animation-speed'))*1000;
else
return 1;
}

function str_to_arr($str) {
return array_map('intval', explode(",", $str));
}
function str_to_int($str) {
return intval($str);
}

//--------------------------------------- test data ------------------------
$page_num = set_page_num($params);
$rand_num_start = set_rand_num_start($params);
$rand_num_end = set_rand_num_end($params);
$start_to_show = set_start_to_show($params);
$show_time = set_show_time($params);
$animation_speed = set_animation_speed($params);

//--------------------------------------- test data end ------------------------


function show_random_item($doc, $db, $page_num, $rand_num_start, $rand_num_end, $start_to_show, $show_time, $animation_speed) {
//making request data(id, name, img)
//SELECT FROM tables WHERE product_id is RAND()
/*$query->setQuery('SELECT a.file_url_thumb, c.product_name, c.virtuemart_product_id
FROM `tw__virtuemart_medias` AS a
RIGHT JOIN `tw__virtuemart_product_medias` AS b ON a.virtuemart_media_id = b.virtuemart_media_id
RIGHT JOIN `tw__virtuemart_products_ru_ru` AS c ON b.virtuemart_product_id = c.virtuemart_product_id
RIGHT JOIN `tw__virtuemart_products` AS d ON d.published = 1
ORDER BY RAND()
LIMIT 1;');*/

$live_site = trim(JURI::base());

$query = $db->getQuery(true);
$query->select(array('a.file_url_thumb', 'c.product_name', 'c.virtuemart_product_id'));
$query->from('`#__virtuemart_medias` AS a');
$query->join('RIGHT', '`#__virtuemart_product_medias` AS b ON a.virtuemart_media_id = b.virtuemart_media_id');
$query->join('RIGHT', '`#__virtuemart_products_ru_ru` AS c ON b.virtuemart_product_id = c.virtuemart_product_id');
$query->join('RIGHT', '`#__virtuemart_products` AS d ON d.published = 1');
$query->order('RAND()');
$query->setLimit(1);

//echo '$query: '. $query .'<br />';

$db->setQuery($query);

if ($db->getErrorNum()) {
echo $db->getErrorMsg();
exit;
} else {

$row = $db->loadObject(); //loading results like StdClass. foreach for using data

//take city and name
$cities = array('Москва', 'Санкт-Петербург', 'Апрелевка');
$names = array('Августа', 'Аврора');

$city = $cities[rand(0, count($cities)-1)];
$name = $names[rand(0, count($names)-1)];
//take datas (id, img, name, url)
$res_id = $row->virtuemart_product_id;
$res_image = '<img class="browseProductImage" src="'.$live_site.''.$row->file_url_thumb.'" alt="'.$row->product_name.'" />';
$res_name=$row->product_name;
$res_url = substr($live_site, 0, strlen($live_site)-1 ).JRoute::_('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id='.$res_id.'&virtuemart_category_id=23');
$skelet =  '<div id="justBuy"><div class="nameJustBuy">Только что '.$name.' из г. '.$city.' купила:</div><div class="spacer column2"><div class="col-1"><div class="browseProductImageContainer"><a href="'.$res_url.'">'.$res_image.'</a></div></div><div class="col-2"><div class="title-indent"><h4><a href="'.$res_url.'">'.$res_name.'</a></h4></div></div><div class="clear"></div></div><div class="hideJustBuy"><a href="#">Скрыть</a></div></div>';


$js = 'jQuery(document).ready(function() {';
$js .= 'function showJustBuy(time, speedTime) {
jQuery(".hideJustBuy a").click(function() {
hideJustBuy();
return false;
});

setTimeout(function() {
jQuery("#justBuy").animate({
"right": "+=250px"
}, speedTime);
}, time);
}
function hideJustBuy(time) {
jQuery("#justBuy").animate({
"right": "-=250px"
}, time);
}
function waitingSomeSeconds(time, speedTime) {
setTimeout(function() {
hideJustBuy(speedTime);
}, time);
}

if(jQuery("#justBuy").length == 0) {
jQuery(\''.$skelet.'\').insertAfter(".body-top");
showJustBuy('.$start_to_show.', '.$animation_speed.');
waitingSomeSeconds('.$show_time.', '.$animation_speed.');
} else {
showJustBuy('.$start_to_show.', '.$animation_speed.');
waitingSomeSeconds('.$show_time.', '.$animation_speed.');
}';
$js .= '})';
$doc->addScriptDeclaration($js);
}
}

if($page_num == 'each') {
show_random_item($doc, $db, $page_num, $rand_num_start, $rand_num_end, $start_to_show, $show_time, $animation_speed);
} else if (isset($_SESSION['counter']) && isset($_SESSION['show_num'])) {
$_SESSION['counter']++;
if($_SESSION['counter'] == $_SESSION['show_num']) {
show_random_item($doc, $db, $page_num, $rand_num_start, $rand_num_end, $start_to_show, $show_time, $animation_speed);
}
} else {
$_SESSION['counter']=0;
if($params->get('rand-num-start') && $params->get('rand-num-end')) array_push($page_num, rand($rand_num_start, $rand_num_end));
if($params->get('page-nums') && $page_num != 'each') $_SESSION['show_num'] = $page_num;
}

}
}
}

?>
Все вопросы и предложения на почту.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Доработать плагин импорта полей CFI от joomline

Автор R31rus

Ответов: 1
Просмотров: 527
Последний ответ 21.12.2022, 10:40:11
от R31rus
Как и чем можно обращаться с запросами из Joomla к GraphQL?

Автор bmf1982

Ответов: 0
Просмотров: 904
Последний ответ 03.10.2019, 15:46:00
от bmf1982
Joomla как система авторизации

Автор kav

Ответов: 23
Просмотров: 2731
Последний ответ 29.04.2018, 11:10:30
от Aleks.Denezh
Нужна помощь в доработке модуля под Joomla 3

Автор kik84

Ответов: 5
Просмотров: 2688
Последний ответ 30.01.2018, 22:40:30
от Елeна
Плагин Smart Search для своего компонента

Автор ftp27

Ответов: 1
Просмотров: 2005
Последний ответ 07.01.2017, 19:44:04
от newvideo