• Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: Dimitro, LightInDarkness  
Форум » Web раздел » Web форум » [Manual] Создаём модули для DLE
[Manual] Создаём модули для DLE
Mago_De_Sombra
Маршал
В последнее время слишком много школьников напрягают мою аську и меня вместе с ней вопросом "как ты в dle вшил модуль?". Я, безусловно, понимаю, что таким людям гуглить некамильфо, и что им проще покапать на мозги другим, нежели сделать самому.
Первый и последний раз я что-то делаю за других, но это, так сказать, жест отчаяния.

Приступим к делу:
У вас есть сайт на DLE, в который вы, к примеру, хотите присабачить модуль "статус сервера" и вывести его на главной странице.
Открываем текстовый файлик, копипастим в него след. код:

Code
<?php
if( ! defined( 'DATALIFEENGINE' ) ) die( "Hacking attempt!" );        
$fp = @fsockopen(SHOST, SPORT, $errno, $errstr, 5);        
$status=($fp?"<font color='green'>работает</font>":"<font color='red'>отключен</font>");
       $szStatus = <<<HTML
Статус сервера - {$status}
HTML;

           $tpl->result['content'] = $szStatus;       
?>


Сохраняем его под именем status.php и закидываем в папку /engine/modules
Далее нам необходимо открыть файл index.php и найти

Code
define ( 'ENGINE_DIR', ROOT_DIR . '/engine' );


Ниже добавить

Code
require_once ENGINE_DIR . '/modules/status.php';


Найти

Code
$tpl->set ( '{headers}', $metatags."\n".build_js($js_array, $config) );


Ниже добавить

Code
$tpl->set('{status}', $szStatus);


Всё, дальше нам будет необходимо только вставить {status} в шаблон на то место, где мы хотим его видеть. smile

************************************************************************************************

Но как быть, если под ваши нужны нужна целая страница? Например, вы хотите отобразить PvP рейтинг.

начало процесса аналогично прошлому модулю. То есть мы создаём файлик pvp.php с содержимым:

Code
<?php

