Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) Модули Шаблон модуля выводиться вверху страницы

Шаблон модуля выводиться вверху страницы


     25.12.2013    Модули    1378

вопрос
Привет, делаю модуль, вывел шаблон, а он выводится в самом верху страницы, даже до Что не так?

Ответил: Sander


Подключать модуль надо не инклюдом в engine/init.php (или прочих), а в самом шаблоне:
{include file="engine/modules/имяФайла.php"}

Комментарии пользователей (10)

vitnet
218

2174 | 930

vitnet - 25 декабря 2013 11:51 - Эксперт

Ошибка в
// Выводим результат работы модуля
echo $tpl->result['war3Module'];
?>

// Выводим результат работы модуля
$tpl->compile('war3Module');
$tpl->result['war3Module'];
$tpl->clear();

?>

Artyom91
2

157 | 21

Artyom91 - 25 декабря 2013 12:40 - Юзер

Ну я заменил, сейчас ничего не выводит. Как указать echo?

vitnet
218

2174 | 930

vitnet - 25 декабря 2013 14:12 - Эксперт


Artyom91
2

157 | 21

Artyom91 - 25 декабря 2013 14:16 - Юзер

Не хочет что-то...

<?php
/**
* Модуль для вывода информации с сервера Warcraft 3 Ghost++
* =======================================================
* Автор:    Artyom91
* URL:      http://Артем91.рф/
* ICQ:         5605715
* email:    temkasd91@gmail.com
* =======================================================
* Файл:  war3.php
* -------------------------------------------------------
* Версия: 1.0 (25.12.2013)
* =======================================================
*/

// Главная строка.
// Без этой строчки любой пользователь может получить прямой доступ к файлу модуля и передать туда свои переменные, что чревато элементарным взломом сайта.

if (!defined('DATALIFEENGINE')) die("Go fuck yourself!");

$war3Module['title'] = "FAQ по сайту";

// Пример определения переменной имени пользователя
$userName = !empty($userName) ? $db->safesql(strip_tags(stripslashes($userName))) : false;

// Конфиг модуля
// Лучше делать массивом - тогда будет проще в нём ориентироваться в дальнейшем и не нужно будет добавлять новые переменные в формирование кеша.

$war3Config = array(
    // Имя пользователя
    'userName' => $userName,

    // ID категории новости
    'catId'    => !empty($catId) ? $catId : '1',

    // Шаблон, через который будет выведено содержимое модуля
    'template' => !empty($template) ? $template : 'war3',

    // Префикс кеша - довольно важная настройка, если нужно автоматически очищать кеш при определённых событиях (как правило достаточно префикса news)
    /**
     * Префиксы, наличие одного из которых гарантирует автоматическую очистку кеша при определённых условиях:
     * news, rss, comm                                             - при добавлении новости или комментария.
     * news, related, tagscloud, archives, calendar, topnews, rss  - при добавлении новости.
     * comm                                                        - при редактировании комментария.
     * news, rss                                                   - при редактировании новости, при выcтавлении рейтинга
     * news, full, comm, rss                                       - при массовом удалении комментариев
     * news, full, comm, tagscloud, archives, calendar, rss        - при удалении новости
     */
    'cachePrefix' => !empty($cachePrefix) ? $cachePrefix : 'news',

    // Суффикс кеша - если задать его, то бдет создаваться отдельные кеши для каждой группы пользователей.
    'cacheSuffix' => !empty($cacheSuffix) ? true : false,
    
);

// Имя кеш-файла.
// Формируется из md5 конфига - это самый оптимальный вариант, т.к. уменьшает количество ненужных операций.
$cacheName = md5(implode('_', $war3Config));

// Присваиваем переменной, выводящей работу модуля в шаблон, значение false перед началом работы модуля.
$war3Module = true;

// Пытаемся подцепить значение из кеша (если кеширование на сайте включено и если модуль создал кеш - будет выведено содержимое кеша)
$war3Module = dle_cache($war3Config['cachePrefix'], $cacheName.$config['skin'], $war3Config['cacheSuffix']);

