Хаки и Скрипты Next Generation CMS

Выводим блок похожие новости (simular) в короткую новость

irbees2008 irbees2008 Опубликовано - 12 - декабря Настройка плагинов
3202 - 4
  • Адаптировал: infinity237
  • Уровень сложности исполнения: нужны навыки css hmlt

Небольшой хак для плагина simular (похожие новости),поможет вывести блок в короткую новость,сразу предупреждаю о нагрузке на сервер.
Итак приступим.
1. Идем в директорию /engine/plugins/similar/ и открываем файл similar.php,и меняем

Код:
if ($mode['style'] == 'full') {
на
Код:
if (($mode['style'] == 'full') || ($mode['style'] == 'short')) {
Вот и все,добавляем в файл news.short.tpl переменную плагина
Код:
{% if pluginIsActive('similar') %}{{ plugin_similar_tags }}{% endif %}
Через твиг можно задать разное оформление блока для короткой и полной новости пример файл similar_entry.tpl
Код:
[TWIG]
{% if isHandler('news:by.category|news:main') %}
<section class="is-feature">
<div style="width:270px;height: 270px;"><center>
<a class="image image-full" href="{url}">
{% if (p.xfields.fotos.count < 1) %}
<img src="{{ tpl_url }}/images/img-none.jpg" width="100%" />
{% else %}
<img src="{{ p.xfields.fotos.entries[0].url }}" width="100%" />
{% endif %}</a></center></div>
<h3><a href="{url}">{title}</a></h3>

</section>
{% else %}
<div class="4u">
<section class="is-feature">
<div style="width:270px;height: 270px;"><center>
<a class="image image-full" href="{url}">
{% if (p.xfields.fotos.count < 1) %}
<img src="{{ tpl_url }}/images/img-none.jpg" width="100%" />
{% else %}
<img src="{{ p.xfields.fotos.entries[0].url }}" width="100%" />
{% endif %}</a></center></div>
<h3><a href="{url}">{title}</a></h3>
</section></div>
{% endif %}
[/TWIG]
Еще небольшой хак в дополнение,вывод разного количества похожих новостей для короткой и полной новости
опять идем в директорию /engine/plugins/similar/ и открываем файл similar.php и меняем там все на этот код
Код:
<?php

// Protect against hack attempts
if (!defined('NGCMS')) die ('HAL');

// Preload plugin tags
load_extras('core', 'tags');

include_once("inc/similar.php");

class SimilarNewsfilter extends NewsFilter {
function addNewsNotify(&$tvars, $SQL, $newsid) {
global $mysql;

$scount = pluginGetVariable('similar', 'count');
$scount = (($scount < 1)||($scount > 20))?5:$scount;

// Make reset for all tags for new news
plugin_similar_reset($newsid);

return 1;
}

// Make changes in DB after EditNews was successfully executed
function editNewsNotify($newsID, $SQLnews, &$SQLnew, &$tvars) {
global $mysql;

if (!$SQLnews['approve'])
return 1;

// Reset linked news
plugin_similar_resetLinked($newsID);

// Reset news with the same tags [ AFTER actual edit - new tags ]
plugin_similar_reset($newsID);

return 1;
}

// Add {plugin_similar} variable into news
function showNews($newsID, $SQLnews, &$tvars, $mode = array()) {
global $mysql, $tpl, $PFILTERS;

$tpath = locatePluginTemplates(array('similar', 'similar_entry'), 'similar', pluginGetVariable('similar', 'localsource'));

// Show similar news only in full mode
if (($mode['style'] == 'full') || ($mode['style'] == 'short')) {

$scount = pluginGetVariable('similar', 'count');
$scount = (($scount < 1)||($scount > 20))?5:$scount;
$similars = plugin_similar_recover($newsID, $scount);

if($mode['style'] == 'full') {
$similars = plugin_similar_recover($newsID, 6);
}
elseif($mode['style'] == 'short') {
$similars = plugin_similar_recover($newsID, 3);
}

// Locate similar news

// Accroding to pcall parameter we should decide if full data export from news should be done
$callingParams = array();

// Filter for dimensions
$filter = '';
if (!($similar_enabled = intval(pluginGetVariable('similar', 'similar_enabled'))) || !($samecat_enabled=intval(pluginGetVariable('similar', 'samecat_enabled')))) {
if ($similar_enabled) {
$filter = 'and (dimension = 0)';
} else if ($samecat_enabled) {
$filter = 'and (dimension = 1)';
} else
$filter = 'and 0';
}

$query = "select n.id, n.catid, n.alt_name, n.postdate, si.id as si_id, si.dimension as si_dimension, si.newsID as si_newsID, si.refNewsID as si_refNewsID, si.refNewsQuantaty as si_refNewsQuantaty, si.refNewsTitle as si_refNewsTitle, si.refNewsDate as si_refNewsDate from ".prefix."_similar_index si left join ".prefix."_news n on n.id = si.refNewsID where si.newsID = ". db_squote($newsID).' '.($filter!=''?$filter.' ':'')."order by si.refNewsQuantaty desc";
if (pluginGetVariable('similar', 'pcall')) {
$query = "select n.*, si.id as si_id, si.dimension as si_dimension, si.newsID as si_newsID, si.refNewsID as si_refNewsID, si.refNewsQuantaty as si_refNewsQuantaty, si.refNewsTitle as si_refNewsTitle, si.refNewsDate as si_refNewsDate from ".prefix."_similar_index si left join ".prefix."_news n on n.id = si.refNewsID where si.newsID = ". db_squote($newsID).' '.($filter!=''?$filter.' ':'')."order by si.refNewsQuantaty desc";
$callingParams['plugin'] = 'lastnews';
switch (intval(pluginGetVariable('similar', 'pcall_mode'))) {
case 1: $callingParams['style'] = 'short';
break;
case 2: $callingParams['style'] = 'full';
break;
default: $callingParams['style'] = 'export';
}

// Preload plugins
load_extras('news:show');
load_extras('news:show:one');
}

if (($similars == 2) && count($similarRows = $mysql->select($query))) {

// Array for dimensions of data [ similar / same category ]
$result = array('', '');
foreach ($similarRows as $similar) {
$txvars = array ();

// Execute filters [ if requested ]
if (pluginGetVariable('similar', 'pcall') && is_array($PFILTERS['news']))
foreach ($PFILTERS['news'] as $k => $v) { if ($k != 'similar') $v->showNewsPre($similar['id'], $similar, $callingParams); }

// Set formatted date
$dformat = pluginGetVariable('similar','dateformat')?pluginGetVariable('similar','dateformat'):'{day0}.{month0}.{year}';
$txvars['vars']['date'] = str_replace(array('{day}', '{day0}', '{month}', '{month0}', '{year}', '{year2}', '{month_s}', '{month_l}'),
array(date('j',$similar['si_refNewsDate']), date('d',$similar['si_refNewsDate']), date('n',$similar['si_refNewsDate']), date('m',$similar['si_refNewsDate']), date('y',$similar['si_refNewsDate']), date('Y',$similar['si_refNewsDate']), $langShortMonths[date('n',$similar['si_refNewsDate'])-1], $langMonths[date('n',$similar['si_refNewsDate'])-1]), $dformat);
$txvars['vars']['title'] = $similar['si_refNewsTitle'];
$txvars['vars']['url'] = newsGenerateLink($similar);

// Execute filters [ if requested ]
if (pluginGetVariable('similar', 'pcall') && is_array($PFILTERS['news']))
foreach ($PFILTERS['news'] as $k => $v) { if ($k != 'similar') $v->showNews($similar['id'], $similar, $txvars, $callingParams); }

$tpl -> template('similar_entry', $tpath['similar_entry']);
$tpl -> vars('similar_entry', $txvars);
$result[$similar['si_dimension']] .= $tpl -> show('similar_entry');
}

$tpl -> template('similar', $tpath['similar']);
$tpl -> vars('similar', array ( 'vars' => array ('entries' => $result[0])));
$tvars['vars']['plugin_similar_tags'] = $tpl -> show('similar');
} else {
$tvars['vars']['plugin_similar_tags'] = '';
$tvars['vars']['plugin_similar_categ'] = '';
}
}

return 1;
}

// Mass news modify
function massModifyNewsNotify($idList, $setValue, $currentData) {

// We are interested only in 'approve' field modification
if (!isset($setValue['approve']))
return 1;

// Turn on - call RESET()
if (!$setValue['approve']) {
plugin_similar_reset($idList);
} else {
// Turn off - call renew for all linked news
plugin_similar_resetLinked($idList);
}
return 1;
}

function deleteNews($newsID, $SQLnews) {
global $mysql;

plugin_similar_resetLinked($newsID);

// Delete similarity info
$mysql->query("delete from ".prefix."_similar_index where newsID = ".intval($newsID));
}
}

// Activate plugin ONLY if plugin tags already activated
if (getPluginStatusActive('tags')) {
register_filter('news','similar', new SimilarNewsFilter);
}
теперь изменять количество вывода похожих новостей из админки не получится,если надо изменить количество то ищем этот код
Код:
if($mode['style'] == 'full') {
$similars = plugin_similar_recover($newsID, 6);
}
elseif($mode['style'] == 'short') {
$similars = plugin_similar_recover($newsID, 3);
}
и меняем 6 и 3 на количество нужное вам
ну теперь все

Можешь почитать и вот эту статейку "Как включить кэш браузера ?"

Опрос

Ваше мнение

Как вам наш дизайн сайта?
Результаты

Последние комментарии

Теги

Anything in here will be replaced on browsers that support the canvas element

Статистика

  • Caйту: 4375 дней
  • Новостей: 566
  • Комменты: 257
  • Зарегистрированно : 661
  • Онлайн всего: [5]
  • Гости: [5]
  • Были сегодня : [2] Яндекс, Google
  • SQL запросов: 30
  • Генерация страницы: 0.61сек
  • Потребление памяти: 5.179 Mb 
  •   Яндекс.Метрика