/**
       * @author Desperado
       * @copyright 2010
       */
             
        if( ! defined( 'DATALIFEENGINE' ) ) die( "Hacking attempt!" );        
              
       define ( 'ROOT_DIR', dirname ( __FILE__ ) );
               
          $sMySql = mysql_connect($ip, $userdb, $passw);
            mysql_query("SET NAMES $encoding");
              
          $aSql =  mysql_query("SELECT c.name, c.totalHonorPoints, c.class, c.totalKills, c.chosenTitle, a.gmlevel
                         FROM characters.characters c
                         INNER JOIN realmd.account a ON a.id = c.account
                         WHERE a.gmlevel =0
                         ORDER BY c.totalKills DESC       
                         LIMIT 0 , 71", $sMySql);

            $szContent .= "<br /><table width='98%' border='1' align='center'><tr>       
<td align='center' width='20%'><b><font color='green'>Персонаж</font></b></td>
<td align='center' width='20%'><b><font color='green'>Класс</font></b></td>
<td align='center' width='15%'><b><font color='green'>Очки чести</font></b></td>
<td align='center' width='15%'><b><font color='green'>Убийств</font></b></td>
<td align='center' width='25%'><b><font color='green'>Ранг</font></b></td>            
</tr></table>";        
                  
          while ($row = mysql_fetch_array($aSql))                      
                    {       
                       $show_name = $row['name'];
                       $show_totalHonorPoints = $row['totalHonorPoints'];
                       $show_totalKills = $row['totalKills'];
                       $show_class = $class[$row['class']];
                       $show_pvp = $pvp[$row['chosenTitle']];                     

            $szContent .= "<table width='98%' border='1' align='center'><tr>
<td align='center' width='20%'><a href='$armory_link$show_name' target ='_blank'>$show_name</td>
<td align='center' width='20%'>$show_class</td>
<td align='center' width='15%'>$show_totalHonorPoints</td>
<td align='center' width='15%'>$show_totalKills</td>
<td align='center' width='25%'>$show_pvp</td>            
</tr></table>";
                   }          
            $szContent  .= "<br><center><font color = 'red'><b>PvP Ранг отображается в случае выбора оного в профиле персонажа</b></font></center>";
                          
         $tpl->result['content'] = $szContent;                        
               
        mysql_close($sMySql);         
              
       ?>


Сохраняем его и кидаем в папку /engine/modules/

Далее отправляемся в папку /engine, ищем файл engine.php
Открываем его и ищем

Code
switch ( $do ) {


Ниже добавляем

Code
    case "pvp" :
        include ENGINE_DIR . '/modules/pvp.php';
        break;


Сохраняем и кидаем обратно. Всё готово. Теперь ваша страница будет доступна по адресу http://ваш сайт/index.php?do=pvp
Пример

От себя хочу добавить, что модуль пвп не завершён. В нём не хватает пары вещей, которые мне лично объяснять лень и пары массивов.
Во всех описанных модулях отсутсвует кеширование. Мне сейчас жутко впадлу объяснять как и для чего его делать. Быть может, в будущем, исправлю это недоразумение. Конечно, глядя на те гавносайты, что вы здесь творите, становится ясно, что у вас у всех мультипроцессорные сервера на базе топовых новинок и кеширование вам не нужно. Для остальных же позже напишу. smile

На тупорылые вопросы в теме не отвечаю. Всё написано довольно просто и понятно. smile
Удачи во всех начинаниях. Модеры, закрепите темку.

Добавлено "кеширование результатов"
Добавлен Список готовых модулей для сайтов WoW, использующих DLE 8x
Сообщение # 1 отредактировано Mago_De_Sombra - Четверг, 06.10.2011, 20:40
iceek
Центурион
Нормально обьяснил, если тут начнут вопросы помогите мне, это уже будит тупо )
Сообщение # 2 написано 11.06.2010 в 14:15
kefirok
всевластный молпродукт
Лучше бы статью по созданию кеширование написал. А то я разобраться немогу, как ни прескорбно.
Сообщение # 3 написано 11.06.2010 в 16:38
Mago_De_Sombra
Маршал
Сообщение # 4 написано 11.06.2010 в 18:57
Black11
Центурион
Mago_De_Sombra, молодец, помог + дам... happy
Сообщение # 5 написано 11.06.2010 в 22:09
Mago_De_Sombra
Маршал
здесь отписал принципы кеширования Дле модулей. Статья не закончена и будет добавляться по мере наличия свободного времени. smile
Если хотите уметь не только копипастить, но и понимать то, что копируете, спрашивайте и делитесь опытом на этом форуме. Ахтунг! Здесь на вопросы не отвечаю, ибо это мусорка.

Добавлено (12.06.2010, 15:30)
---------------------------------------------
класс для кеширования ваших гавносайтов smile

Code
<?php   

      /**   
      * @descr класс для работы с кешированием данных   
      * поддерживает как массив данных, так и простой текст.   
      * @author Dmitriy 'FlashBlack' Chubrick (d.chubrick@smartdesign.by)   
      * @param $szPath string путь до папки с кеш   
      * @param $nCacheLifeTime int время жизни кеш файла   
      */   

      class cacheClass {   
          private $Content = FALSE;   
          private $szPath;   
          private $nCacheLifeTime;    //время жизни файлов    

          /**   
          * @descr конструктор   
          * @param $szPath string путь к папке с кеш-файлами (на конце слеш (/) обязательно   
          * @param $nCacheLifeTime int время жизни кеш файла   
          */   

          function __construct($szPath, $nCacheLifeTime) {   
              $this->szPath = $szPath;   
              $this->nCacheLifeTime = $nCacheLifeTime;   
          }            

          /**   
          * @descr устанавливаем контент   
          * @param $content array\string контент, может быть как массив, так и текст   
          */   

          public function setContent($content) {   
              if ( ! $content) {   
     $this->Content = FALSE;   
     }   
              else {   
                  if (is_array($content)) {   
                      $this->Content = serialize($content);   
                  }   
                  else {   
                      $this->Content = $content;   
                  }   
              }   
          }   
             
          /**   
          * @descr получаем контент   
          * @return array\string   
          */   

          public function getContent() {   
              return $this->Content;   
          }           

          /**   
          * @descr функция для проверки, пора ли перезаписывать кеш, либо нет.   
          * @param $szFileName string кеш-индификатор   
          * @return boolean   
          */   

          public function checkForWrite($szFileName) {   
              $szCacheFileName = $this->szPath.$szFileName.'.cache';   
              if (file_exists($szCacheFileName)) {   
                  $nModifyTime = filemtime($szCacheFileName);   
                  if (($nModifyTime + $this->nCacheLifeTime) < time()) {   
                      return TRUE;   
                  }   
              }   
              else {   
                  return TRUE;   
              }   
              return FALSE;   
          }            

          /**   
          * @descr записываем кеш-индификатор с контентом getContent()   
          * @param $szFileName string название кеш-индификатора   
          */   

          public function writeCache($szFileName) {   
              $szCacheFileName = $this->szPath.$szFileName.'.cache';   
              if (file_exists($szCacheFileName)) {   
                  if ($this->checkForWrite($szFileName)) {   
                      file_put_contents($szCacheFileName, $this->getContent());   
                  }   
        }   
              else {   
                  file_put_contents($szCacheFileName, $this->getContent());   
              }   
          }            

          /**   
          * @descr читаем кеш-индификатор   
          * @return array\string   
          */   

          public function readCache($szFileName) {   
              $szCacheFileName = $this->szPath.$szFileName.'.cache';   
              $szContent = file_get_contents($szCacheFileName);   
              if ( is_array(@unserialize($szContent)) ) {   
                  return unserialize($szContent);   
              }   
              else {   
                  return $szContent;   
              }   
          }   
      }   
?>
Сообщение # 6 отредактировано Mago_De_Sombra - Суббота, 12.06.2010, 15:31
Nico
Сержант
Очень полезно!

Гммм, to Desperado опять заморочки с твоим кодом, ругаешь наши говносайты хотя в деме сайт грузит дольше чем например мой-же http://www.nicosoft.ru/
Но проблема опять же не в говносайте а в твоём говнокоде angry

Сообщение # 7 отредактировано Nico - Вторник, 22.06.2010, 04:43
Mago_De_Sombra
Маршал
чё сказали?
скорость загрузки сайта и его нагрузка на сервер - разные вещи.
Скорость загрузки зависит от хостинга, от факторов соединения, от количества js, css, html, картинок на сайте.
будте так добры, не пишите в этой теме свои дауно мысли. wink

Если у вас есть заморочки с моим кодом, то можете пойти застрелиться. Вам не дано заниматься ничем, кроме ананизма.

Сообщение # 8 отредактировано Mago_De_Sombra - Вторник, 15.06.2010, 15:31
SaLeM
Капрал
Mago_De_Sombra, ты мегопиписко за оскорбления, но пасибо за модули!:)
Сообщение # 9 написано 15.06.2010 в 21:05
Adkot
Скаут
Mago_De_Sombra ... спс за помощ о выводе статистики в DLE..)) а как будет выглядеть скрипт кол во онлайна ... чтоб не просто было включен сервер или выключен
Сообщение # 10 написано 20.06.2010 в 14:28
Mago_De_Sombra
Маршал
так создавайте по аналогии.
Ничего сложного в этом нет

