Появилась идея - сделать так, чтобы при отсутствии перевода у новости, выводилось ее не переведенное содержимое из {short-story} или {full-story}.
Я решил сделать тег, который бы действовал аналогично тегам [not-aviable=...][/not-aviable] но для дополнительных полей.
Представляю вашему вниманию хак по добавлению тега "[not-xfgiven_...] ... [/not-xfgiven]"
Итак, нам надо будет сделать одинаковые изменения в трех файлах движка:
/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( emptyempty( $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( emptyempty( $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: <div id="post">
<div id="post-info-bg"><!-- --></div>
<div id="post-info-mid"><div class="post-title">[full-link] [xfgiven_title_en][xfvalue_title_en][/xfgiven_title_en] [not-xfgiven_title_en]{title}[/not-xfgiven_title_en][/full-link]</div>
<div class="post-category">{link-category}</div>
</div>
<div id="post-info-bg"><!-- --></div>
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td class="post-story">[xfvalue_shortstory_en][not-xfgiven_shortstory_en]ru:{short-story}[/not-xfgiven_shortstory_en]</td>
</tr>
</table>
<div class="post-data">
{date} [edit] [edit] [/edit]
<div style="float:right; color=#CA5829; padding-bottom:10px;">
[full-link]<strong>Read more »</strong>[/full-link]
</div>
</div>
</div>
<br>