<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Форум АлаичЪ'а о SEO - Как сделать свой модуль из готового кода]]></title>
	<link rel="self" href="https://talk.alaev.info/feed/atom/topic/1036/" />
	<updated>2013-12-22T06:07:45Z</updated>
	<generator>PunBB</generator>
	<id>https://talk.alaev.info/topic/1036/</id>
		<entry>
			<title type="html"><![CDATA[Как сделать свой модуль из готового кода]]></title>
			<link rel="alternate" href="https://talk.alaev.info/post/7609/#p7609" />
			<content type="html"><![CDATA[<p>Всем привет, хочу сделать модуль для DLE не зная php <img src="https://talk.alaev.info/img/smilies/smile.png" width="15" height="15" alt="smile" /> Суть в следующем: есть сторонний скрипт который работает, хочу интегрировать его в DLE, скрипт простой, состоит из нескольких файлов. Например у меня есть готовая заготовка от пафнутия:</p><div class="codebox"><pre><code>&lt;?php

/**
 * НазваниеМодуля - Пример реализации простого модуля для DLE с кешированием и подключением собственных шаблонов вывода.
 * =======================================================
 * Автор:    Юзернейм 
 * URL:      http://site.ru/
 * ICQ:         111222 
 * email:    username@site.ru
 * =======================================================
 * Файл:  название.этого.файла.php
 * -------------------------------------------------------
 * Версия: X.X.X (01.01.2013)
 * =======================================================
 */

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

if (!defined(&#039;DATALIFEENGINE&#039;)) die(&quot;Go fuck yourself!&quot;);

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

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

$myConfig = array(
    // Имя пользователя
    &#039;userName&#039; =&gt; $userName,

    // ID категории новости
    &#039;catId&#039;    =&gt; !empty($catId) ? $catId : &#039;1&#039;,

    // Шаблон, через который будет выведено содержимое модуля
    &#039;template&#039; =&gt; !empty($template) ? $template : &#039;default&#039;,

    // Префикс кеша - довольно важная настройка, если нужно автоматически очищать кеш при определённых событиях (как правило достаточно префикса 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        - при удалении новости
     */
    &#039;cachePrefix&#039; =&gt; !empty($cachePrefix) ? $cachePrefix : &#039;news&#039;,

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

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

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

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

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

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

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

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

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

        $tpl-&gt;set(&#039;{tag_name}&#039;, $count);

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

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

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

// Выводим результат работы модуля
echo $myModule;
?&gt;</code></pre></div><p>Вот это один из файлов стороннего скрипта, этот файл выводит список забаненых пользователей из бд:</p><div class="codebox"><pre><code>&lt;?php
   if (!defined(&quot;IN_OS&quot;) )
     {header(&#039;HTTP/1.1 404 Not Found&#039;);die;}
     
    if ($WarnAndExpireDate == 1) $sqlWarn = &quot; AND warn = 0 &quot;;  
    else $sqlWarn = &quot;&quot;;
    
     $order = &#039;id&#039;; $sort = &#039;DESC&#039;;
     
     if (isset($_GET[&quot;search&quot;]) AND strlen($_GET[&quot;search&quot;])&gt;=2 ) {
     $search = trim(safeEscape($_GET[&quot;search&quot;]));
     $sqlSearch = &quot;AND name = &#039;&quot;.$search.&quot;&#039;&quot;;
     $SearchValue = $search; 
     } else { $sqlSearch= &quot;&quot;;  $SearchValue = L_SEARCH_BANS;  }
    
     $result = $db-&gt;query(&quot;SELECT COUNT(*) FROM ltd_bans WHERE id&gt;=1 $sqlWarn $sqlSearch LIMIT 1&quot;);
     $r = $db-&gt;fetch_row($result);
     $numrows = $r[0];
     $result_per_page = $bans_per_page;
     $draw_pagination = 0;
     include(&#039;pagination.php&#039;);
     $draw_pagination = 1;
     
     $result = $db-&gt;query(&quot;SELECT * FROM ltd_bans WHERE id&gt;=1 AND context = &#039;ttr.cloud&#039; $sqlSearch $sqlWarn ORDER BY $order $sort 
     LIMIT $offset, $rowsperpage&quot;);
     
    $drawTable= &quot;header&quot;;
    include(&quot;themes/&quot;.$default_style.&quot;/bans.php&quot;);
    
    $drawTable= &quot;body&quot;;
    $c=0;
    $Data = array();
    while ($row = $db-&gt;fetch_array($result,&#039;assoc&#039;)) {
    //Build array data for bans
    $Data[$c][&quot;name&quot;]     = trim($row[&quot;name&quot;]);
    $Data[$c][&quot;reason&quot;]   = convEnt2(trim(stripslashes($row[&quot;reason&quot;]))); 
    $Data[$c][&quot;gamename&quot;] = (trim($row[&quot;gamename&quot;]));
    $Data[$c][&quot;date&quot;]     = date($date_format,strtotime($row[&#039;date&#039;]) );
    $Data[$c][&quot;admin&quot;]    = trim($row[&quot;admin&quot;]);
    $c++;
    }
    include(&quot;themes/&quot;.$default_style.&quot;/bans.php&quot;);
    $db-&gt;free($result);
    
    if (isset($_GET[&quot;page&quot;]) AND is_numeric($_GET[&quot;page&quot;]) ) $MetaTitle = &quot; | Page &quot;.$_GET[&quot;page&quot;]; 
    else  $MetaTitle = &quot;&quot;;
    setMeta (&quot;Bans $MetaTitle&quot;, &quot;$SiteName Bans $MetaTitle&quot;, &quot;bans, leavers, games, dota games&quot;, 
    &quot;Bans&quot;, &quot;article&quot;, $website.&quot;games/&quot;, &quot;bans, games, dota games&quot;, $SiteLogo, $SiteName);

    $drawTable= &quot;footer&quot;;
    include(&quot;themes/&quot;.$default_style.&quot;/bans.php&quot;);    
    include(&#039;pagination.php&#039;);
?&gt;</code></pre></div><p>Скажи пожалуйста как эти два кода объеденить что бы получился модуль DLE <img src="https://talk.alaev.info/img/smilies/smile.png" width="15" height="15" alt="smile" /></p>]]></content>
			<author>
				<name><![CDATA[Artyom91]]></name>
				<uri>https://talk.alaev.info/user/68/</uri>
			</author>
			<updated>2013-12-22T06:07:45Z</updated>
			<id>https://talk.alaev.info/post/7609/#p7609</id>
		</entry>
</feed>