я показывал общую схему создания, а не делал за вас модули. wink

Сообщение # 11 написано 20.06.2010 в 17:15
Adkot
Скаут
попробовал вставить вот такой скриптик (status.php)
Code

<?php
if( ! defined( 'DATALIFEENGINE' ) ) die( "Hacking attempt!" );          
$realms = array(
         '1' => array('root', 'root', 'localhost', 'characters', 'realmd', 'port'),
);
?>
<style>
d.tt span{ display:none;}
d.tt:hover{ position:relative; z-index:23; }
d.tt:hover span{ display:block; position:absolute; top:-10px; left:80px; z-index:22; background:#fafafa; }
</style>
<?php
echo "<center>";
for ($i=1; $i<=count($realms); $i++){
         $conn = mysql_connect($realms[$i][2],$realms[$i][0],$realms[$i][1]) or die(exit());
             mysql_select_db($realms[$i][3]) or die(exit());         
         $online=mysql_num_rows(mysql_query("SELECT NULL FROM `characters` WHERE `online`='1'"));
         $chardb=mysql_num_rows(mysql_query("SELECT NULL FROM `characters`"));
         $guilddb=mysql_num_rows(mysql_query("SELECT NULL FROM `guild`"));
         $arenadb=mysql_num_rows(mysql_query("SELECT * FROM `arena_team`"));
         $alliance=mysql_num_rows(mysql_query("SELECT NULL FROM `characters` WHERE `race` IN ('1', '3', '4', '7','10') AND `online`='1'"));
         $horge=mysql_num_rows(mysql_query("SELECT NULL FROM `characters` WHERE `race` IN ('2', '5', '6', '8','11') AND `online`='1'"));
             mysql_select_db($realms[$i][4]) or die(exit());
         $realmname=mysql_fetch_array(mysql_query("SELECT name FROM `realmlist` WHERE `id`='".$i."'"));
         $accdb=mysql_num_rows(mysql_query("SELECT * FROM account"));
         echo "<b>Статистика<br>серверов:</b><br><d class='tt'><b>Realm ".$realmname['name']."</b>:";
         $fp = @fsockopen ($realms[$i][2],$realms[$i][5],$errno,$errstr, 0.5);
             if ($fp){      
                 print "<img src='./images/online.png'>";      
             } else {
                 print "<img src='./images/offline.png'>";      
             }
         @fclose($fp);
         echo "<span><table><tr><td>Статистика</td><td>сервера</td></tr>
         <tr><td>Общий online</td><td>".$online."</td></tr>
         <tr><td>Альянс</td><td>".$alliance."</td></tr>
         <tr><td>Орда</td><td>".$horge."</td></tr>
         <tr><td>Аккаунтов</td><td>".$accdb."</td></tr>
         <tr><td>Персоонажей</td><td>".$chardb."</td></tr>
         <tr><td>Гийльдий</td><td>".$guilddb."</td></tr>
         <tr><td>Арена-тим</td><td>".$arenadb."</td></tr>
                 </table></span></d><br>";
mysql_close();
}
echo "</center>";
?>

только не могу сообразить как вывести эту статистику в блок сбоку....... он отображается у меня сверху шапки сайта


и спасибо за тему очень нужная.... искал не мог найти нигде по выводе статистики в DLE
Сообщение # 12 отредактировано Adkot - Понедельник, 21.06.2010, 04:57
Mago_De_Sombra
Маршал
Сообщение # 13 написано 21.06.2010 в 07:36
Adkot
Скаут
тема конечно неплохая но думаю скопированная с других источников .....какой смысл выкладывать и писать читай первый пост..проще ответить выложил то что знаю на больше не способен))
Сообщение # 14 написано 21.06.2010 в 09:31
Sorvanec
Капрал
Молодца кульно описал, нужную вещь. Спасиб!!!
------------------------------------------------------------------------------------
Для кого баги, а кому исходные данные ...

