Внутренний голос. По заявкам :)

Хабраклонирование по заявкам жаждущих :)
Итак, что же такое внутренний голос — пример можно посмотреть на… ну конечно, хабре.
А вот здесь написано зачем это нужно.

1)добавляем в prefix_topic новое значение например 'golos' в поле topic_type

2)Курим замечательный мануал по созданию типов топиков от benone.

2.1) Учитывая то, что ссылку на создание топика-внут.голоса нужно показывать, допустим, только админам — в шаблоне(который скопирован с ActionTopic.tpl и исправлен по инструкции benone) обрамляем ссылку на новый вид топика {if $oUserCurrent->isAdministrator()}{/if}

3)Для добавления нового топика надо взять модифицированный ActionTopic.php (модификация — замена переменных — описана benone)
В функцию public function Init() сразу после $this->oUserCurrent=$this->User_GetUserCurrent(); вставляем проверку на админа:

if (!$this->oUserCurrent or !$this->oUserCurrent->isAdministrator()) {			
return $this->EventNotFound();
}


Думаю, надо изменить значение количества знаков топика в функции protected function checkTopicFields()
выставить значение 200-300 символов(внутренний голос не любит длинных разговоров)

if (!func_check(getRequest('topic_text'),'text',10,200)) {
			$this->Message_AddError('Внутренний голос должен быть краток - максимум 200 символов','Ошибка');
			$bOk=false;
		}


4)теперь имеем возможность добавлять новый тип топика golos (с ограничением на количество символов)
теперь правим шаблон вывода topic_list.tpl

Сразу после функции {foreach from=$aTopics item=oTopic} добавляем
{if $oTopic->getType()<>'golos'}


перед {/foreach} добавляем

{else}
<div class="topic">
<div class="golos">
{$oTopic->getText()}
</div>
</div>
{/if}


В css пишем свойства для .topic .golos {} Шрифт сколько надо, цвет.

Если все сделали правильно — будет вам счастье. Пробуйте. Должно работать. :)

Один недостаток — у «голоса» есть обязательный заголовок и обязательны теги (при выводе топика эти параметры не видны, но обязательны для заполнения — но админу можно ввести что он хочет, например «Голос #56» ). Причина — это быстрый хак, а не надстройка — для «идеально красивой системы» придется рыть поглубже и делать отдельные функции. Если кто хочет порыться — жду дополнений :)

33 комментария

avatar
Можно подробнее о внутреннем голосе? В чем идея?
avatar
я тоже не в теме внутреннего голоса ;) пару слов добавите?
avatar
Я вообще ничего не понял, зачем это сделано и каков результат? А то как будто статье написана с середины!
avatar
Что конкретно вам не понятно? Давайте разбираться. :) Может первый пункт, как зайти в phpMyAdmin? :)
Статья предполагает то, что вы хотя бы немного разбираетесь в структуре движка. Если видим на конце названия файла Action***.tpl лезем в шаблон, в /actions/. Если Action***.php то в classes/actions/.
Еще статья опирается на создание типов топиков от Кирилла(это написано дважды и дан линк). То что должно быть написано в пункте 2) уже написано benone, не вижу смысла писать заново.
avatar
Да нет, просто на тот момент вы не указывали ссылки на Хабр :)
avatar
Пользователи с самой большой кармой и рейтингом один раз в неделю имеют право написать сообщение, которое выводится на главную Хабра. Оно оформлено иначе, чем топики и содержит одну-две три строки текста, никаких тегов и заголовков. Просто текст крупным кеглем среди топиков. Своеобразная фишка Хабра для посвящённых, как и НЛО, топики добра и многое другое.
avatar
огромное спасибо, если добавить еще все то, что написал onthefly, то будет просто мегареспектище :)
avatar
спасибо большое
avatar
Совсем забыл, извиняйте. Добавил до cut'a описание что же это такое.
Также добавил жирным внизу апдейт чтобы люди понимали для чего это здесь опубликовано.
avatar
Отлично! Просто супер!
avatar
Огромне спасибо!
avatar
спасибо. все работает как надо. единственное что я заметил, при использовании большого размера шрифта текст начинает уезжать за предыдущий пост :)

а вот и скриншот :) щелкните, чтобы увеличить картинку
avatar
Я после
<code>{$oTopic->getText()}</code>
в topic_list.tpl поставил
<code>

