Есть как минимум 2 способа:
1. стандартными средствами цмс
2. с помощью хаков
1.1. для внутренних страниц создаешь шаблон, в котором помимо основного контента добавляешь контент превьюшки ({content block="short_desc"})
1.2. пишешь тэг пользователя (например, test) примерно такого содержания:
Code: Select all
global $gCms;
$allcontent =& ContentOperations::GetAllContent();
$list = array();
foreach ($allcontent as &$one) {
if ($one->mActive!=1) {
continue;
}
if ($one->FriendlyName() == 'Separator') {
continue;
}
if ($one->ParentId() == $params['parent']) {
$one->mProperties->Load($one->Id());
$url = $one->GetURL();
$url = substr($url, 0, 7) == 'http://' ? $url : '/' . $url;
$list[$one->Id()] = array(
'url' => $url,
'MenuText' => $one->MenuText(),
'Name' => $one->Name(),
'Title' => $one->TitleAttribute(),
'ShortDesc' => $one->GetValue('short_desc'),
);
}
}
$smarty =& $gCms->GetSmarty();
$smarty->assign('items', $list);
1.3. На странице вызываешь тэг {test parent='Здесь_id_родительской страницы'}
1.4. пишешь шаблон ко всему этому, например:
Code: Select all
<ol>
{foreach item=item from=$items}
<li><a href="{$item.url}">{$item.MenuText}</a><p>{$item.ShortDesc}</p>
{/foreach}
</ol>
Но в этом случае на страничке с полной статьей будет короткое описание, нужно придумать как его скрывать, если оно не нужно...
Ну или краткое описание вырезать из полного, тогда 'ShortDesc' => $one->GetValue('short_desc') заменяем на 'ShortDesc' => $one->GetValue('content_en') и обрезаем в шаблоне модификатором (если при помощи модификатора смарти truncate - то там могут быть проблемы, тк смарти использует стандартные функции работы со строками и в utf8 могут появиться вконце обрезки знаки вопроса. Я исправил это написав свой плагин для обрезки:
Code: Select all
function smarty_cms_modifier_tru($string, $length = 80, $etc = '...') {
if ($length == 0) {
return '';
}
$string = trim(preg_replace('!\s+!uis', ' ', strip_tags($string)));
if (strlen($string) > $length) {
$string = mb_substr($string, 0, $length+1, 'utf8');
$string = preg_replace('/\s(\S+)?$/u', '', $string);
return $string . $etc;
} else {
return $string;
}
}
). Тогда в шаблоне нужно писать: {$item.ShortDesc|tru}
2. В принципе то-же первый, только меняю вручную файл Content.inc.php - добавляю краткое описание, и поле для него. Подробнее, как это делается - уже писал на форуме. Преимущества: не обязательно создавать свой шаблон для внутрених страниц. Недостатки: при обновлении теряются все исправления.