Хак, скрытые комментарии, [инструкция]

Для примера будем добавлять возможность скрывать в комментарии в Топики:

Первое (БД):
В таблицу {prefix}_topic вставляем строку с параметрами —
`topic_publish_comments` tinyint(1) NOT NULL DEFAULT '0',
для ленивых
ALTER TABLE `prefix_topic` ADD `topic_publish_comments2` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `topic_publish_index`
.

Второе(Скрипты):
В файле — classes\modules\topic\entity\Topic.entity.class.php
После
public function getPublishIndex() {
        return $this->_aData['topic_publish_index'];
    } 

добавить
public function getPublishComments() {
        return $this->_aData['topic_publish_comments'];
    }


После
public function setPublishIndex($data) {
        $this->_aData['topic_publish_index']=$data;
    } 

добавить
public function setPublishComments($data) {
        $this->_aData['topic_publish_comments']=$data;
    }


В файле — classes\actions\ActionTopic.class.php
после 165 строки
$_REQUEST['topic_publish_index']=$oTopic->getPublishIndex();

добавляем строку
$_REQUEST['topic_publish_comments']=$oTopic->getPublishComments();


В функции SubmitAdd
после

/**
 * Принудительный вывод на главную
 */
$oTopic->setPublishIndex(0);
if (getRequest('topic_publish_index')) {
	$oTopic->setPublishIndex(1);
}

добавляем:

/**
* Скрытие комменатриев
*/
$oTopic->setPublishComments(0);
if (getRequest('topic_publish_comments')) {
	$oTopic->setPublishComments(1);
}

В функции SubmitEdit($oTopic)
после
if ($this->oUserCurrent->isAdministrator())	{
 /**
* Принудительный вывод на главную
*/
	if (getRequest('topic_publish_index')) {
		$oTopic->setPublishIndex(1);
	} else {
		$oTopic->setPublishIndex(0);
	}
}


Вставить
/**
* Скрытие комменатриев
*/
		
if (getRequest('topic_publish_comments')) {
	$oTopic->setPublishComments(1);
} else {
	$oTopic->setPublishComments(0);
}


По желанию аналогичные действия проделываются в файлах:
— classes\actions\ActionAdmin.class.php
— classes\actions\ActionLink.class.php — для ссылок
— classes\actions\ActionQuestion.class.php — для топиков типа вопрос.


Третье (шаблоны и язык):

В файле шаблонов templates\skin\new\actions\ActionTopic\add.tpl (тему выбирайте свою, в данном случае редактируем тему NEW)
После блока:

{if $oUserCurrent->isAdministrator()}
	<p><label for=""><input type="checkbox" id="topic_publish_index" name="topic_publish_index" class="checkbox" value="1" {if $_aRequest.topic_publish_index==1}checked{/if}/> 
	— {$aLang.topic_create_publish_index}</label><br />
	<span class="form_note">{$aLang.topic_create_publish_index_notice}</span></p>
{/if}

Вставляем чекбокс для скрытых каментариев:
<!-- отметка для скрытия по умолчанию комментариев -->
<p><label for=""><input type="checkbox" id="topic_publish_comments" name="topic_publish_comments" class="checkbox" value="1" {if $_aRequest.topic_publish_comments==1}checked{/if}/> 
— {$aLang.topic_create_publish_comments}</label><br />
<span class="form_note">{$aLang.topic_create_publish_comments_notice}</span></p>


В данном случае получается что этот чекбокс будет виден при добавлении постов и при редактировании, для желающих которые хотят ограничить использование данной функции можно обрамить блок указанный выше в
{if $oUserCurrent->isAdministrator()} ... {/if}
, для администратора.
Закрываем и забываем.

В файле templates\skin\new\actions\ActionBlog\comment.tpl отвечающем за вывод комментариев после строки
{assign var="nesting" value="-1"}
тогда будет видна надпись Комменатрии (7)
вставляем
{if $oTopic->getPublishComments()==0 or 
		($oUserCurrent and 
			(
				$oUserCurrent->getId()==$oTopic->getUserId() or 
				$oUserCurrent->isAdministrator() or 
				$oTopic->getUserIsBlogAdministrator() or 
				$oTopic->getUserIsBlogModerator() or 
				$oTopic->getBlogOwnerId()==$oUserCurrent->getId()
			)
		) }  
, если нет желания показывать пользователям сколько уже оставлено комментариев, то вставить этот блок перед
<!-- Comments Header -->


Из этого условия можно выкинуть $oTopic->getUserIsBlogAdministrator() or $oTopic->getUserIsBlogModerator() or если не хотите чтобы комментарии видели модераторы и администраторы блога в который будет отправлен пост. В случае если это блог пользователя то он будет! видеть комментарии

В том же файле, перед
<span id="comment-children-0"></span>

вставляем блок:

{else}
     <p>{$aLang.comment_cases_in_work}</p>
{/if}


Переходим к языковому файлу — templates\language\russian.php:
1. после строки
'topic_create_publish_index_notice' => 'Если отметить эту галку, то топик сразу попадёт на главную страницу (опция доступна только администраторам)',

Вставлем:
'topic_create_publish_comments' => 'Скрывать комментарии',
	'topic_create_publish_comments_notice' => 'Если отметить эту галку, то комментарии в топике будут крыты пока она стоит.',

2. после строки
'comment_unregistered' => 'Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.',

Вставляем
'comment_cases_in_work' => 'Владелец блога скрыл комментарии',


ВАЖНО:
По возможности рекомендую опробовать у себя на машине и отписать по результатам.
мог забыть какие-то детали включить в инструкцию…

8 комментариев

avatar
Спасибо, пригодится!!!
avatar
По возможности рекомендую опробовать у себя на машине.
к сожалению мог забыть какие-то детали включить в инструкцию…
avatar
Если честно, не поняла зачем это всё.
avatar
аля ЖЖ.
теряеш контакты и просиш чтобы те кто у тебя был в книжке накидали свои тлефоны и не светить их всем.

или например организовавается викторина, и чтобы пользователи не видели правильного ответа (если кто-то правильно ответил) можн оскрить коменты. после окончания викторины их показать.
avatar
ага. вопрос. товарищ оставивший каммент в топике, видит свой каммент и ответ на него или нет? :)
avatar
После осталвения коментария в топике Товарищч видит свой комментарий, до того пока не перезагрузит страницу с помощью F5 или не уйдёт и заново не вернётся.

это скорее получается одностороння связь, так как на коментарий может ответить админ/владелец дока, но это не предусматривается, разве что получит сообщение на почту.
avatar
все таки надо проработать этот момент. я скажем рассеянный и я иногда забываю что же я написал такого))))) и тогда реально получится скрининг камментов аля ЖЖ.

но все равно спасибо. плюсик за псто :)
avatar
Вариант интересный.
По возможности глянем в приближении)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.