Новости Joomla

Вышли релизы Joomla 6.1 и Joomla 5.4.5: новые возможности и стабильность

Релиз Joomla 6.1.0

Проект Joomla! объявил о доступности Joomla 6.1 [Nyota] — новой минорной версии шестой серии, а также о выпуске релиза исправлений ошибок Joomla 5.4.5. Релиз 6.1 приносит ряд долгожданных функций, повышающих удобство управления контентом и защиту от спама.

👩‍💻 Компонент "CS Афиши" для Joomla.

👩‍💻 Компонент "CS Афиши" для Joomla.

Расширение "CS Афиши" позволяет выводить список мероприятий, фильтровать их по датам, поиск по заголовкам и описанию.

В состав пакета расширений входят:
- Компонент "CS Афиши"
- Модуль "Календарь событий"
- Модуль "Предстоящие события"
- Библиотека "ImgResize"

Расширение "CS Афиши" позволяет выводить список мероприятий, фильтровать их по датам, поиск по заголовкам и описанию.

Модуль "Календарь событий" отображает предстоящие и прошедшие мероприятие на календаре, с отображением мероприятий на конкретную дату во всплывающем окне.

Модуль "Предстоящие события" показывает список предстоящий событий по порядку их наступления.

P.S. Расширение платное, но плата символическая, чисто для отработки приема платежей. Ключи без ограничения по времени, купившие сейчас - смогут обновляться без ограничений.

Разработчик - участник нашего сообщества Дмитрий Денисов (@codersite).

Страница расширения
Демо

Яндекс выпустил инструмент Видимость сайта в Алисе AI.

Яндекс выпустил инструмент Видимость сайта в Алисе AI.

С тех пор, как в поисковиках появились нейроответы ИИ, трафик на сайты стал гораздо меньше, так как пользователь стал получать информацию непосредственно на странице поисковика без перехода на сайт. Но при генерации ответа ИИ указывает источники - ссылки на сайты, информация которых была использована для генерации ответа.

Долгое время у всех был немой вопрос: "Как же теперь оценивать эффективность сайта?". Теперь этот на этот вопрос отчасти отвечает новый инструмент аналитики.
Процитируем справку Яндекса по инструменту:
На запросы пользователей в Поиске может отвечать Алиса AI. Ответы появляются в поисковой выдаче, в объектных ответах и на отдельной вкладке Поиска. В них чаще всего упоминаются страницы сайтов, на которые Алиса AI опиралась при подготовке ответа.

С помощью инструмента Видимость сайта в Алисе AI в Яндекс Вебмастере вы можете:
- узнать долю упоминаний сайта среди источников в ответах Алисы AI в Поиске и отследить динамику изменений;
- посмотреть примеры запросов, по которым страницы сайта показываются в ответах Алисы AI;
- посмотреть примеры сайтов той же тематики, которые часто упоминаются в генеративной выдаче.
Данные отображаются за последние 3 месяца и обновляются каждую неделю.

Статистика собирается только по тем запросам, по которым ваш сайт уже находится достаточно высоко в поисковой выдаче. Это позволяет анализировать видимость именно в той нише, где вы заинтересованы в продвижении, и избегать «размытия» по малозначимым для вас запросам.

Кроме того, такой подход обусловлен работой Алисы AI: она строит ответ с опорой на самые релевантные, информативные и качественные страницы, которые обычно занимают высокие позиции в Поиске.

Чтобы увидеть статистику вашего сайта в меню Яндекс.Вебмастера перейдите в раздел "Эффективность" и далее в "Показы сайта в Алисе AI".

В начале февраля 2026г. был вебинар с Михаилом Сливинским - амбассадором Поиска Яндекса, и в рамках вебинара была озвучена просьба сделать такой инструмент. Скорее всего разработка на тот момент уже велась, потому что от просьбы до релиза прошло около 2-х месяцев. В любом случае хорошо, что такая статистика появилась.

Показы сайта в Алисе AI в вашем Яндекс,Вебмастере.

@joomlafeed

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

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

  • Глобальный модератор
  • 7288
  • 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

  • Глобальный модератор
  • 7288
  • 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

  • Глобальный модератор
  • 7288
  • 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

  • Глобальный модератор
  • 7288
  • 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

  • Глобальный модератор
  • 7288
  • 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

  • Глобальный модератор
  • 7288
  • 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

  • Глобальный модератор
  • 4505
  • 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

  • Глобальный модератор
  • 4505
  • 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

  • Глобальный модератор
  • 7288
  • 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
Просмотров: 794
Последний ответ 21.12.2022, 10:40:11
от R31rus
Как и чем можно обращаться с запросами из Joomla к GraphQL?

Автор bmf1982

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

Автор kav

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

Автор kik84

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

Автор ftp27

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