if (!$war3Module) {
    // Если в кеше ничего нет - запускаем работу модуля    
    if(file_exists(TEMPLATE_DIR.'/'.$war3Config['template'].'.tpl')) {
        // Если файл шаблона модуля существует - работаем дальше

        // Проверяем определена ли переменная $tpl и класс dle_template
        if(!isset($tpl)) {
            $tpl = new dle_template();
            $tpl->dir = TEMPLATE_DIR;
        } else {
            $tpl->result['war3Module'] = '';
        }

        // Загружаем шаблон
        $tpl->load_template($war3Config['template'].'.tpl');

        // Выполняем нужный нам запрос в БД.
        $row = $db->super_query("SELECT COUNT(*) as count FROM " . PREFIX . "_post WHERE category = '".$war3Config['catId']."' AND autor = '".$war3Config['userName']."'");

        // Определяем теги шаблона
        $count = ($row['count'] > 0) ? $row['count'] : 'Забаненых пользователей нет';

        $tpl->set('{tag_name}', $count);

        // Компилим шаблон
        $tpl->compile('war3Module');
        // Записываем
        $war3Module = $tpl->result['war3Module'];

        // Записываем результат работы в кеш.
        create_cache($war3Config['cachePrefix'], $war3Module, $cacheName.$config['skin'], $war3Config['cacheSuffix']);
$tpl->result['war3Module'];
        $tpl->clear();
        
        
    } else {
        // Если файла с шаблоном модуля нет - скажем об этом юзеру в удобном виде, а не на фоне пустой белой страницы
        $war3Module = '<b style="color:red">Отсутствует файл шаблона: '.$config['skin'].'/'.$war3Config['template'].'.tpl</b>';
    }
}

$tpl->compile('war3Module');
$tpl->result['war3Module'];
$tpl->clear();

?>

Artyom91
2

157 | 21

Artyom91 - 25 декабря 2013 14:53 - Юзер

Ну кто мне скажет, весь шаблон модуля взят у Пафнутия, вот, изменено только название шаблона.

// Главная строка.
// Без этой строчки любой пользователь может получить прямой доступ к файлу модуля и передать туда свои переменные, что чревато элементарным взломом сайта.

if (!defined('DATALIFEENGINE')) die("Go fuck yourself!");

// Пример определения переменной имени пользователя
$userName = !empty($userName) ? $db->safesql(strip_tags(stripslashes($userName))) : false;

// Конфиг модуля
// Лучше делать массивом - тогда будет проще в нём ориентироваться в дальнейшем и не нужно будет добавлять новые переменные в формирование кеша.

$myConfig = array(
    // Имя пользователя
    'userName' => $userName,

    // ID категории новости
    'catId'    => !empty($catId) ? $catId : '1',

    // Шаблон, через который будет выведено содержимое модуля
    'template' => !empty($template) ? $template : 'war3',

    // Префикс кеша - довольно важная настройка, если нужно автоматически очищать кеш при определённых событиях (как правило достаточно префикса news)
    /**
     * Префиксы, наличие одного из которых гарантирует автоматическую очистку кеша при определённых условиях:
     * news, rss, comm                                             - при добавлении новости или комментария.
     * news, related, tagscloud, archives, calendar, topnews, rss  - при добавлении новости.
     * comm                                                        - при редактировании комментария.
     * news, rss                                                   - при редактировании новости, при выcтавлении рейтинга
     * news, full, comm, rss                                       - при массовом удалении комментариев
     * news, full, comm, tagscloud, archives, calendar, rss        - при удалении новости
     */
    'cachePrefix' => !empty($cachePrefix) ? $cachePrefix : 'news',

    // Суффикс кеша - если задать его, то бдет создаваться отдельные кеши для каждой группы пользователей.
    'cacheSuffix' => !empty($cacheSuffix) ? true : false,
    
);

// Имя кеш-файла.
// Формируется из md5 конфига - это самый оптимальный вариант, т.к. уменьшает количество ненужных операций.
$cacheName = md5(implode('_', $myConfig));

