Регистрация

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

TipTop 27-02-2010, 23:35 3743 Хаки DLE

Добавляем тег "[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

Другие публикации по категории:

Видеоплеер joomla для Dle

Хак для DLe ТОП-ЮЗЕР и репутация

Хак Отдельный шаблон для закреплённых новостей

Полный пакет модулей Социальная Сеть (2009) на DLE 8.2

Ошибка массовой загрузки изображений с кириллическими символами в названии


Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Powered by Dleshka.org. Сайт предназначен для выбора шаблонов и дополнений с использованием CMS DataLife Engine.
Закрыть