Голосование за страницы — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
Строка 65: Строка 65:
 
        
 
        
 
$referer_url = getServer('HTTP_REFERER');
 
$referer_url = getServer('HTTP_REFERER');
                         $def_module::redirect($referer_url);
+
                         def_module::redirect($referer_url);
 
 
 
}
 
}

Версия 22:16, 30 января 2011

В системном файле модуля "Опросы": classes/modules/vote/__rate.php, присутсвуют методы для подключения голосования за страницы, при использовании технологии ajax и xslt-шаблонов. Используются методы:

  • json_rate
  • getElementRating

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

В файл classes/modules/vote/__сcustom.php, добавим два метода, rate_do будет отвечать за сохранение данных, gettRating - за вывод результатов голосования:

    public function rate_do($template = "default") {
                        $ini = cmsController::getInstance()->getModule('vote');
			if(!$template) $template = "default";

			$block_arr = array();
			$element_id = (int) getRequest('param0');
			$element = umiHierarchy::getInstance()->getElement($element_id);
			
			if(regedit::getInstance()->getVal("//modules/vote/is_graded")) {
				$bid = (int) getRequest('param1');
				
				if($bid > 5) $bid = 5;
				if($bid < 0) $bid = 0;
			} else {
				$bid = ((bool) getRequest('param1')) ? 1 : -1;
			}

			xslTemplater::getInstance()->setIsInited(false);
			list($template_ok, $template_not_found, $template_rated, $template_permitted) = def_module::loadTemplates("tpls/vote/rate/{$template}.tpl", "rate_ok", "rate_not_found", "rate_rated", "rate_permitted");

			$block_arr = Array();
			$block_arr['request_id'] = getRequest('requestId');


			if($element) {
				$block_arr['element_id'] = $element_id;
				if($ini->getIsRated($element_id)) {
					$rate_voters = $element->getValue("rate_voters");
					$rate_sum = $element->getValue("rate_sum");

					$res = $template_rated;
				} else {
					$rate_voters = (int) $element->getValue("rate_voters");
					$rate_sum = (int) $element->getValue("rate_sum") + (int) $bid;

					$element->setValue("rate_voters", ++$rate_voters);
					$element->setValue("rate_sum", $rate_sum);
					
					$element->setValue("rate", round($rate_sum / $rate_voters, 2));

					$element->commit();
					umiHierarchy::getInstance()->unloadElement($element_id);

					$res = $template_ok;

					$ini->setIsRated($element_id);
				}


				$block_arr['current_rating'] = $rate_sum / $rate_voters;
			} else {
				$res = $template_not_found;
			}

			$res = def_module::parseTemplate($res, $block_arr, $element_id);
      
			$referer_url = getServer('HTTP_REFERER');
                        def_module::redirect($referer_url);
			
		}


	public function getRating($element_id, $template = 'default') {
                        $ini = cmsController::getInstance()->getModule('vote');
			$element = umiHierarchy::getInstance()->getElement($element_id);
			if (!$element) return '';
			
			list($template_block, $template_block_is_rated) = def_module::loadTemplates("tpls/vote/rate/{$template}.tpl", "rate_block", "is_rated");

			$block_arr = array();
			$block_arr['rate_sum'] = (int) $element->getValue("rate_sum");
			$block_arr['rate_voters'] = (int) $element->getValue("rate_voters");
			$block_arr['is_rated'] = $ini->getIsRated($element_id);
			if ($block_arr['rate_voters'] > 0) {
				$block_arr['rate'] = round($block_arr['rate_sum'] / $block_arr['rate_voters'], 2);
				$block_arr['ceil_rate'] = round($block_arr['rate']);
			}
			$template = ($block_arr['is_rated']) ? $template_block_is_rated : $template_block; 
			return def_module::parseTemplate($template, $block_arr, $element_id);
	}

Также, в папке classes/modules/vote/ необходимо добавить файл permissions.custom.php с таким содержанием:

<?php
$permissions = Array('post' => Array('rate_do', 'getRating'));
?>

В шаблон: tpls/vote/rate/default.tpl

добавим следующие блоки:

$FORMS['rate_block'] = <<<END
Оцените фотографию:
<a title="Голосовать" href="/vote/rate_do/%id%/5/" >Голосовать</a>
<br/ >Рейтинг фотографии: %rate_sum% баллов
END;

$FORMS['is_rated'] = <<<END
Рейтинг фотографии: %rate_sum% баллов
END;

Для добавления к какой-либо страницы возможность проголосовать за нее, необходимо в шаблоне прописать макрос:

%vote getRating(%id%)%

где %id% - id страницы.