// Присваиваем переменной, выводящей работу модуля в шаблон, значение false перед началом работы модуля.
$myModule = false;

// Пытаемся подцепить значение из кеша (если кеширование на сайте включено и если модуль создал кеш - будет выведено содержимое кеша)
$myModule = dle_cache($myConfig['cachePrefix'], $cacheName.$config['skin'], $myConfig['cacheSuffix']);

if (!$myModule) {
    // Если в кеше ничего нет - запускаем работу модуля    
    if(file_exists(TEMPLATE_DIR.'/'.$myConfig['template'].'.tpl')) {
        // Если файл шаблона модуля существует - работаем дальше

        // Проверяем определена ли переменная $tpl и класс dle_template
        if(!isset($tpl)) {
            $tpl = new dle_template();
            $tpl->dir = TEMPLATE_DIR;
        } else {
            $tpl->result['myModule'] = '';
        }

        // Загружаем шаблон
        $tpl->load_template($myConfig['template'].'.tpl');

        // Выполняем нужный нам запрос в БД.
        $row = $db->super_query("SELECT COUNT(*) as count FROM " . PREFIX . "_post WHERE category = '".$myConfig['catId']."' AND autor = '".$myConfig['userName']."'");

        // Определяем теги шаблона
        $count = ($row['count'] > 0) ? $row['count'] : 'новостей нет';

        $tpl->set('{tag_name}', $count);

        // Компилим шаблон
        $tpl->compile('myModule');
        // Записываем
        $myModule = $tpl->result['myModule'];

        // Записываем результат работы в кеш.
        create_cache($myConfig['cachePrefix'], $myModule, $cacheName.$config['skin'], $myConfig['cacheSuffix']);

        $tpl->clear();
        
        
    } else {
        // Если файла с шаблоном модуля нет - скажем об этом юзеру в удобном виде, а не на фоне пустой белой страницы
        $myModule = '<b style="color:red">Отсутствует файл шаблона: '.$config['skin'].'/'.$myConfig['template'].'.tpl</b>';
    }
}

// Выводим результат работы модуля
echo $myModule;

Sander
1126

1637 | 1204

Sander - 25 декабря 2013 15:17 - Эксперт

Ну кто мне скажет

На ваш вопрос уже дан ответ. Ответ располагается непосредственно под вопросом, а не в комментариях.

SanDev.pro - мой блог.

ICQ: 404-037-556
Skype: Sander8804

Artyom91
2

157 | 21

Artyom91 - 25 декабря 2013 15:28 - Юзер

Sander, Я вставил после {content} строчку вывода модуля, убрал из файла модуля

echo $myModule;


Ничего не выводит, если вернуть:

echo $myModule;


то модуль выведется в двух местах, который я подключил после {content} и который выводится в самом верху страницы через

echo $myModule;

Sander
1126

1637 | 1204

Sander - 25 декабря 2013 16:03 - Эксперт

потому что модуль УЖЕ где-то подключен в php файлах через include или require или include_once или require_once.
Вспоминайте, где уже подключили или ищите и убирайте.

SanDev.pro - мой блог.

ICQ: 404-037-556
Skype: Sander8804

Artyom91
2

157 | 21

Artyom91 - 25 декабря 2013 16:17 - Юзер

Sander, Олег, я же говорю, вот код модуля:

// Главная строка.
// Без этой строчки любой пользователь может получить прямой доступ к файлу модуля и передать туда свои переменные, что чревато элементарным взломом сайта.

if (!defined('DATALIFEENGINE')) die("Go fuck yourself!");

// Пример определения переменной имени пользователя
$userName = !empty($userName) ? $db->safesql(strip_tags(stripslashes($userName))) : false;

// Конфиг модуля
// Лучше делать массивом - тогда будет проще в нём ориентироваться в дальнейшем и не нужно будет добавлять новые переменные в формирование кеша.

