Например, переиндексацию после собственного скрипта импорта.
Начиная с 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 Вся суть та же...