Приглашу на Офф сервер! Помощь в игре!
Мой перс.
Сообщение # 15 написано 21.06.2010 в 09:46
Chinik
Рыцарь
А как быть с модулем регистрации ???
Сообщение # 16 написано 21.06.2010 в 10:32
Mago_De_Sombra
Маршал
Quote (Adkot)
тема конечно неплохая но думаю скопированная с других источников .....какой смысл выкладывать и писать читай первый пост..проще ответить выложил то что знаю на больше не способен))

Материал писался лично мной. Если вы нихрена не знаете, то не стоит судить так всех.

Quote
А как быть с модулем регистрации ???

Аналогично. Подключаете шблонизатор и всё.

Сообщение # 17 написано 21.06.2010 в 15:17
snakes
Командир
вот бы еще регу общую
Сообщение # 18 написано 21.06.2010 в 18:24
Mago_De_Sombra
Маршал
smile в чём проблема?
ищите класс регистрации и редактируете под свои нужды.
Сообщение # 19 написано 21.06.2010 в 18:51
Adkot
Скаут
хорошее объяснение..... можно поставить то что написано.... люди спрашивают про другие возможности помощи никакой для чего же нужен форум --> тема наверно для того чтоб набить посты и и поднять репутацию (вернусь свой плюсик заберу) пользы маловато от этого .... пойду искать в других источниках может кто объяснит что да как....
Сообщение # 20 отредактировано Adkot - Понедельник, 21.06.2010, 23:51
Mago_De_Sombra
Маршал
ога, вперёд.