</code>
помогло, но не знаю насколько это правильно.
avatar
эм…
br br
из за скобок наверное не отобразилось
avatar
не совсем. как мне подсказал товарищ eXtravert, там разруливается с помощью ксс padding-bottom.
в файле style.css
<code>.topic .golos { color: #aaa; outline: none; text-align: center; font-size: 25px;  padding-bottom: 10px; }
</code>
avatar
добавил кнопочки редактировать и удалить :) тут вообще все просто
в измененный topic_list.tpl перед строчкой
<code>{$oTopic->getText()}
</code>

добавляем
<code><ul class="action">			
{if $oUserCurrent and ($oUserCurrent->getId()==$oTopic->getUserId() or $oUserCurrent->isAdministrator() or $oTopic->getUserIsBlogAdministrator() or $oTopic->getUserIsBlogModerator() or $oTopic->getBlogOwnerId()==$oUserCurrent->getId())}
<li class="edit"><a href="{$DIR_WEB_ROOT}/{$oTopic->getType()}/edit/{$oTopic->getId()}/" title="{$aLang.topic_edit}">{$aLang.topic_edit}</a></li>
{/if}
{if $oUserCurrent and ($oUserCurrent->isAdministrator() or $oTopic->getUserIsBlogAdministrator() or $oTopic->getBlogOwnerId()==$oUserCurrent->getId())}
<li class="delete"><a href="{$DIR_WEB_ROOT}/golos/delete/{$oTopic->getId()}/" title="{$aLang.topic_delete}" onclick="return confirm('{$aLang.topic_delete_confirm}');">{$aLang.topic_delete}</a></li>
{/if}
</ul>			</code>

теперь вопрос) как их вправо сдвинуть?))
avatar
сдвинуть вправо их можно написав это после gettext)
avatar
отрубил заголовок и теги. точнее присвоил им статические значения.
также отрубил проверку на html-теги, редактор TinyMCE, закрыл ссылку на создание голоса простым пользователям.
осталось отшлифовать 2 вещи: блог, и запрет камментов и постинг на главную страницу.

также думаем с eXtravert над тем, как связать это с изменением кармы.

если кому это нужно, завтра дополню хак :)
avatar
конечно нужно!
avatar
спасибо! всё очень просто и отлично!
avatar
выйдя из деньрожденьевского запоя начал доделывать внутренний голос :)

из видимых багов
1) не работает редактирование голоса.
забираем файлы
ActionGolos.class.php
add.tpl
переименовываем полученный ActionColos_class_php в ActionGolos.class.php
раскладываем в нужные места, пользуемся

ЗЫ. Уважаемые знатоки, кто поможет проверить и избавиться от багов?
avatar
упс. забыл добавить. в файле ActionGolos.class.php делаем поиск по тексту ищем «un.lan» и заменяем его на свой тег. Приятного использования :)
avatar
как прходит допиливание внутреннего голоса?
было бы круто, чтобы пользователь с кармой выше 5 — мог писать сообщение длиной 140 символов :)
avatar
ну а в чем проблема?
{if $oUserCurrent->getRating()>5}

как то примерно так вполне должно работать.
я пока занят допиливанием поиска. :)
avatar
эт на уровне шаблона запрет) некошерно) нужно в проверке экшена условие добавить.
avatar
так это простой пример, хотябы на скрытие ссылки.
Для идеальной реализации, нужно каждые семь дней (к примеру) проверять изменения рейтинга за эти семь дней. человек у которого изменение в положительную сторону больше всего, получает возможность один раз воспользоваться внутренним голосом. ах мечты, мечты :)
avatar
Так допилили голос до ума? Если есть полностью рабочий вариант напишите пожалуйста.
avatar
Юрий, модуль голоса постепенно перерос в микроблоггинг :). Вы сами уже юзали демку)

Из недавнего разговора с randomtoy, мы договорились, что допиливать голос к зависимости от рейтинга будет он. Я не против.
avatar
со своей стороны, хочу заявить, что займусь данной модификацией в начале сентября. и если брать во внимание вот этот коммент, то модификация будет проходить в два этапа: 1) привязка кармы ко времени. 2) собственно уже сам внутренний голос.
avatar
И как обстоят дела с прогресом?
avatar
на самом деле никак. Есть желание, но нет абсолютно никакого времени. К сожалению в сутках не 36 часов. Если раньше я обещал, что сделаю-сделаю-сделаю, вот скоро начну и тд, то сейчас даже не имею понятия, когда и засяду даже посмотреть что изменилось в этом плане, в чем отличие от 0.3, не говоря уж о том, чтобы начать писать этот плагин. Возможно когда-нибудь и дойдут руки до написания, но нескоро :(
avatar
Очень ждем!
avatar
недождались да)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.