вопрос
в полной новости рейтинг вывожу так
в краткой новости он уже не отображается
.js
как его вывести в краткой новости?
[xfgiven_kp_id]
<div class="kinopoisk" data-movie="[xfvalue_kp_id]"></div>
[/xfgiven_kp_id]
в краткой новости он уже не отображается
.js
/**
* jQuery Kinopoisk Plugin 0.4
*
* Kinopoisk is a jQuery plugin that let you easily add to your web page movie rating informer. This informer shows
* movie rating from kinopoisk.ru and imdb.com. It does not use any server side scripts. It use javascript and css files only.
*
* @name kinopoisk
* @version 0.6
* @requires jQuery v1.5.0+
* @author Dmitry Shamin <dmitry.shamin@gmail.com>
* @license Dual licensed under the MIT or GPL Version 2 licenses.
*
* Copyright 2012-2013, Dmitry Shamin
*/
;(function( $ ) {
/**
* Установки по умолчанию
*
* @type {Object}
*/
var settings = {
"movie" : false,
"url" : "https://rating.kinopoisk.ru",
"range" : 10,
"fix" : 1,
"order" : ["kinopoisk", "imdb"],
"kinopoisk_template": '<div class="rating-kp-block">' +
'<span>Kinopoisk:</span>' +
'<small class="kp_rating">$rating</small>' +
'<i class="kp_votes">/$vote/</i></div>',
"imdb_template": '<div class="rating-im-block">' +
'<span>IMDb:</span>' +
'<small class="kp_rating">$rating</small>' +
'<i class="kp_votes">/$vote/</i></div>',
"cache_time" : 86400000,
"no_data": "Нет данных",
"show_zero_rating": true
};
/**
* Методы плагина
*
* @type {Object}
*/
var methods = {
/**
* Инициализация плагина
*
* @param options {String[]} Массив с параметрами плагина
*
* @return {*}
*/
init : function(options) {
return this.each(function() {
var $this = $(this);
// Атрибуты data перекрывают settings, а options перекрывает data
var params = $.extend({}, settings, $this.data(), options);
// Если вместо идентификатора передали ссылку
for (var i in params) {
if (i == 'movie') {
var movie = params[i].toString().split('/');
if (movie.length > 1) {
params[i] = movie[4];
} else {
params[i] = movie[0];
}
}
}
$this.data({'params': params}); // Записываем параметры элемента
$this.kinopoisk('getRating');
});
},
/**
* Получение рейтинга с сайта kinopoisk.ru
*
* @return {*}
*/
getRating: function() {
var el = $(this);
var params = el.data('params');
if (!params.movie) {
throw 'Не указан идентификатор фильма на кинопоиске (data-movie).';
}
// Проверяем кеш
var movie_xml = methods._getCache(el, params.movie);
if (movie_xml) {
return methods._showRating(el, movie_xml);
} else {
$.ajax(
{
type: 'GET',
url: 'https://query.yahooapis.com/v1/public/yql?q='
+ encodeURIComponent('select * from xml where url="' + params.url + '/' + params.movie
+ '.xml"') + '&format=xml&callback=?',
dataType: 'json',
success: function(data) {
movie_xml = methods._setCache(el, params.movie, data.results[0]); // Кешируем данные
return methods._showRating(el, movie_xml);
},
error: function(data) {
console.log(data);
$.error(data.responseText);
}
}
);
}
},
/**
* Получение значения из кеша.
*
* @param el {Object} jQuery объект текущего элемента
* @param movie {Integer} Идентификатор фильма
*
* @return {*}
* @private
*/
_getCache: function(el, movie) {
var params = el.data('params');
var timestamp = new Date().getTime();
var cache = localStorage.getItem("movie_" + movie);
if (!cache) {
return false;
} else {
var xml_doc = $.parseXML(cache);
var $xml = $(xml_doc);
if ((timestamp - $xml.find("cache_time").text()) > params.cache_time) {
// Если кеш истёк, чистим его
localStorage.removeItem("movie_" + movie);
return false;
}
}
return cache;
},
/**
* Установка кеша
*
* @param el {Object} Объект jQuery
* @param movie {Integer} Идентификатор фильма
* @param data {String} XML с ответом сервера kinopoisk
*
* @return {String}
* @private
*/
_setCache: function(el, movie, data) {
var params = el.data('params');
var timestamp = new Date().getTime();
var cache = localStorage.getItem("movie_" + movie);
var movie_xml = "<result>" + data + "<cache_time>" + timestamp + "</cache_time></result>";
if (!cache) {
localStorage.setItem("movie_" + movie, movie_xml);
} else {
var xml_doc = $.parseXML(cache);
var $xml = $(xml_doc);
if ((timestamp - $xml.find("cache_time").text()) > params.cache_time) {
// Если разница во времени более суток, то обновляем кеш
localStorage.setItem("movie_" + movie, movie_xml);
} else {
movie_xml = cache;
}
}
return movie_xml;
},
/**
* Показ рейтинга
*
* @param el {Object} jQuery объект
* @param data {String} XML с ответом сервера kinopoisk
*
* @private
*/
_showRating: function(el, data) {
var params = el.data('params');
if (!data) {
throw 'Проверьте правильность url "' + params.url + '"';
}
var xml_doc = $.parseXML(data);
var $xml = $(xml_doc);
var $kp_rating = $xml.find("kp_rating");
var $imdb_rating = $xml.find("imdb_rating");
// Если был указан левый movie_id
if ($kp_rating.text() == 0 && $kp_rating.attr("num_vote") == 0) {
if (!params.no_data) {
return el;
} else {
return el.html('<div class="kp_container">' + params.no_data + '</div>');
}
}
// Округление рейтинга
$kp_rating.text(methods.__roundRating($kp_rating, params.fix));
$imdb_rating.text(methods.__roundRating($imdb_rating, params.fix));
// Получение звёзд
$kp_rating.stars = methods._getStar($kp_rating.text(), params.range);
$imdb_rating.stars = methods._getStar($imdb_rating.text(), params.range);
var kp_tpl = methods._getTemplate(params.kinopoisk_template, $kp_rating);
var imdb_tpl = methods._getTemplate(params.imdb_template, $imdb_rating);
if (params.show_zero_rating == false) {
if ($kp_rating.text() == 0) {
kp_tpl = "";
}
if ($imdb_rating.text() == 0) {
imdb_tpl = "";
}
}
var ratings = {
"kinopoisk": kp_tpl,
"imdb": imdb_tpl
};
var text = "";
for (var i in params.order) if (params.order.hasOwnProperty(i)) {
if (typeof ratings[params.order[i]] != 'undefined') {
text += ratings[params.order[i]];
}
}
return el.hide().html('<div class="kp_container">' + text + '</div').fadeIn();
},
/**
* Округление рейтинга
*
* @param rating {Object} Объект рейтинга
* @param fix {int} Количество знаков после запятой
* @private
*/
__roundRating: function(rating, fix) {
return Math.round(parseFloat(rating.text()) * Math.pow(10, fix)) / Math.pow(10, fix);
},
/**
* Шаблон отображения
*
* @param template {String} Шаблон
* @param $rating {Object} Объект рейтинга
*
* @return {String}
* @private
*/
_getTemplate: function(template, $rating) {
return template
.replace("$rating", $rating.text())
.replace("$vote", $rating.attr("num_vote"))
.replace("$stars", $rating.stars);
},
/**
* Отображение звёзд
*
* @param rating {FLoat} Рейтинг
* @param range {Integer} Диапазон звёздности
*
* @return {String}
* @private
*/
_getStar: function(rating, range) {
var star = "";
var round_rating = Math.round(rating * range / 10);
for (var i = 1; i <= range; i++) {
if (i <= round_rating) {
star += "<span>★</span>";
} else {
star += "<span>☆</span>";
}
}
return star;
}
};
$.fn.kinopoisk = function(method) {
try {
if (methods[method]) {
if (method.charAt(0) == "_") {
throw "Нельзя вызывать приватный метод";
}
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method === 'object' || ! method) {
return methods.init.apply(this, arguments);
} else {
throw 'Метод ' + method + ' не найден';
}
} catch(e) {
$.error(e);
}
};
})(jQuery);
$(document).ready(function() {
$(".kinopoisk").kinopoisk();
});
как его вывести в краткой новости?