Я объяснил как делатьв первом сабже. Не понимаете, ну что ж... вовжопа) и этим всё сказано. smile

Сообщение # 21 написано 22.06.2010 в 02:06
Adkot
Скаут
вообще то за эти обьяснения я поставил плюсик мне всё понравилось и не только мне..... всё ставится работает отображается ....... если не в силах или не знаете как ответить на вопросы второстепенные не нужно портить репутацию другим ...... КОПИ ПАСТЫ темы говорят сами за себя выдирать темы с других источников может любой ...... а вот ответить как всё работает может только истинный создатель данной темы ...... никогда человек не будит писать идиотизм в плане того что На тупорылые вопросы в теме не отвечаю. Всё написано довольно просто и понятно
для того и нужен форум тема создание модулей DLE ...... только в помощи создать что то похожее я не увидел в этой теме как для себя так и для некоторых......
Сообщение # 22 отредактировано Adkot - Вторник, 22.06.2010, 04:28
Mago_De_Sombra
Маршал
будет, если не хочет заниматься идиотизмом, в стиле объяснения идиотам, котоые не могуь сообразть разницу в 2х строках. wink

Quote
только в помощи создать что то похожее я не увидел в этой теме как для себя так и для некоторых

а где я сказал, что буду делать что-то для вас? Учите мануалы и "творите". Я не виноват, что вы нихрена не знаете и делать за вас ничего не собираюсь. Кстати, судя по гавнокоду, который вы опубликовали на моём форуме, объяснять вам вобще бесполезно. Вы даже основ не знаете.

Так что, уважаемый товарищ школьник: здесь я вам ничего не должен и заканчивайте брать меня на понт. Не нравится что-то - вон нахер с темы. Кака вариант, поищите проблему в себе и всё станет понятно wink

Сообщение # 23 отредактировано Mago_De_Sombra - Вторник, 22.06.2010, 07:33
Adkot
Скаут
мда.... зря я увидел эту тему .... Огорчительно что человек создавший её ничего не смыслет в двигах ... тем более в DLE ....... проще поспрашивать у сторонних разработчиков ........
Сообщение # 24 отредактировано Adkot - Вторник, 22.06.2010, 09:43
Mago_De_Sombra
Маршал
вали и спрашивай.
А "ничего не смыслящий" человек как-нибудь переживёт потери отсутсвия признания у нубов вовжопы
Сообщение # 25 написано 22.06.2010 в 15:17
Impulse[DK]
Рыцарь
Adkot, он не говорил, что сделает все за тебя(меня, нас, вас). Десперадо правильно делает, ведь те у кого мозг хоть на чучуть работает сами допрут как сделать. Ну а тех до кого не доперло - значит заниматься сайтами не их дело.
371 штука кириллических шрифтов
Произвожу установку и настройку эмуляторов типа MaNGOS и Trinity Core (работаю через Radmin и TeamViver)
Компиляция ядер с вашими патчами и на заказ.
Также изготовление разнообразной графики, дизайнов.
Установка всех видов CMS на ваш хостинг/сервер.
За ценами обращайтесь в ICQ 7629199 или Skype: ramzes3202
Сообщение # 26 написано 24.06.2010 в 13:07
AquaMarin
Скаут
Народ помагите как исправить эти ошибки:

