Хак Добавляем тег "[not-xfgiven_...]" для работы с дополнительными полями
Описание: Хак, позволяющий выводить замещающий текст, если не заполнены дополнительные поля. Работает аналогично тегам "[not-group=...], [not-aviable=...]" и т.д.
По сути, если надо сделать так, чтобы при отсутствии текста в доп. поле, вместо него выводилось какое-то сообщение и т.д. - этот Хак будет самым простым решением этой проблемы.
Итак, нам надо будет сделать одинаковые изменения в трех файлах движка:
/engine/modules/show.custom.php
/engine/modules/show.short.php
/engine/modules/show.full.php
По очереди открываем каждый из них,
находим в каждом из них такой кусок кода:
// Обработка дополнительных полей
$xfieldsdata = xfieldsdataload( $row['xfields'] );
foreach ( $xfields as $value ) {
$preg_safe_name = preg_quote( $value[0], "'" );
if( empty( $xfieldsdata[$value[0]] ) ) {
$tpl->copy_template = preg_replace( "'[xfgiven_{$preg_safe_name}](.*?)[/xfgiven_{$preg_safe_name}]'is", "", $tpl->copy_template );
} else {
$tpl->copy_template = preg_replace( "'[xfgiven_{$preg_safe_name}](.*?)[/xfgiven_{$preg_safe_name}]'is", "1", $tpl->copy_template );
}
$tpl->copy_template = str_replace( "[xfvalue_{$preg_safe_name}]", stripslashes( $xfieldsdata[$value[0]] ), $tpl->copy_template );
}
// Обработка дополнительных полей
и заменяем его на такой:
// Обработка дополнительных полей
$xfieldsdata = xfieldsdataload( $row['xfields'] );
foreach ( $xfields as $value ) {
$preg_safe_name = preg_quote( $value[0], "'" );
if( empty( $xfieldsdata[$value[0]] ) ) {
$tpl->copy_template = preg_replace( "'[xfgiven_{$preg_safe_name}](.*?)[/xfgiven_{$preg_safe_name}]'is", "", $tpl->copy_template );
$tpl->copy_template = preg_replace( "'[not-xfgiven_{$preg_safe_name}](.*?)[/not-xfgiven_{$preg_safe_name}]'is", "1", $tpl->copy_template );
} else {
$tpl->copy_template = preg_replace( "'[xfgiven_{$preg_safe_name}](.*?)[/xfgiven_{$preg_safe_name}]'is", "1", $tpl->copy_template );
$tpl->copy_template = preg_replace( "'[not-xfgiven_{$preg_safe_name}](.*?)[/not-xfgiven_{$preg_safe_name}]'is", "", $tpl->copy_template );
}
$tpl->copy_template = str_replace( "[xfvalue_{$preg_safe_name}]", stripslashes( $xfieldsdata[$value[0]] ), $tpl->copy_template );
}
// Обработка дополнительных полей
В результате имеем возможность выводить определенный текст в том случае, если не заполнено определенное дополнительное поле.
В конкретно приведенном мною примере, он использовался для вывода русской версии новости, если отсутствует ее перевод, но выбран другой язык. (я делал многоязычную версию сайта путем перевода текстов и надписей на картинках в шаблоне, и добавлением доп. полей для иноязычного заголовка и текстов полной и короткой новостей)
Пример shortstory.tpl:
"post"
"post-info-bg"
"post-info-mid"class="post-title"
class="post-category"
"post-info-bg"
"0" cellspacing="0" border="0"
class="post-story"short-story}[/not-xfgiven_shortstory_en]
class="post-data" {date}
"float:right; color=#CA5829; padding-bottom:10px;" [full-link]Read more »[/full-link]
Автор: Apache