Свой description для страниц топиков

Цель: создания своего description для страниц топиков.

1. Дополнительное поле при создание топика.
2. Счетчик символов при заполнение и валидация
3. Условие для страниц топиков


1. Дополнительное поле при создание топика

В файле: classes/modules/topic/entity/Topic.entity.class.php
после, примерно 408 строке (в пределах класса) вставляем:
public function getAnonsContent() {
        $this->extractExtra();
        if (isset($this->aExtra['anons_content'])) {                                  
                $anonscontent=$this->aExtra['anons_content'];
                                return $anonscontent;
        }
        return null;
    }
        public function setAnonsContent($data) {
        $this->extractExtra();
        $this->aExtra['anons_content']=$data;
                $this->setExtra($this->aExtra);
    }

В файле: classes/actions/ActionTopic.class.php
после строки (145 строка)
$_REQUEST['topic_forbid_comment']=$oTopic->getForbidComment();

вставляем:
$_REQUEST['topic_anonscontent']=$oTopic->getAnonsContent();

после строки (244 строка)
$oTopic->setTitle(strip_tags(getRequest('topic_title')));

вставляем:
$oTopic->setAnonsContent(getRequest('topic_anonscontent'));

после строки (380 строка)
$oTopic->setTitle(strip_tags(getRequest('topic_title')));

вставляем:
$oTopic->setAnonsContent(getRequest('topic_anonscontent'));

В файле: templates/skin/synio/actions/ActionTopic/add.tpl
после:
<p><label for="topic_title">{$aLang.topic_create_title}:</label>
	<input type="text" id="topic_title" name="topic_title" value="{$_aRequest.topic_title}" class="input-text input-width-full" />
	<small class="note">{$aLang.topic_create_title_notice}</small></p>

вставить:
<p><label for="topic_anonscontent">{$aLang.topic_create_anons}:</label>
    <small class="note">{$aLang.topic_create_anons_notice}</small>
    <textarea rows="4" id="topic_anonscontent" name="topic_anonscontent" class="input-text input-width-full js-wall-reply-parent-text">{$_aRequest.topic_anonscontent}</textarea>
    </p>

В файле: templates/language/russian.php
добавим:
'topic_create_anons' => 'Анонс',
'topic_create_anons_notice' => 'Краткое описание, рекламный текст, 140 символов, который побуждает к прочтению топика. Отображается при поиске в поисковых системах и при добавлении в социальные сети',

2. Счетчик символов при заполнение и валидация

В файле: templates/skin/synio/actions/ActionTopic/add.tpl
после:
<script type="text/javascript">
		jQuery(document).ready(function($){
			ls.blog.loadInfo($('#blog_id').val());
		});
    </script>

вставить:
{literal}	<script type="text/javascript">
	jQuery(document).ready(function($){
		$("#topic_anonscontent").charCount({
			allowed: 140,		
			warning: 0
		});
	});
</script>
{/literal}	

В файле: classes/modules/topic/entity/Topic.entity.class.php
после строки (46 строка)
$this->aValidateRules[]=array('link_url','url','allowEmpty'=>false,'label'=>$this->Lang_Get('topic_link_create_url'),'on'=>array('link'));

вставить:
$this->aValidateRules[]=array('anonscontent','string','max'=>140,'min'=>100,'allowEmpty'=>false,'label'=>$this->Lang_Get('topic_create_anons'),'on'=>array('topic','link','photoset'));

В файле: classes/actions/ActionAjax.class.php
вместо строки (987 строка)
$oTopic->_Validate(array('topic_title','topic_text','topic_tags','topic_type'),false);

вставляем:
$oTopic->_Validate(array('topic_title','topic_anonscontent','topic_text','topic_tags','topic_type'),false);

3. Условие для страниц топиков

за решение третьего пункта спасибо AndreySuperstar
В файле: templates/skin/synio/header.tpl
вместо:
<meta name="description" content="{$sHtmlDescription}">

вставляем:
<meta name="description" content="{if !$oTopic}{$sHtmlDescription}{else}{$oTopic->getAnonsContent()}{/if}">

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

avatar
Можно сделать, если окно не заполнено, чтобы после сохранения выводилось автоматически сгенирированное описание? Как это сделано в плагине NiceURL с автозаполнением ссылки после сохранения: если ссылку не ввели, она автоматически добавляется уже после того, как топик сохранён.
avatar
В том и дело, что это поле обязательно к заполнению, смысл в нем, сделать рекламный текст для людей которые наткнулись при поиске в поисковиках, или в социальных сетях при просмотре стены у своих друзей или на странице проекта. А то сейчас получается первые 140 символов с начала текста которые обычно смысла не несут о чем топик.
Если бы можно было еще как-то переводить существующий рейтинг для того чтобы можно получить вот такую штуку
avatar
Они там всегда могут бред написать, лучше уже самому если что подправлять. Короче в статье неплохо бы написать два вариант, как сделать обязательное, а как сделать, если не заполнено автоматическое, чтобы добавлялось после сохранения.

Рейтинг schema.org. У них там сделано на странице вот так:
<div itemprop="aggregateRating" itemscope="" itemtype="http://schema.org/AggregateRating">цифра рейтинга
avatar
Полезная вещь. А плагином это оформить можно? А то будет обновление — придется опять искать и править чтобы восстановить работоспособность.
avatar
Как вывести это в шаблоне?
avatar
в файле header.tpl вашего шаблона, пункт №3 читаем.
avatar
Вначале хочу сказать спасибо за отличное и работающее решение!
В моем проекте я сомневаюсь, что пользователи будут заполнять это поле, поэтому предложил бы следующее решение.
1. Скрыть поле «анонс» для всех, кроме админа и сделать необязательным его заполнения (для того, чтобы иметь возможность самому его описывать и избавить пользователей от лишних действий).
2. Прописать в хедере, чтобы Анонс показывался, если он есть, в остальных случаях показывался description по умолчанию.

Что думаете, Bartol ?

п.с. возможно кто-то поможет реализовать 2ой пункт?
avatar
и еще вопрос, где будет хранится эта информация?
avatar
А редактирование у вас при этом работает?
avatar
каждый раз при редактировании топика необходимо было заново вводить дескрипшн (
avatar
Я ниже написал, что поправить.
avatar
благодарю, vdenu , жаль раньше не видел.
в общем-то из-за этого откатил все назад и купил seopremium )
avatar
В общем на всякий случай напишу. Для того, чтобы форма редактирования тоже работала корректно следует в файл classes/actions/ActionTopic.class.php так же добавить примерно в строку 786 или около того после
$_REQUEST['topic_title'] = $oTopic->getTitle();

строку
$_REQUEST['topic_anonscontent'] = $oTopic->getAnonsContent();

В топике об этом не написано.
avatar
Для установки HTML description и других заголовков для топика можно использовать этот плагин
  • ort
  • +1
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.