Code
Warning: mysql_connect(): Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\xampp\htdocs\engine\modules\status.php on line 5 Warning: mysql_selectdb(): Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\xampp\htdocs\engine\modules\status.php on line 7 Warning: mysql_selectdb(): A link to the server could not be established in C:\xampp\htdocs\engine\modules\status.php on line 7 Warning: mysql_query(): Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\xampp\htdocs\engine\modules\status.php on line 8 Warning: mysql_query(): A link to the server could not be established in C:\xampp\htdocs\engine\modules\status.php on line 8 Warning: mysql_result() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\engine\modules\status.php on line 9 Warning: mysql_selectdb(): Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\xampp\htdocs\engine\modules\status.php on line 10 Warning: mysql_selectdb(): A link to the server could not be established in C:\xampp\htdocs\engine\modules\status.php on line 10 Warning: mysql_query(): Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\xampp\htdocs\engine\modules\status.php on line 11 Warning: mysql_query(): A link to the server could not be established in C:\xampp\htdocs\engine\modules\status.php on line 11 Warning: mysql_result() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\engine\modules\status.php on line 12 Warning: mysql_query(): Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\xampp\htdocs\engine\modules\status.php on line 13 Warning: mysql_query(): A link to the server could not be established in C:\xampp\htdocs\engine\modules\status.php on line 13 Warning: mysql_result() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\engine\modules\status.php on line 14 Warning: mysql_query(): Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\xampp\htdocs\engine\modules\status.php on line 15 Warning: mysql_query(): A link to the server could not be established in C:\xampp\htdocs\engine\modules\status.php on line 15 Warning: mysql_result() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\engine\modules\status.php on line 16 Warning: mysql_query(): Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\xampp\htdocs\engine\modules\status.php on line 17 Warning: mysql_query(): A link to the server could not be established in C:\xampp\htdocs\engine\modules\status.php on line 17 Warning: mysql_result() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\engine\modules\status.php on line 18 Аккаунтов:  
Персонажей:  
Альянса:  
Орды:  
Гильдий:  
Warning: mysql_connect(): Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\xampp\htdocs\engine\modules\pvp.php on line 12 Warning: mysql_query(): Access denied for user 'ODBC'@'localhost' (using password: NO) in C:\xampp\htdocs\engine\modules\pvp.php on line 13 Warning: mysql_query(): A link to the server could not be established in C:\xampp\htdocs\engine\modules\pvp.php on line 13 Warning: mysql_query() expects parameter 2 to be resource, boolean given in C:\xampp\htdocs\engine\modules\pvp.php on line 20 Warning: mysql_fetch_array() expects parameter 1 to be resource, null given in C:\xampp\htdocs\engine\modules\pvp.php on line 30 Warning: mysql_close() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\engine\modules\pvp.php on line 50 Загрузка. Пожалуйста, подождите...
Сообщение # 27 написано 29.06.2010 в 12:34
Adkot
Скаут
Я не просил делать что либо за меня ..... я всего лишь спросил в чём может быть моя ошибка или хотя бы как подправить вполне рабочий скрипт ........
Сообщение # 28 написано 29.06.2010 в 12:59
Mago_De_Sombra
Маршал
интересно, а это что?

Добавлено (01.07.2010, 00:23)
---------------------------------------------
для "некоторых" личностей сделал пару модулей для дле.
клац

Сообщение # 29 написано 01.07.2010 в 00:23
Atlantis
Чемпион
Mago_De_Sombra, скрипты не пашут модули умею устанавливать всё зделал как ты напесал главную старничу теперь не показывает
Сообщение # 30 написано 01.07.2010 в 22:46
Форум » Web раздел » Web форум » [Manual] Создаём модули для DLE
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: