Вы не зашли.
ROZARD пишет:И делать проверку для каждый новости:
$news[$newsID] = и тут весь массив тех кто голосовал за эту новость;
и через условия проверять.А как обеспечишь атомарность операции "добавить проголосовавшего"?
Что будет если двое одновременно проголосуют за новость?
Так это же на вывод для тех кто уже голосовал, при голосовании уже делать проверку. Я привел такой пример чтобы не делать отдельно каждый запрос к каждой новости...
ikv777vlg, Я своё сообщение дополнил.
ikv777vlg, На счет скобок всё правильно.
$userROW['id'] так же как и $ip лучше обернуть, intval($userROW['id']) и db_squote($ip) они являются глобальными и их можно подменить другими значениями с другого плагина и лучше обезопасится.
[hr /]
И по тому что я предлогаю:
$news = array();
foreach ($mysql->select('select * from '.prefix.'_rating') as $row)
{
$news[$row['news_id']] = $row;
}
И делать проверку для каждый новости:
$news[$newsID] = и тут весь массив тех кто голосовал за эту новость;
и через условия проверять.
Тогда делай один запрос пройдясь по всей таблице и запиши всё в одну переменную и по ней уже сравнивай все новости.
P.S. всего кода не вижу и подробнее написать не могу...
Так проверять нужно при нажатии, а не как только зайдет на сайт
Не очень понятна:
(user_id='".intval(is_array($userROW))."'
тут походу intval выручает))
Скорее:
user_id='".intval($userROW['id'])."'
и скобки не обязательны...
Допиливал до кое каких нужд. Если кому нужно, добавлена поддержка для страниц плагинов, но только тех кто имеет собственные страницы. например: tags, feedback, comments и.т.д.
Klim, Проверять работает в начале или нет мне проблематично, главное что работает...
Klim, Вообще желательно в начале функции, но если так работает оставляй так))
Но ведь никто лучше создателей CMS не знает что там за функции в том-же, например extras.inc.php , я заглянул туда, а там темный лес, черт ногу сломит с моими знаниями PHP, хотя некоторую информацию можно почерпнуть из комментариев на английском, это очень хорошо, но неудобно конечно
Напиши какие именно функции из extras.inc.php ты хочешь знать и на http://wiki.ngcms.ru/ я их распишу...
P.S. Только не надо говорить просто ВСЕ
Klim, Ты можешь для этого плагина сам указать шаблон.
Если для страницы:
http://сайт.ру/plugin/tags/ то найди функцию:
function plugin_tags_generatecloud($ppage = 0, $catlist = '')
И добавь в неё:
$SYSTEM_FLAGS['template.main.name'] = 'main'; //тогда для этой страницы будет использоваться шаблон main.tpl
А если нужно для: http://сайт.ру/plugin/tags/tag/?tag= тогда найди:
function plugin_tags_tag($params = array())
И в неё добавь:
$SYSTEM_FLAGS['template.main.name'] = 'main';
А вообще, не хватает документации по всем подобным функциям, которые можно вызывать в плагинах.
Или такая документация есть? Я просто не в курсе, уж извиняйте
Есть http://wiki.ngcms.ru но она пока не полная...
Какая-то несуразность выходит с плагином "Теги". При выводе списка новостей по тегу (http://сайт.ру/plugin/tags/tag/?tag=Yamaha) подставляется шаблон категории, причем "старшей" по id категории, т.е. если у меня, например, в списке тега Yamaha, 10 новостей из разделов: Мотоциклы, Снегоходы, Скутеры, а 1 новость из категории Музыкальные инструменты, но id этой категории выше остальных, то тег выводится в шаблоне категории Музыкальные инструменты. Это так задумано или что-то не так? Может лучше сделать чтобы плагин полностью выходил в шаблоне main.tpl?
Плагин не рассчитан для работы с плагином tags как и с другим другим. Только с главной страницей, категориями и групп пользователей...
1. При удалении title категории в плагине, белая страница.
Сам заданный title удалился, просто потом нажал кнопку назад в браузере и обновить.
Хорошо бы, там рядом с кнопкой удалить сделать еще "Редактировать". Для всех трех: разделы, новости, статика.
Так что отредактировать достаточно нажать на созданное правило. Удаление подправил.
2. Постраничник
Для категорий
Уникальный title должен поддерживать постраничник "стр.2,3..." тот что есть в плагине.
Он и так есть...
Для новостей
Уникальный title должен поддерживать постраничник "стр.2,3..." тот что есть в плагине. Правда это логично бы на уровне ядра иметь.
(Хорошо бы, если статья большая и разбивается на 2/3 страницы, иметь возможность задать title и для них. Но это уже вообще мечта.)
Добавил.
Для страниц
Уникальный title должен поддерживать постраничник "стр.2,3..." тот что есть в плагине. Так же хотелось бы иметь это в ядре.
(Хорошо бы, если текста много и он разбивается на 2/3 страницы, иметь возможность задать title и для них.)
Тут не знаю, нужно ли...
Кэш он должен удалить для редактированной: категории, новости или статики. Я проверил и у меня кэш работает.
То что вылазило убрал и подправил ошибку в шаблоне.
[hr /]
Поменя работу кэша. Теперь если редактируешь категорию то кэш для неё обновится сразу при редактировании...
ikv777vlg, now() пишется в самом запросе...
ROZARD пишет:Без него проще...
Сэкономить лишние 2 символа в принципе тоже правильно, хоть и бессмысленно
Ладно, с этим разобрались.
Дело не в символах, а если после этого знака вставишь случайно символ у тебя будут проблемы с хеадором и отсюда уже другие проблемы и была как то темя связанная с безопасность...
ROZARD пишет:Для IP подойдет varchar(15), а для News_ID text должно хватить...
text точно хватит? Даже если, допустим при 1000 новостей, у меня просто голова кругом от этих типов данных
Тогда наверняка longtext он поддерживает объем чуть больше 4 миллиардов)
По поводу даты лучше тогда через условие:
if('ДАТА_ПОСЛЕ_КОТОРОЙ НУЖНО ОЧИСТИТЬ ТАБЛИЦУ' <= 'ВРЕМЯ_В ДАННЫЙ МОМЕНТ')
$mysql->query("delete from ".prefix."_rating");
legenda, ЧПУ для статистической страницы работать не будет...
Или самим открыть static.php и найти:
if ((!$limit)||(!is_array($row = $mysql->record("select * from ".prefix."_static where approve = 1 and ".$limit)))) {
if (!$params['FFC']) {
error404();
}
return false;
}
и после добавить:
$SYSTEM_FLAGS['static']['db.id'] = $row['id'];
А теперь вопросы...
Во первых, почему в файле <?php в конце не закрыт(?>), это так задумано, или просто забыли? На сколько я знаю, <?php закрывать не обязательно, но надо-же, наверное, для цивильности
Без него проще...
Во вторых, вопрос про БД... Я конечно извиняюсь, но какие типы данных использовать для полей IP и News_ID, если учитывать что в IP будет храниться IP, а в News_ID может храниться длиннющий список идентификаторов новостей с разделителями? (добавил вложение)
Для IP подойдет varchar(15), а для News_ID text должно хватить...
И третий вопрос, один из самых важных, как организовать удаление старых записей из БД? Если юзер проголосовал, ему ставится печенька на год, я правильно понял? Так я думаю за год в базе скопится слишком много, СЛИШКОМ МНОГО IP-адресов с идентификаторами... Так-что я думаю, месяца 2-3 вполне хватит, потом ID у этого IP можно удалять, а если кончились ID, то и IP мы удаляем. Мысль ясна?
Как это реализовать - непонятно.. Помогите!
Добавить ещё одно поле date куда при добавлении будет добавляться время и сравнивать разницу и по ней удалять, но при твоей структуре с этим проблематично получится) Я думаю лучше добавить кнопку чтобы можно было нажать и вся таблица очиститься)
kolia, Рабочая...
1. Возможность указать персональный титл для каждой новости, раздела, страницы.
Это очень важная функция для seo-оптимизации и её не хватает. Лучше не плагином, а вшить прямо в движок. Идеально - еще одним полем, там где Альт. имя:,Описание:,Ключевые слова:.
Или доработать simple_title_ng(чтобы плагин включал такую возможность глобально), сейчас плагин, делает только "скелет вывода" титлов.
http://ngcms.ru/forum/viewtopic.php?id=2055
Плагин simple_title_pro, текущая версия 0.1 RC3 [NEW].
Аналогичен simple_title_ng с разницей, что может формировать <title></title> индивидуально для каждой: категории, статистической страницы, новости.
Версия движка: NG v.0.9.3
Из особенностей:
-Использует БД.
-Используется шаблонизатор Twig.
-Предусмотрено кэшировани.
-Есть поддержка остальных страниц.
-Можно указать плагины исключения.
-Поддержка тегов для плагина tags.
-Настройка кэша.
-Добавлена поддержка блока для подстраницы [/ %num%]. [NEW]
Установка:
1. Помешаем папку с плагином в \engine\plugins\
2. В разделе "Плагины" устанавливаем и включаем
3. Можно пользоваться, по умолчанию уже заданы настройки для <title></title> если нужно изменить выбираем нужный раздел и добавляем.
4. Открываем /engine/skins/default/tpl/news/add.tpl, /engine/skins/default/tpl/news/edit.tpl находим в нем:
<tr>
<td><img src="{{ skins_url }}/images/nav.png" hspace="8" alt="" /></td>
<td>{{ lang.editnews['keywords'] }}:</td>
<td><input type="text" name="keywords" value="{{ keywords }}" size="60" tabindex="5" /></td>
</tr>
после добавляем:
{% if (pluginIsActive('simple_title_pro')) %}
<tr>
<td><img src="{{ skins_url }}/images/nav.png" hspace="8" alt="" /></td>
<td>Титле %home% %cat% %title%</td>
<td><input type="text" name="titles" value="{{ titles }}" size="60" tabindex="5" /></td>
</tr>
{% endif %}
Для работу требуется обновиться до SVN 848, в противном случае плагин будет не работоспособен.
Тогда я извиняюсь за своё не знание locate, concat
Что то ты намудрил
if($upd){
$mysql->query("update ".prefix."_rating set News_ID=concat(News_ID, '".str_replace("'", "", str_replace("'", "", $post_id))."|') where IP = '".$_SERVER['REMOTE_ADDR']."'");
}
Тут нужно добавлять запись, а не обновлять у первой попавшейся записи News_ID
И проверку голосовал человек с таким то IP за такую то новость можно сделать один запросом и не делать кучу условий...
Зачем locate?
Зачем concat?
Добавь global $ip; И тогда не придется писать $_SERVER['REMOTE_ADDR'], а просто $ip
Индексы добавил на News_ID, IP? И хорошо бы очищать эту таблицу от старых IP чтобы не перегружать.
Данной проверки в месте где записывает куки я не нашел, данная проверка идет в начале и просто проверяет новость на наличие...
Ну так должен работать, наверное не в том место добавляешь...