// Доработка плагина под VM
// Хак файла установки плагина (Перед его установкой)
Файл /plg_extravote/sql/install.sql // Создает т_БД для данных плагина + Хак в полях
Код:
CREATE TABLE IF NOT EXISTS `#__content_extravote` (
`vmproduct_id` INT(11) NOT NULL, -- Первоночально был `content_id`
--`extra_id` INT(11) NOT NULL, -- Автор удалил данное поля (За ненадобностью)
`lastip` VARCHAR(50) NOT NULL,
`rating_sum` FLOAT NOT NULL,
`rating_count` INT(11) NOT NULL,
KEY `extravote_idx` (`vmproduct_id`) -- Указать ключевое поля
);
// Хак файла установки плагина (Перед установкой или после)
/plg_extravote/extravote.xml // Файл с помощью которого выполняется установка плагина
Содержит параметры плагина - Можно удалить, те которые не будут использоваться
Архивируем хакнутый плагин + Устанавливем + Активируем (Тип Content -> ExtraVote)
// Настройки
Автор оставляет как есть (Показывать, Счетчик, Система оценки (Круглая оценка, с половиной), Группа пользователей которая имеет право оставлять рейтинг, Размер Звезд и др.)
{extravote #} // Конструкция для вставки плагина в тело материала -- Автор убрал данную настройку (Я пока не стал удалять настройки плагина)
// Логика работы плагина
/plg_extravote/extravote.php //Главный фал плагина (Логика работы)
plgContentExtraVote // Основной класс плагина, наследует главный плагин Joomla class plgContentExtraVote extends JPlugin
protected $vmproduct_id; // Был $article_id (id материала)
protected $params_c; // Создали объект для декодирования данных строки json
// print_r($config); // Параметры конфигурации плагина
$this->view = JRequest::getCmd('view'); // Получаем название макета, который обрабатывает данные
$this->params_c = json_decode($config['params']); // Декодировали данные строки json (Настройки плагина) в объект
// Метод ExtraVotePrepare
$regex = "/{extravote\s*([0-9]+)}/i"; // Строка для поиска строки json на странице макета view -> там будет вставка рейтинга
Автор сделал так, что рейтинг должен отображаться на всех товарах сайта, вне зависимости от тега {extravote}
protected function ExtraVotePrepare( $article, &$params )
protected function ExtraVotePrepare( $product ) // Было ( $article, &$params ), где $produc - объект товара
protected function plgContentExtraVoteReplacer(&$matches ) // Метод, принимает совпадения {extravote}. ЗАКОМЕНТИРОВАЛИ
Автор удалил весь первоночальный функционал данного метода
Везде заменяем $article на $product
// Метод ContentExtraVote
protected function ContentExtraVote(&$article) // Метод, отображает готовый HTML рейтинга, удалили второй параметр (&$article, &$params)
Комментируем за ненадобностью первые три строки
Вместо $params->get('show_vote') Используем $this->$params_c->show_rating // Если в админке вкл. функция показать рейтинг
$table = "#__content_extravote"; // Обозначаем таблицу для выборки
$rating_count=$rating_sum=0;
$html=$ip='';
$db = JFactory::getDBO(); // Подключаемся к БД
$query='SELECT * FROM ' . $table . ' WHERE vmproduct_id='.$this->article_id; // vmproduct_id Вмсето content_id // $this->vmproduct_id Вместо $this->article_id // Удалил . ($table == '#__content_extravote' ? ' AND extra_id = 0' : '')
$db->setQuery($query); // Выборка
$vote=$db->loadObject(); // Загрузка выборки в переменную
$html .= $this->plgContentExtraVoteStars( $this->vmproduct_id, $rating_sum, $rating_count, $product->xid, $ip ); // $this->vmproduct_id Вместо $this->article_id
// Метод plgContentExtraVoteStars
Возвращает готовый html код рейтинга товара
$show_counter = $this->params_c->show_counter; // Было $this->params->get('show_counter',1);
$show_rating = $this->params_c->show_rating; // Было $this->params->get('show_rating',1);
$rating_mode = $this->params_c->rating_mode; // Было $this->params->get('rating_mode', 1);
$show_unrated = $this->params_c->show_unrated; // Было $this->params->get('show_unrated',1);
//$initial_hide = $this->params_c->initial_hide; // Было $this->params->get('initial_hide',0);
// Метод onContentBeforeDisplay
Обрабатывает данные плагина перед отображением Рейтинга на сайте
public function onContentBeforeDisplay($context, &$product) // Было onContentBeforeDisplay($context, &$product, &$params, $limitstart = 1)
if (strpos($context, 'com_virtuemart') !== false) { // Было 'com_content' // Теперь будет рабоать только с VM
$this->vmproduct_id = $product->virtuemart_product_id; // Было $this->article_id = $article->id; // Получили id товара VM
$this->ExtraVotePrepare($product); // Было ExtraVotePrepare($product, $params)
// Файл /plg_extravote/assets/ajax.php
Обрабатывает запросы к БД ajax-ом
content_id Заменяем на vmproduct_id
Код:
$query = "SELECT * FROM ".$table." WHERE vmproduct_id = ".$cid; //.($table == '#__content_extravote' ? ' AND extra_id = '.$xid : '');
$query = "INSERT INTO ".$table." ( vmproduct_id," . /*".($table == '#__content_extravote' ? ' extra_id,' : '')."*/ " lastip, rating_sum, rating_count )" . "\n VALUES ( " . $cid . ", "./*($table == '#__content_extravote' ? $xid.',' : '')." " .*/ $db->Quote( $currip ) . ", " . $user_rating . ", 1 )";
$query = "UPDATE ".$table . "\n SET rating_count = rating_count + 1, rating_sum = rating_sum + " . $user_rating . ", lastip = " . $db->Quote( $currip ) . "\n WHERE vmproduct_id = ".$cid; //.($table == '#__content_extravote' ? ' AND extra_id = '.$xid : '');
// Файлы локолизации
Для русской локализации либо создать новые, либо отредактировать en_EN