Например, переиндексацию после собственного скрипта импорта.
Начиная с JBZoo v2.2.0 RC #2 rev2745 я добавил несколько условий в код, чтобы можно было c минимумом запускать наш код из консоли.
Когда это полезно?
- если хочется выполнять какую-то операцию периодично или не руками.
- если эта операция занимает какое-то продолжительное время (например 5 минут). Т.е через браузер это все упадет из-за недостатка времени, памяти.
- Изначально оригинальный компонент Zoo не был рассчитан на запуск из консоли. Возможно в старых версиях придется добавить хаки.
- Делаем выводы из первого пункта, поэтому запускаем код в консоли так, как будто-то это вход браузера (эмулируем)
- Это эмуляция браузера, Поэтому у нас нету куков и сессии. Значит мы не попадем в контроллеры панели управления (да и не сильно нужно).
- Скорее всего некоторые расширения Joomla написаны как попало, поэтому они могут выдать ошибки, даже фатальные. Сюда будут относится в основном плагины.
<?php // We are a valid entry point. define('_JEXEC', 1); define('JDEBUG', 0); // debug mode define('JPATH_BASE', __DIR__); // website root directory // include Joomla framework require_once JPATH_BASE . '/includes/defines.php'; require_once JPATH_LIBRARIES . '/import.legacy.php'; require_once JPATH_LIBRARIES . '/cms.php'; // hide NOT important errors (without NOTICE) error_reporting(E_ERROR | E_WARNING | E_PARSE); ini_set('display_errors', 1); // max time 1800 seconds = 30 min // max memory limit = 256 Mb @ini_set('memory_limit', '256M'); @ini_set('max_execution_time', 1800); if (function_exists('set_time_limit')) { @set_time_limit(1800); } /** * Class JBZooCli */ class JBZooCli extends JApplicationCli { /** * Entry point for CLI script */ public function doExecute() { // Joomla environment hacks $_SERVER['HTTP_HOST'] = 'console.example.com'; $_SERVER['REQUEST_METHOD'] = 'GET'; $_GET['tmpl'] = $_REQUEST['tmpl'] = 'raw'; // init Joomla App ( Front-end emulation ). JFactory::getApplication('site'); // init important vars AND compatibility with old Joomla and some old extensions !defined('JBZOO_APP_GROUP') && define('JBZOO_APP_GROUP', 'jbuniversal'); !defined('DIRECTORY_SEPERATOR') && define('DIRECTORY_SEPERATOR', '/'); !defined('DS') && define('DS', DIRECTORY_SEPARATOR); // include Zoo + JBZoo frameworks require_once JPATH_BASE . '/administrator/components/com_zoo/config.php'; require_once JPATH_BASE . '/media/zoo/applications/jbuniversal/framework/jbzoo.php'; // init JBZoo JBZoo::init(); // ----- START my script $this->_reindexAll(); $this->_myAction(); // ----- FINISH my script jexit('ok!'); } /** * Reindex all JBZoo database */ protected function _reindexAll() { // set step size $indexStep = 10; // init vars $offset = $totalLines = 0; $reIndex = -1; $indexModel = JBModelSearchindex::model(); while ($reIndex != 0) { $reIndex = $indexModel->reIndex($indexStep, $offset); $offset += $indexStep; $totalLines += $reIndex; } // show result $this->out('Total reIndexed lines = ' . $totalLines); } /** * Some another function */ protected function _myAction() { // my custom function } } // execute all ! JApplicationCli::getInstance('JBZooCli')->execute();На что стоит обратить внимание ?
- Приглядитесь, в начале скрипта устанавливаются HTTP_HOST, REQUEST_METHOD и tmpl. Это нужно чтобы Joomla думала что её запустил браузер (по факту apache/nginx)
- Установите подходящие memory_limit и max_execution_time.
- Приложение Joomla создается вида 'site' (а по идее должен быть 'cli'), но он не работает из-за тонны багов в Zoo (он не умеет из консоли)
- Мы специально скрываем все NOTICE ошибки, т.к предположительно их будет много в кривонаписанных расширениях
- Константа JPATH_BASE должна ссылаться на корень сайта. В моем примере скрипт консоли лежит в корне сайта. поэтому там __DIR__. Можно написать вручную но от корня файловой системы.
- НЕ НУЖНО СТАВИТЬ бесконечный лимит по времени. Если скрпит повиснет, то хостинг будет тормозить, а хостер будет не доволен.
- НЕ ИСПОЛЬЗУЙТЕ массив $_SERVER напрямую, лучше API Joomla и константы
- РЕКОМЕНДУЮ поставить в HTTP_HOST домен вашего сайта, чтобы избежать проблем с кешем Joomla и кривыми расширениями.
- У скрипта должно быть право на запуск (+x) - http://joomla-book.r...s-or-777-is-bad
Под windows делаем так
C:\Users\user>полный_путь_php.exe полный путь php файлаУ меня это выглядит так
C:\Users\smdenis>d:\web-server\modules\php\PHP-5.4\php.exe d:\web-server\domains\jbzoo\demo\public_html\jbzoo-console.php Total reIndexed lines = 43 ok! C:\Users\smdenis>Под линукс все точно так же, только вместо "пути_к_php.exe" пишем просто "php" или что-о вроде "/usr/bin/php"
php /home/site.com/jbzoo-console.phpЗадача для linux cron.
Кстати, гуглится очень просто, есть даже виджеты. Советую начать с вики - https://ru.wikipedia.org/wiki/Cron+ http://cron.nmonitor...-generator.html
Это пример на запуск раз в час.
0 * * * * php /home/site.com/jbzoo-console.php
Результат
Если что-то пошло не так, то мы увидим ошибки. Например вот как Joomla ругается если НЕ указать домен.
Если все нормально, то картина проще. Вывелась статистика индекса. У меня в каталоге очень мало материалов, так что всего 43 записи в базе для фильтра.
Проверял на
Joomla: 3.4.1
JBZoo: 2.2.0 Pro (RC #2 rev2745)
Zoo: 3.3.4
Если вам нужно запускать что-то написанное для Joomla но без Zoo, то посмотрите пример
/cli/deletefiles.php Вся суть та же...