Вы не зашли.
Было бы неплохо сделать возможность исключать нежелательные теги.
Просто, некоторые теги могут очень часто повторяться, но не иметь важности для новости.
Не в сети
и все-таки кто может доделать плагин, надо
1. чтоб новости выводились по дате (в даном варианте плагин просто ужасно тупой)
2. желательно работоспособность не только в news.full.tpl но и в main.tpl
Не в сети
Всем доброго дня.
Установлена NGCMS 0.9.3 Changeset 1058 + плагин similar 0.06.
Пробую "Режим вызова" ставить в "Короткая" и "Полная". Ставлю "Короткая", выводятся только заголовки, ставлю "Полная" - страница новости вообще перестает загружаться, выдает следующее:
NGCMS Runtime error: Allowed memory size of 36700160 bytes exhausted (tried to allocate 77 bytes)
[ 1]: Allowed memory size of 36700160 bytes exhausted (tried to allocate 77 bytes)
Stack trace
Line # File name
103 сайт.ru/engine/plugins/similar/similar.php
"Интеграция с новостными плагинами" установлено в "Да".
И подскажите пожалуйста, есть ли все-таки планы сделать вывод последних по дате новостей при равных условиях похожести по тегам?
Изменено Pavel555 (2012-10-11 20:00:47)
Не в сети
Памяти не хватает на сервере.
Не в сети
Pavel555, какой-то очень странный косяк.
Пишет, что не хватает памяти, но при этом израсходовано 35Mb.
Проблема возникает только при включении similar?
Какое двиг указывает потребление памяти с отключенным similar?
Не в сети
Да, глюк с незагрузкой страницы возникает только при при включеном similar и "Режим вызова": "Полная".
В режиме "Короткая" страница новости загружается, но в похожих статьях только заголовки.
Какое двиг указывает потребление памяти с отключенным similar?
Как это посмотреть?
Не в сети
Pavel555, переменная {memPeakUsage} в main.tpl
Сайт установлен на хостинге или ты на локальной машине экспериментируешь?
Если на хостинге, то кидай в личку доступы (ftp + логин админа на сайте), посмотрю. Очень похоже на какую-то петлю.... кстати, ты ведь не включал include'ы в шаблонах?
Не в сети
{memPeakUsage}:
similar отключен: 4.592
similar включен: 4.736
Сайт на хостинге. Доступ кинул. Поясни пожалуйста, что значит "включать include'ы в шаблонах?"
И что насчет отбора самых свежих новостей при равном подобии по тегам? Есть в планах?
Не в сети
Pavel555, нашел ошибку в плагине - он вызывал сам себя и таким образом мог скушать любое кол-во памяти
Обновил версию до 0.07 у тебя на сайте и в SVN
И что насчет отбора самых свежих новостей при равном подобии по тегам? Есть в планах?
В планах-то есть, но ведь полное соответствие по тегам бывает редко. Поэтому нужно учитывать как-то либо минимальное кол-во совпадений чтобы новость считать "похожей", либо какой-то другой алгоритм придумывать.
Не в сети
Спасибо! Ошибка исчезла, но разницы между "Экспорт", "Полная" и "Короткая" так и не наблюдается. Во всех случаях выводится только заголовок похожей статьи.
полное соответствие по тегам бывает редко
Позволю себе не согласиться. Часто новость имет 2-3 тега, которые отражают самую суть. Например, в заметке про территориальный спор Китая и Японии будет 2 тега: Япония и название спорного объекта. Китай не будет тегом, т.к. весь сайт посвящен Китаю. Т.о., тут 2 тега, плодить большее количество тегов для такой новости - излишне. Далее, проходит месяц, два, в течение этого времени мы освещаем развитие ситуации в последующих новостях. Теги остаются те же. И вот тут очень неплохо было бы выводить в похожих самые последние статьи по данным тегам, а не статьи 2-месячной давности.
Не в сети
Где меняется надпись "Понравилась тема? Посмотрите эти:"?
Сделал поиск по всем файлам сайта, нигде не нашел.
\engine\plugins\similar\tpl\similar.tpl
жизнь бьёт ключом......,ну иногда и гайкой.....
Хаки и Скрипты| Бесплатные шаблоны NGCMS
На Районе - Шахтинск Украшение Windows
Не в сети
Pavel555, я уже больше года как писал что надо віводить новости по дате а не статьи 2-месячной или 3 годовой давности когда есть вчерашние
желательно с выбором
жизнь бьёт ключом......,ну иногда и гайкой.....
Хаки и Скрипты| Бесплатные шаблоны NGCMS
На Районе - Шахтинск Украшение Windows
Не в сети
Pavel555, я уже больше года как писал что надо віводить новости по дате а не статьи 2-месячной или 3 годовой давности когда есть вчерашние
Да, я видел. Поддерживаю эту необходимость.
\engine\plugins\similar\tpl\similar.tpl
Вот его содержимое:
<div style="border: #DDDDDD 1px solid; margin-bottom: 5px;">
<div style="background: #DDDDDD;">Похожие новости:</div>
<table border="0" width="100%" cellspacing="0" cellpadding="0" style="margin-left: 3px;">
<tr><td>
{entries}
</td></tr>
</table>
</div>
Но все равно выводится "Понравилась тема? Посмотрите эти:"
Кэш чистил.
Не в сети
legenda пишет:Pavel555, я уже больше года как писал что надо віводить новости по дате а не статьи 2-месячной или 3 годовой давности когда есть вчерашние
Да, я видел. Поддерживаю эту необходимость.
irbees2008 пишет:\engine\plugins\similar\tpl\similar.tpl
Вот его содержимое:
<div style="border: #DDDDDD 1px solid; margin-bottom: 5px;">
<div style="background: #DDDDDD;">Похожие новости:</div>
<table border="0" width="100%" cellspacing="0" cellpadding="0" style="margin-left: 3px;">
<tr><td>
{entries}
</td></tr>
</table>
</div>Но все равно выводится "Понравилась тема? Посмотрите эти:"
Кэш чистил.
адрес сайта ,глянуть надо
или сам посмотри в news.full
Изменено irbees2008 (2012-10-13 19:30:47)
жизнь бьёт ключом......,ну иногда и гайкой.....
Хаки и Скрипты| Бесплатные шаблоны NGCMS
На Районе - Шахтинск Украшение Windows
Не в сети
И что насчет отбора самых свежих новостей при равном подобии по тегам? Есть в планах?
В планах-то есть, но ведь полное соответствие по тегам бывает редко. Поэтому нужно учитывать как-то либо минимальное кол-во совпадений чтобы новость считать "похожей", либо какой-то другой алгоритм придумывать.
vitaly пишет:полное соответствие по тегам бывает редко
Позволю себе не согласиться. Часто новость имет 2-3 тега, которые отражают самую суть .... проходит месяц, два, в течение этого времени мы освещаем развитие ситуации в последующих новостях. Теги остаются те же. И вот тут очень неплохо было бы выводить в похожих самые последние статьи по данным тегам, а не статьи 2-месячной давности.
Pavel555, я уже больше года как писал что надо віводить новости по дате а не статьи 2-месячной или 3 годовой давности когда есть вчерашние
Виталий, фича действительно нужная. Терпеливо ждем
Не в сети
Есть возможность вывода в короткую новость?
жизнь бьёт ключом......,ну иногда и гайкой.....
Хаки и Скрипты| Бесплатные шаблоны NGCMS
На Районе - Шахтинск Украшение Windows
Не в сети
счас занимаемся переделкой плагина, есть пару вопросов
1. Как проходит выборка в плагине?(критерии)
2. В каком файле и где именно оно выбирает какие новости выводить на сайт.
Может кто то подсказать? а то вапше принцип видачи непонтний
Не в сети
Логически плагин состоит из 2х частей:
1. Расчёт похожести новостей
2. Отображение списка "похожих" внутри целевой новости
Похожесть
Обновление происходит в момент редактирования/добавления новости.
Для неё (и всех "похожих" на неё) происходит пересчёт таблицы индексов (ng_similar_index).
Функции:
// Reset linked news
plugin_similar_resetLinked($newsID);
// Reset news with the same tags [ AFTER actual edit - new tags ]
plugin_similar_reset($newsID);
Сама похожесть определяется в plugin_similar_repopulate(), inc/similar.php, строка ~118:
$list = $mysql->select("select i.newsID, count(i.tagID) as cnt, n.title, n.editdate, n.postdate from ".prefix."_tags_index i left join ".prefix."_news n on n.id = i.newsID where (i.newsID <> ".db_squote($newsID).") and (i.tagID in ( select tagID from ".prefix."_tags_index where newsID = ".db_squote($newsID).") ) group by newsID order by cnt desc");
.. изменяя этот SQL запрос (или заменив его на более сложную логику) можно изменить логику определения степени похожести
Принцип выдачи описан в конфигураторе плагина:
ВНИМАНИЕ!
Это - первый этап реализации плагина. Плагин оценивает похожесть новости только по данным, предоставляемым плагином tags (облако тегов).
В будущих версиях появится возможность более сложного анализа.
При этом обрати внимание - есть поле dimension, которое позволяет использовать разные механизмы определения похожести.
dimension = 0 - текущий вариант (т.е. по тегам), остальные варианты не используются, при доработке плагина лучше воспользоваться этим полем - это позволит, к примеру, создать собственный принцип определения похожести и при этом сохранить структуру БД и обратную совместимость.
Отображение списка
similar.php, начинается с:
function showNews($newsID, $SQLnews, &$tvars, $mode = array()) {
дальше всё очевидно и просто.
Переделка
Первое что приходит в голову - начать учитывать не только теги, но и "расстояние во времени" (разницу между временем публикации основной новости и "похожих" на неё) и ввести некий коэффициен.
К примеру, уменьшать степень похожести ("...order by cnt desc") на 10% за каждые 10 дней между новостями, тогда при совпадении 5 тегов, но с разницей в 30 дней новость будет менее "похожей" чем при совпадении 4 тегов, но разницей в 1 день.
Аналогично можно ввести какой-либо коэффициент за нахождение новости в той же категории....
В общем, дальше только полёт фантазии.
А после окончания фантазий нам остаётся только взять inc/similar.php, строка ~120:
// Populate data for our news
for ($i = 0; $i < min(count($list), $count); $i++) {
$row = $list[$i];
$mysql->query("insert into ".prefix."_similar_index (newsID, refNewsID, refNewsQuantaty, refNewsTitle, refNewsDate) values (".db_squote($newsID).", ".db_squote($row['newsID']).", ".db_squote($row['cnt']).", ".db_squote($row['title']).", ".db_squote(($row['editdate']>$row['postdate'])?$row['editdate']:$row['postdate']).")");
}
foreach ($list as $row)
$affectedList [ $row['newsID'] ] = $row['newsID'];
и вписать сюда свой код (задав собственное значение dimension для полного счастья).
Не в сети
Логически плагин состоит из 2х частей:
1. Расчёт похожести новостей
2. Отображение списка "похожих" внутри целевой новостиПохожесть
Обновление происходит в момент редактирования/добавления новости.
Для неё (и всех "похожих" на неё) происходит пересчёт таблицы индексов (ng_similar_index).
Функции:// Reset linked news plugin_similar_resetLinked($newsID); // Reset news with the same tags [ AFTER actual edit - new tags ] plugin_similar_reset($newsID);
Сама похожесть определяется в plugin_similar_repopulate(), inc/similar.php, строка ~118:
$list = $mysql->select("select i.newsID, count(i.tagID) as cnt, n.title, n.editdate, n.postdate from ".prefix."_tags_index i left join ".prefix."_news n on n.id = i.newsID where (i.newsID <> ".db_squote($newsID).") and (i.tagID in ( select tagID from ".prefix."_tags_index where newsID = ".db_squote($newsID).") ) group by newsID order by cnt desc");
.. изменяя этот SQL запрос (или заменив его на более сложную логику) можно изменить логику определения степени похожести
Принцип выдачи описан в конфигураторе плагина:
ВНИМАНИЕ! Это - первый этап реализации плагина. Плагин оценивает похожесть новости только по данным, предоставляемым плагином tags (облако тегов). В будущих версиях появится возможность более сложного анализа.
При этом обрати внимание - есть поле dimension, которое позволяет использовать разные механизмы определения похожести.
dimension = 0 - текущий вариант (т.е. по тегам), остальные варианты не используются, при доработке плагина лучше воспользоваться этим полем - это позволит, к примеру, создать собственный принцип определения похожести и при этом сохранить структуру БД и обратную совместимость.Отображение списка
similar.php, начинается с:function showNews($newsID, $SQLnews, &$tvars, $mode = array()) {
дальше всё очевидно и просто.
Переделка
Первое что приходит в голову - начать учитывать не только теги, но и "расстояние во времени" (разницу между временем публикации основной новости и "похожих" на неё) и ввести некий коэффициен.
К примеру, уменьшать степень похожести ("...order by cnt desc") на 10% за каждые 10 дней между новостями, тогда при совпадении 5 тегов, но с разницей в 30 дней новость будет менее "похожей" чем при совпадении 4 тегов, но разницей в 1 день.Аналогично можно ввести какой-либо коэффициент за нахождение новости в той же категории....
В общем, дальше только полёт фантазии.
А после окончания фантазий нам остаётся только взять inc/similar.php, строка ~120:// Populate data for our news for ($i = 0; $i < min(count($list), $count); $i++) { $row = $list[$i]; $mysql->query("insert into ".prefix."_similar_index (newsID, refNewsID, refNewsQuantaty, refNewsTitle, refNewsDate) values (".db_squote($newsID).", ".db_squote($row['newsID']).", ".db_squote($row['cnt']).", ".db_squote($row['title']).", ".db_squote(($row['editdate']>$row['postdate'])?$row['editdate']:$row['postdate']).")"); } foreach ($list as $row) $affectedList [ $row['newsID'] ] = $row['newsID'];
и вписать сюда свой код (задав собственное значение dimension для полного счастья).
А как сделать похожесть по интервалу в дате если в столбце refnewsid записана только 1 новость,каким образом берутся следующие? Или я неправильно понимаю механизм вашего запроса.
Изменено Lagun (2014-01-21 19:34:47)
Не в сети