Вопрос по МодХ, внедрение richsnippets

RB
На сайте с 16.11.2011
Offline
38
1082

Добрый вечер. Уже который вечер мудохаюсь с звездочками Гугла в голосовалке.

Установил МодХ Эво 1.0.5 + отключено кеширование на странице. (чисто из-за статьи...работал с Рево немного)

CSS Star Rating ... и считалка среднего рейтинга

http://community.modx-cms.ru/tag/CSS%20Star%20Rating/

Код допиленного снипетта звездочек:

<?php

/**
* Created on 30-May-2006
*
* Snippet: CSS Star Rating
* Author: Garry Nutting
* For: MODx 0.9.2.1 and above
*
* Modified:
* 06/26/2006 - Added output template support - kylej
* 06/29/2006 - Added language variables
*
* Placeholder Values
* ------------------
*
* [+starRating+] - output of the <ul> list for the star rating
* [+totalVotes+] - output the total number of votes
*
*/

//-- start session
session_start();

//-- snippet parameters
$tvName = (isset ($tvName)) ? $tvName : 'star_rating'; // TV name where data will be stored
$tvName2 = (isset ($tvName2)) ? $tvName2 : 'rating_number';
$useSession = (isset ($useSession)) ? true : false; // Whether to only one vote per session
$docID = (isset ($docID)) ? $docID : $modx->documentObject['id']; //see if document is set
$pid = (isset ($_GET['pid'])) ? $_GET['pid'] : ''; //see if pid has been passed back
$viewOnly = (isset ($viewOnly)) ? true : false; //disable voting
$cssFile = (isset ($cssFile)) ? $cssFile : 1; //see if alternate css should be used
$imgWidth = (isset ($imgWidth)) ? $imgWidth : 25; //get the image width, used when displaying current rating
$onevote = (isset ($onevote)) ? $onevote : false; //use cookie restrictions to only allow one vote
$ovtime = (isset ($ovtime)) ? $ovtime : 608400; //expire in one week

//-- language variables
$_lang['no_display'] = 'Невозможно отобразить рейтинг';
$_lang['current_1'] = 'Сейчас';
$_lang['current_2'] = '/5 звезд';
$_lang['one_star'] = '1 звезда из 5';
$_lang['two_stars'] = '2 звезды из 5';
$_lang['three_stars'] = '3 звезды из 5';
$_lang['four_stars'] = '4 звезды из 5';
$_lang['five_stars'] = '5 звезд из 5';
$_lang['no_vote'] = 'Голосовать можно один раз';

$cssFiles = array (
'1' => 'assets/snippets/star_rating/star.css'
);

$starTpl = isset ($starTpl) ? $modx->getChunk($starTpl) : '[+starRating+]<span class="totalvotes">Голосов: [+totalVotes+]</span>';

if (array_key_exists($cssFile, $cssFiles)) {
$cssFile = $cssFiles[$cssFile];
}

//-- check if visitor is logged in
session_start();

//-- cookie check - if $onevote, check if visitor is allowed to vote
if (!$viewOnly && $onevote == true) {
if (isset ($_COOKIE['cssStarRating' . $docID])) {
$viewOnly = true;
}
elseif (isset ($_GET['starvote'])) {
//-- set cookie
setcookie('cssStarRating' . $docID, 'novote', time() + $ovtime);
}
}

if (!function_exists('setTemplateVar')) {
function setTemplateVar($value, $docID, $tplVarName) {
global $modx;

//-- get tmplvar id
$tplName = $modx->getFullTableName('site_tmplvars');
$tplRS = $modx->db->select('id', $tplName, 'name="' . $tplVarName . '"');
$tplRow = $modx->db->getRow($tplRS);

$tblName = $modx->getFullTableName('site_tmplvar_contentvalues');

$selectQuery = $modx->db->select('*', $tblName, 'contentid=' . $docID . ' AND tmplvarid=' . $tplRow['id']);

$updFields = array (
'value' => $value
);
$insFields = array (
'tmplvarid' => $tplRow['id'],
'contentid' => $docID,
'value' => $value
);

if ($modx->db->getRecordCount($selectQuery) < 1) {
$modx->db->insert($insFields, $tblName);
} else {
$modx->db->update($updFields, $tblName, 'contentid=' . $docID . ' AND tmplvarid=' . $tplRow['id']);
}
}
}

//-- get TV value
$tvValue = $modx->getTemplateVar($tvName, '*', $docID);

//-- check session variable to see if already voted
$novote = ($useSession == true && isset ($_SESSION['starRating']['voted' . $docID])) ? true : false;

//-- exit if no TV found
if (!$tvValue)
return $_lang['no_display'];

//-- split out TV values and calculate current Rating
$splitVals = explode(':', $tvValue['value']);

//-- check to ensure that a vote can be cast
if ($pid <> '' && isset ($_GET['starvote']) && $novote == false && is_numeric($_GET['starvote']) && $_GET['starvote'] >= 0 && $_GET['starvote'] <= 5) {

//-- get TV value
$tvValue = $modx->getTemplateVar($tvName, '*', $pid);

//-- split out TV values and calculate current Rating
$splitVals = explode(':', $tvValue['value']);

$newCount = $splitVals[0] + $_GET['starvote'];
$newVoteNumber = $splitVals[1] + 1;

@ setTemplateVar("$newCount:$newVoteNumber", $pid, $tvName);
@ setTemplateVar(round($newCount/$newVoteNumber, 2), $pid, $tvName2);
//-- as this code is run for each instance of the Star Rating,
//-- the $_GET variable is unset so the update is only run once
//-- useful for when star rating multiple times on same page ;)
unset ($_GET);

if ($useSession == true) {
$_SESSION['starRating']['voted' . $pid] = true;
}

//-- refresh page to show correct ratings
$curURL = $modx->makeUrl($modx->documentObject['id']);
$modx->sendRedirect($curURL);
}

