Dleshka.org
Авторизация

Хак Добавляем тег "[not-xfgiven_...]" для работы с дополнительными полями

+7
TipTop 27-02-2010 Хаки DLE 0 комментариев
Добавляем тег "[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
Информация
Зарегистрируйтесь чтобы комментировать публикацию.
Авторизация