SurfMoney.ru > Полезные статьи > Как сделать, чтобы в модулях lastnews и topnews обрабатывались дополнительные поля xfields
26 октября 2010. Разместил: krasavchegx

Как сделать, чтобы в модулях lastnews и topnews обрабатывались дополнительные поля xfields


Категория: Полезные статьи

На правах рекламы:  

Итак, рассказываю, такую инфу Вы вряд ли где-нибудь найдете, а я уверен понадобиться она многим.

Для обработки дополнительных полей в модуле topnews нужно:
1. Откройте файл /engine/modules/topnews.php;
2. Найдите строку, начинающуюся на
$db->query( "SELECT id, title, date, alt_name, category, flag FROM "...

перед ней вставьте
$tpl->load_template('topnews.tpl');
$xfields = xfieldsload();

3. Найдите строку
else $title = $row['title'];

и после нее вставьте
if( strpos( $tpl->copy_template, "[xfvalue_" ) !== false ) {
            
            $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 );
            }
        }

4. Далее заменяем строки
$link = "<a href=\"" . $full_link . "\">" . stripslashes( $title ) . "</a>";
        
$topnews .= "&raquo; " . $link . "<br />";

на таки строки
$go_page = ($config['ajax']) ? "onclick=\"DlePage('newsid=".$row['id']."'); return false;\" " : "";

$tpl->set_block("'\[full-link\](.*?)\[/full-link\]'si", "<a {$go_page}href=\"".$config['http_home_url'] . $row['id'] . "-" . $row['alt_name'].".html\" title=\"" . $title . "\">\\1</a>");

$tpl->set('{title}', stripslashes($title));
$tpl->compile('topnews');

5. Заменяем строки
$db->free();
create_cache( "topnews", $topnews, $config['skin'] );

на такую строку
$topnews = $tpl->result['topnews'];

6. topnews.php сохраняем и закрываем;
7. В папке с шаблоном создаем файл topnews.tpl с помощью блокнота, т.е. создайте сначала текстовый файл, а потом переименуйте его в topnews.tpl. Далее измените содержание этого файла, чтобы получилось примерно следующее:
[full-link][xfvalue_pole1]{title} ([xfvalue_pole2])[/full-link]

теги [full-link]...[/full-link] ограничивают ссылку на новость, нажав на которую посетитель будет попадать, как в нашем примере, в одну из ТОП-новостей. Т.е. все что будет между тегами [full-link]...[/full-link] будет являться ссылкой на новость, можно вставлять картинки, текст и т.п.
В данном примере мы допустили, что у нас уже есть два дополнительных поля pole1 и pole2, которые используются в новостях, к примеру, в поле pole1 идет тип новости, а в pole2 - город автора, так вот в нашем примере если мы оставим содержание topnews.tpl таким, то в блоке {topnews} будет выводится ссылка, в которой будут содержаться и тип новости (pole1), и название (title), и город автора (pole2) в таком виде:
тип новости название новости (город автора)


Оформлять вывод новости можно как угодно, делайте это в файле topnews.tpl, в файл шаблона main.tpl не забывайте вставлять тег {topnews} для вывода блока topnews.

Для обработки дополнительных полей в модуле lastnews нужно (я рассматриваю модуль lastnews версии 2.1, в стандартной версии движка его нет, так что заранее внедрите его в движок):
1. Откройте файл /engine/modules/lastnews.php;
2. Найдите строку
$tpl->load_template('lastnews.tpl');

ниже вставьте
$xfields = xfieldsload();

3. Найдите строку
$preg_safe_name = preg_quote( $value[0], "'" );

ниже вставьте
        if( strpos( $tpl->copy_template, "[xfvalue_" ) !== false ) {
            
            $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 );
            }
        }

4. Сохраните и закройте файл lastnews.php.

Вот и все измения модуля lastnews для того, чтобы выводились дополнительные поля в этом блоке. Файл lastnews.tpl уже есть в шаблонах, просто изменяйте его как хотите, вставляйте теги дополнительных полей и оформляйте этот блок по своему усмотрению.



Вернуться назад