$myConfig = array(
    // Имя пользователя
    'userName' => $userName,

    // ID категории новости
    'catId'    => !empty($catId) ? $catId : '1',

    // Шаблон, через который будет выведено содержимое модуля
    'template' => !empty($template) ? $template : 'war3',

    // Префикс кеша - довольно важная настройка, если нужно автоматически очищать кеш при определённых событиях (как правило достаточно префикса news)
    /**
     * Префиксы, наличие одного из которых гарантирует автоматическую очистку кеша при определённых условиях:
     * news, rss, comm                                             - при добавлении новости или комментария.
     * news, related, tagscloud, archives, calendar, topnews, rss  - при добавлении новости.
     * comm                                                        - при редактировании комментария.
     * news, rss                                                   - при редактировании новости, при выcтавлении рейтинга
     * news, full, comm, rss                                       - при массовом удалении комментариев
     * news, full, comm, tagscloud, archives, calendar, rss        - при удалении новости
     */
    'cachePrefix' => !empty($cachePrefix) ? $cachePrefix : 'news',

    // Суффикс кеша - если задать его, то бдет создаваться отдельные кеши для каждой группы пользователей.
    'cacheSuffix' => !empty($cacheSuffix) ? true : false,
    
);

// Имя кеш-файла.
// Формируется из md5 конфига - это самый оптимальный вариант, т.к. уменьшает количество ненужных операций.
$cacheName = md5(implode('_', $myConfig));

// Присваиваем переменной, выводящей работу модуля в шаблон, значение false перед началом работы модуля.
$myModule = false;

// Пытаемся подцепить значение из кеша (если кеширование на сайте включено и если модуль создал кеш - будет выведено содержимое кеша)
$myModule = dle_cache($myConfig['cachePrefix'], $cacheName.$config['skin'], $myConfig['cacheSuffix']);

if (!$myModule) {
    // Если в кеше ничего нет - запускаем работу модуля    
    if(file_exists(TEMPLATE_DIR.'/'.$myConfig['template'].'.tpl')) {
        // Если файл шаблона модуля существует - работаем дальше

        // Проверяем определена ли переменная $tpl и класс dle_template
        if(!isset($tpl)) {
            $tpl = new dle_template();
            $tpl->dir = TEMPLATE_DIR;
        } else {
            $tpl->result['myModule'] = '';
        }

        // Загружаем шаблон
        $tpl->load_template($myConfig['template'].'.tpl');

        // Выполняем нужный нам запрос в БД.
        $row = $db->super_query("SELECT COUNT(*) as count FROM " . PREFIX . "_post WHERE category = '".$myConfig['catId']."' AND autor = '".$myConfig['userName']."'");

        // Определяем теги шаблона
        $count = ($row['count'] > 0) ? $row['count'] : 'новостей нет';

        $tpl->set('{tag_name}', $count);

        // Компилим шаблон
        $tpl->compile('myModule');
        // Записываем
        $myModule = $tpl->result['myModule'];

        // Записываем результат работы в кеш.
        create_cache($myConfig['cachePrefix'], $myModule, $cacheName.$config['skin'], $myConfig['cacheSuffix']);

        $tpl->clear();
        
        
    } else {
        // Если файла с шаблоном модуля нет - скажем об этом юзеру в удобном виде, а не на фоне пустой белой страницы
        $myModule = '<b style="color:red">Отсутствует файл шаблона: '.$config['skin'].'/'.$myConfig['template'].'.tpl</b>';
    }
}

// Выводим результат работы модуля
echo $myModule;


Вот в таком виде он выводится в самом верху страницы, до всех тегов. Вот вообщем (у меня по русскому языку двойка, я не знаю, что в русском языке не существует слова вообщем): http://hodovoi.ru/war/

Если модуль вывести в шаблоне после {content} строчкой {include file="engine/modules/war3.php"} то он выведется как надо, только вверху так же останется вывод который присутствует в php файле. Если этот вывод (echo) убрать, то исчезнет и то что вверху, и то что через шаблон.

vitnet
218

2174 | 930

vitnet - 25 декабря 2013 20:48 - Эксперт

Пробуйте в http://hodovoi.ru/war/

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

 11.05.2014 kolumb  Модули