Сначала идет php, потом забираются переменные и выполняется javascript.
А javascript выполняется в onBeforeRender. В onAfterRender библиотека jQuery не подключается.
А по логике сначала выполняется onBeforeRender.
Спасибо! Забыл...
Как раз этого и не хватало.
Правда не особо он хорош, т.к. просто для зачета его делал.
<?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;
}
}
}
}
?>