if ($splitVals[1] > 0) {
$currentStarValue = $splitVals[0] / $splitVals[1];
$totalVotes = $splitVals[1];
} else {
$currentStarValue = 0;
$totalVotes = '0';
}

$starPhArray = array ();

$output = '';
$width = $currentStarValue * $imgWidth;
$width = intval($width);

if (!$viewOnly) {
$starPhArray['starRating'] = "<ul class='star-rating'>
<li class='current-rating' style='width:" . $width . "px;'>" . $_lang['current_1'] . $currentStarValue . $_lang['current_2'] . "</li>
<li><a href='[~[*id*]~]?starvote=1&pid=[*id*]' title='" . $_lang['one_star'] . "' class='one-star'>1</a></li>
<li><a href='[~[*id*]~]?starvote=2&pid=[*id*]' title='" . $_lang['two_stars'] . "' class='two-stars'>2</a></li>
<li><a href='[~[*id*]~]?starvote=3&pid=[*id*]' title='" . $_lang['three_stars'] . "' class='three-stars'>3</a></li>
<li><a href='[~[*id*]~]?starvote=4&pid=[*id*]' title='" . $_lang['four_stars'] . "' class='four-stars'>4</a></li>
<li><a href='[~[*id*]~]?starvote=5&pid=[*id*]' title='" . $_lang['five_stars'] . "' class='five-stars'>5</a></li>
</ul>";
} else {
$starPhArray['starRating'] = "<ul class='star-rating'>
<li class='current-rating' style='width:" . $width . "px;'>" . $_lang['current_1'] . $currentStarValue . $_lang['current_2'] . "</li>
<li class='one-star'>1</li>
<li class='two-stars'>2</li>
<li class='three-stars'>3</li>
<li class='four-stars'>4</li>
<li class='five-stars'>5</li>
</ul>";
}

$starPhArray['totalVotes'] = $totalVotes;

foreach ($starPhArray as $n => $v) {
$starTpl = str_replace('[+' . $n . '+]', $v, $starTpl);
}

if ($novote) {
$output .= '<div class="star-rating-warning">' . $_lang['no_vote'] . '</div>';
} else {
$output .= $starTpl;
}

return $output;
?>


вызов в чанке —
<h3>Рейтинг: [*rating_number*]</h3><br />
[[star_rating? &onevote=1]]


страница некешированая, пока с оптимизацией запросов не игрался ((
ЧПУ включены.
[*rating_number*] — показывает средний рейтинг (как на modx.ru)

Т.е средний рейтинг должен выводиться через [*rating_number*]... но у меня не работает, но вроде как все должно работать =(((

http://forum.vbios.com/fbbuploads/2012/11/1353949703-gr_null.jpg

у них же работает (смотреть внизу):

turboseo.com.ua

или сюдой смотреть

http://www.google.com/webmasters/tools/richsnippets?url=turboseo.com.ua+&html=

2) Второй был вариант:

заместь [*rating_number*] выводить через [r_number]

+ сниппет

<?php

$txt = $modx->getTemplateVar('rating_number');
return $txt[value];
?>

тоже не работает...я уже пробовал и [!r_number!] ...[[r_number]]...[+r_number+]

ничего не помогает =((( Может нае... и нет никакой считалки среднего рейтинга ?

Просто я в пхп ооочень слаб.

ЗЫ Спрашивал также разрабов Макссайт цмс, тоже помощи 0.

forum.max-3000.com/viewtopic.php?f=14&t=5135

ЗЫЫ Из того, с чем еще работал -ДЛЕ, Елеанор...если есть готовые решения, буду рад совету.

Зарание спасибо.

IL
На сайте с 20.04.2007
Offline
435
#1
[[star_rating? &onevote=1]]

Параметры в `апострофы` обрамлять?.. Проверить правильность всех сниппетов.

Что в значение rating_number падает (в PMA можно посмотреть, заменить на тестовое значение и проверить вывод на сайте)..

Ещё раз пройтись по шагам..

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
RB
На сайте с 16.11.2011
Offline
38
#2

Спасибо за ответ. Но можно подробнее обьяснить как чайнику =)

Скрипт сниппета не мой... вызов снипетта работает без проблем...т.е. вкючается и работает система рейтинга записи.

К ней прикрутили считалку среднего рейтинга (r_number, rating_number)...вот их вывести в текст не получается.

В инструкции(первый вставленный код) написано что выводить через [*rating_number*] ...ноу меня не работает =( Может я чет путаю с синтаксисом Рево\Эво. (Стоит Эво 1.0.5)

IL
На сайте с 20.04.2007
Offline
435
#3

TV для нужных шаблонов задан?

Что в базе лежит??

RB
На сайте с 16.11.2011
Offline
38
#4

В базе...если я правильно понял, то ничего =) просто поставил для опытов на Денвер.

Шаблон Foundation

Добавил сниппет, чанк, ТВ параметр в шаблоне с названием этого Снипппета.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий