На главную | Бесплатные DLE модули | Бесплатные DLE шаблоны | Хаки для DLE | Платные DLE шаблоны | Платные DLE модули

Помогите сделать модуль с комментариями

Автор Тема: Помогите сделать модуль с комментариями  (Прочитано 3371 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Okain

  • Я ещё новичок
  • *
  • Сообщений: 5
  • Карма: 0
    • Просмотр профиля
Как подключить комментарии к модулю на основе этой статьи http://4dle.ru/2007/06/28/uchimsja_pisat_moduli_s_adminpanelju_dlja_dle.html

Kot

  • Крутой DLE-шник
  • ****
  • Сообщений: 351
  • Карма: 25
  • GauraStyle
    • Просмотр профиля
    • GauraStyle | Раскрутка, Продвижение, Редизайнинг, Оптимизация. Стоимость продвижения сайта. Описание услуг оптимизации. SEO-аудит. Подбор ключевых слов.
Ну статью нужно показывать, вернее процитировать, так как сайт 4дле в отрубоне и надолго.
 ;)
GauraStyle
Трудно переспорить бородатого старика,
Если у него в руках АК.

;)
Читайте Правила, тогда вопросы отпадут сами собой... И помните, правильно заданный вопрос, это уже половина ответа...

Okain

  • Я ещё новичок
  • *
  • Сообщений: 5
  • Карма: 0
    • Просмотр профиля
Сегодня я продолжу рассказывать о том, как написать модули для DataLife Engine. В этот раз мы научимся создавать модули с возможностью их управления через админпанель движка. Для этого мы возьмём за основу наш прошлый урок, где создавался простейший модуль, который выводил в контенте движка строку Hello world.
Напомню код модуля:

Цитировать
<?php
   $test = 'Hello world';

  /* Подгружаем шаблон */
     $tpl->load_template('test.tpl');
     $tpl->set('{test}', $test);
     $tpl->compile('content');
     $tpl->clear();
?>

Попробуем усложнить наш пример и сделать возможность редактирования вывода строки через админпанель. Для этого нам придётся немного подкорректировать файлы из прошлого урока.

Откроем файл engine/modules/test.php и увидим там следующее:

Цитировать
<?php
   $test = 'Hello world';

  /* Подгружаем шаблон */
     $tpl->load_template('test.tpl');
     $tpl->set('{test}', $test);
     $tpl->compile('content');
     $tpl->clear();
?>

заменяем все эти строки, на следующее:

Цитировать
<?php
require_once(ENGINE_DIR.'/data/config.test.php');
$txt        = $config_test['text'];
$txt_detail = $config_test['detail'];
$version    = $config_test['version'];

  /* Подгружаем шаблон */
     $tpl->load_template('test.tpl');
     $tpl->set('{txt}',        $txt);
     $tpl->set('{detail_txt}', $txt_detail);
     $tpl->set('{version}',    $version);
     $tpl->compile('content');
     $tpl->clear();
?>

Как видим, в данном модуле все переменные берутся из файла engine/data/config.test.php, и далее уже по известному сценарию мы подгружаем шаблон и производим замену переменных на их значения. В нашем случае будет производится три замены.
Файл engine/data/config.test.php на самом начальном этапе необходимо создать. Его содержимое может быть пустым и в дальнейшем при управление модулем через админпанель код файла engine/data/config.test.php будет генерироваться автоматически.
Теперь откроем шаблон прошлого урока test.tpl и увидим в нём следующее:

Цитировать
<html>
<body>
{test}
</body>
</html>

Заменим всё строки следующим:

Цитировать
<html>
<body>
{txt} - <i>{detail_txt}</i>
<p>Версия модуля: {version}</p>
</body>
</html>

На этом можно считать, что фундамент построен и можно двигаться дальше. Займёмся созданием панели администрирования. Для этого откроем файл engine/inc/options.php и увидим в нём двумерный массив $options. Этот массив отвечает за формирования разделов в админпанели движка.

Цитировать
$options['config'] – отвечает за разделы в блоке «Настройки скрипта»
$options['user'] – отвечает за разделы в блоке «Управление пользователями»
$options['templates'] – отвечает за разделы в блоке «Управление шаблонами»
$options['filter']  – отвечает за разделы в блоке «Управление фильтрами»
$options['others'] – отвечает за разделы в блоке «Другие разделы»

Я предпочитаю размещать все сторонние модули в массиве

Цитировать
$options['others']

Не отступлю я от своих принципов и сегодня. Как можно видеть в массиве

Цитировать
$options['others']

уже есть некоторые разделы:

Цитировать
array(
'name'       => $lang['opt_static'],
'url'          => "$PHP_SELF?mod=static",
'descr'      => $lang['opt_staticd'],
'image'         => "spset.png",
'access'     => "1",
),

array(
'name'       => $lang['opt_banner'],
'url'           => "$PHP_SELF?mod=banners&action=list",
'descr'       => $lang['opt_bannerc'],
'image'      => "ads.png",
'access'     => "1",
),

Добавим к ним свой собственный, но для начала разберёмся в структуре массива раздела.

Цитировать
array(
'name'       - Переменная, отвечающая за название раздела
'url'           - Переменная, отвечающая за ссылку на раздел
'descr'       - Переменная, отвечающая за описание раздела
'image'     - Переменная, отвечающая за картинку раздела
'access'     - Переменная, отвечающая за доступ к разделу
),

Теперь можно создать и наш собственный раздел

Цитировать
array(
'name'      => 'Тест',
'url'          => "$PHP_SELF?mod=test_adm",
'descr'      => 'Настрйка модуля тест',
'image'     => "test.png",
'access'     => "1",
),

Теперь, если вы зайдёте в админпанель, то увидите в категории «Другие разделы» и ваш, только что созданный тестовый раздел. Одно но, иконка не отображается, и красный крест вместо неё мало радует глаз. А в чём проблема, давайте зайдём в папку engine/skins/images и загрузим туда любую иконку, которая вам нравится, и назовём её test.png. Желательно чтобы её размеры были 48*48, тогда, в админпанели будет царить гармония и симметрия. С разделом вроде разобрались, теперь сделаем возможным вход в данный раздел в админпанели, для этого нужно открыть доступ на файл администрирования, который мы пока не создали, но для дальнейших действий данный шаг является первоочередным. Итак, открываем файл admin.php любым текстовым редактором и видим там массив

Цитировать
$system_modules

Без тени сомнения добавляем туда и наш будущий файл администрирования модуля test_adm, а если быть более точным, вам необходимо добавить строку

Цитировать
'test_adm'=> 'admin'

Данная строка показывает, что файл test_adm.php будет доступен только админам. На этом мы разобрались со всеми доступами и можем приступить к созданию файла администрирования, о котором уже столько было сказано.
Итак, заходим в папку engine/inc и создаём там файл test_adm.php. Открываем данный файл в текстовом редакторе и добавляем туда следующий текст:

Цитировать
<?php
/* Подключаемые файлы */
require_once(ENGINE_DIR.'/inc/test.functions.php');
require_once(ENGINE_DIR.'/data/config.test.php');

/**
* Сохранение настроек модуля
*/
if ($action == "dosave") {
    $find[]     = "'\r'";
    $replace[]  = "";
    $find[]     = "'\n'";
    $replace[]  = "";

if ($member_db[1] != 1) {
    msg ("error", $lang['opt_denied'], $lang['opt_denied']);
}
$handler = @fopen(ENGINE_DIR.'/data/config.test.php', "wb");
fwrite ($handler, "<?php \n\n//Test configurations
                         \n\n\$config_test = array(
                         \n\n'version' => \"v.1.0\",\n\n");

foreach ($save_con as $name => $value) {   
    $value = trim(stripslashes ($value));
    $value = htmlspecialchars  ($value, ENT_QUOTES);
    $value = preg_replace($find, $replace, $value);
    fwrite($handler, "'{$name}' => \"{$value}\",\n\n");
}
   
fwrite($handler, ");\n\n?>");
fclose($handler);

msg ("info", "Строка изменена",
     "{$lang['opt_sysok_1']}<br /><br />
      <a href=\"{$PHP_SELF}?mod=test_adm\">{$lang['db_prev']}</a>");
}

/**
* Вывод header
*/
echoheader("Test", "Админпанель модуля test");

/**
* Вывод блока настроек
*/
opentable();
tableheader('Настройка модуля');
echo<<<HTML
<form action="" method="POST">
<table width="100%">
  <tr>
    <td class="option" style="padding:4px;">
      <b> Текст выводимой строки: </b><br />
      <span class="small"> например: Hello world </span>
    <td align="middle" width="400">
      <input class="edit" style="text-align:center" size="40" value="{$config_test['text']}" name="save_con[text]"></td>
  </tr>
 
  <tr><td background="engine/skins/images/mline.gif" height="1" colspan="2"></td></tr>
 
  <tr>
    <td class="option" style="padding:4px;">
       <b> Комментарий к тексту: </b><br />
       <span class="small"> например: Это ваш первый пример модуля с админпанелью </span>
    <td align="middle" width="400">
       <input class="edit" style="text-align:center" size="40" value="{$config_test['detail']}" name="save_con[detail]"></td>
  </tr>
 
  <tr><td background="engine/skins/images/mline.gif" height="1" colspan="2"></td></tr>
 
  <tr>
    <td class="option" style="padding-bottom:10px; padding-top:10px; padding-left:10px;" colspan="2">
      <input class="buttons" type="hidden" name="action" value="dosave" />
      <input class="buttons" type="submit" name="do" value=" Сохранить " /></td>
  </tr>
 
</table>
</form>
HTML;
closetable();


/**
* Вывод footer
*/
echofooter();
?>

Это самое сердце модуля в данном сценарии реализуется, как графическая веб-форма панели администрирования, так и сохранение введенных данных. В начале мы подключаем файлы test.functions.php и config.test.php. В первом из них реализованы функции, которые отвечают за создание дизайна админпанели, благодаря ним мы имеем более доступный код, неотегащённый лишним html кодом.
Приведу листинг файла test.functions.php, который будет необходимо создать в папке engine/inc.

Цитировать
<?php
if (!defined('DATALIFEENGINE')) {
    die("Hacking attempt!");
}

/**
* Элементы дизайна админпанели
*/
function opentable() {

echo <<<HTML
<table width="100%">
    <tr>
        <td width="4"><img src="engine/skins/images/tl_lo.gif" width="4" height="4" border="0"></td>
        <td background="engine/skins/images/tl_oo.gif"><img src="engine/skins/images/tl_oo.gif" width="1" height="4" border="0"></td>
        <td width="6"><img src="engine/skins/images/tl_ro.gif" width="6" height="4" border="0"></td>
    </tr>
    <tr>
        <td background="engine/skins/images/tl_lb.gif"><img src="engine/skins/images/tl_lb.gif" width="4" height="1" border="0"></td>
        <td style="padding:5px;" bgcolor="#FFFFFF">
HTML;
}

function closetable() {
echo <<<HTML
    </td>
        <td background="engine/skins/images/tl_rb.gif"><img src="engine/skins/images/tl_rb.gif" width="6" height="1" border="0"></td>
    </tr>
    <tr>
        <td><img src="engine/skins/images/tl_lu.gif" width="4" height="6" border="0"></td>
        <td background="engine/skins/images/tl_ub.gif"><img src="engine/skins/images/tl_ub.gif" width="1" height="6" border="0"></td>
        <td><img src="engine/skins/images/tl_ru.gif" width="6" height="6" border="0"></td>
    </tr>
</table>
HTML;
}

function tableheader($value) {
echo <<<HTML
<table width="100%">
    <tr>
        <td bgcolor="#EFEFEF" height="29" style="padding-left:10px;">
          <div class="navigation">$value</div></td>
    </tr>
</table>
<div class="unterline"></div>
HTML;
}
?>

Далее необходимо создать пустой файл config.test.php в папке engine/data (не забудте установить на этот файл права chmod =777). Теперь снова приступим к разбору файла test_adm.php. После подключения файлов мы видим код отвечающий за сохранение введенных данных в веб-форме. Массив данных переданных методом POST заносится в файл config.test.php. Кроме того помимо переданных данных я решил включить в массив статические переменные не требующие частых изменений, в данном случае это переменная

Цитировать
'version' => "v.1.0",

она будет неизменной при изменения других данных через веб-форму.
И наконец, чтобы антивирус движка не ругался при сканирование сервера, нужно отредактировать файл antivirus.php, располагающийся в папке engine/ajax.
Открываем его в текстовом редакторе, и в длинную череду данных массива

Цитировать
$good_files

к уже имеющейся строке

Цитировать
"./engine/modules/test.php",

добавляем

Цитировать
"./engine/data/config.test.php",
"./engine/inc/test.functions.php",
"./engine/inc/test_adm.php",

Ну что могу ещё сказать вроде всё, ничего не забыл. Можно попробовать вводить различные данные в веб-форме и в результате вы будете получать различный вывод на сайте. Надеюсь что данные примеры, помогут вам в освоение технологии создания модулей для DataLife и в скором времени вы сможет писать более сложные проекты.

Автор: vssp.ru

vladimir

  • Администратор
  • Герой форума
  • *****
  • Сообщений: 4 287
  • Карма: 415
    • Просмотр профиля
    • Помогаем новичкам в ДЛЕ
Солидно. Большой копи-паст. И что нам с этим делать? Всё равно спасибо. Может что нового узнаем...
А какой модуль-то?
Не проще ли взглянуть как устроен show.full.php? Этот модуль отвечает за отображение полной новости+комментарии.
Правда там мнооого кода)))
Понравился форум dle.net.ua? Поставь ссылку!

Okain

  • Я ещё новичок
  • *
  • Сообщений: 5
  • Карма: 0
    • Просмотр профиля
Солидно. Большой копи-паст. И что нам с этим делать? Всё равно спасибо. Может что нового узнаем...
А какой модуль-то?
Не проще ли взглянуть как устроен show.full.php? Этот модуль отвечает за отображение полной новости+комментарии.
Правда там мнооого кода)))

Так и сделал я знаю как выводить комментарии и знаю как форму комментарие выводить
Но при отправке уже проблемы
Комментраий передается модулю addcomments.php и он уже заносит комментарий в базу

addcomments.php подключается через engine.php

if($_POST['subaction'] == "addcomment") {

$allow_add_comment    = TRUE;
$allow_comments = TRUE;
$ajax_adds = false;

include_once (ENGINE_DIR.'/modules/addcomments.php');
}

show.full.php как я понял передает комментарий спомощью этого кода

$tpl->copy_template = "<form  method=\"post\" name=\"dle-comments-form\" id=\"dle-comments-form\" action=\"{$_SESSION['referrer']}\">".$tpl->copy_template."
В mod filesv2.3 это так

$tpl->copy_template = "<form  method=\"post\" name=\"dle-comments-form\" id=\"dle-comments-form\" action=\"".$config['http_home_url']."index.php?do=files&op=postcomment\">".$tpl->copy_template."
В других модулях добавление комментария по той же схеме что и show.full.php

Я подставлял ссылку в Action на addcomments.php

И при этом выводились ошибки

Я пришол к выводу что подключения данного модуля (addcomments.php) происходит подругому и долго думая нечего в голову не пришло
Так что надеюсь на вашу помощь

vladimir

  • Администратор
  • Герой форума
  • *****
  • Сообщений: 4 287
  • Карма: 415
    • Просмотр профиля
    • Помогаем новичкам в ДЛЕ
В форме для добавления комментариев пишешь: action=""
или само название текущей странички.
Далее при нажатии кнопки ДОБАВИТЬ КОММЕНТАРИЙ.
Данныые форму передаются скрипту этому же чтои отобразил эту страничку.
В этом скрипте показываем само содержимое, а потом проверяем
if($isset($_POST['submit_comment']))
{добавляем комментарий}
И дальше идёт обычное отображение списка комментариев или сначала комментарии, а потом обработка формы.\

Думаю разобрался?
Понравился форум dle.net.ua? Поставь ссылку!

Okain

  • Я ещё новичок
  • *
  • Сообщений: 5
  • Карма: 0
    • Просмотр профиля
В форме для добавления комментариев пишешь: action=""
или само название текущей странички.
Далее при нажатии кнопки ДОБАВИТЬ КОММЕНТАРИЙ.
Данныые форму передаются скрипту этому же чтои отобразил эту страничку.
В этом скрипте показываем само содержимое, а потом проверяем
if($isset($_POST['submit_comment']))
{добавляем комментарий}
И дальше идёт обычное отображение списка комментариев или сначала комментарии, а потом обработка формы.

Думаю разобрался?

Это не поможет
Комменатрии подругому работают
Разобрался наконец ))

Когда пользователь отсылает комментарий нажатием на кнопку с функцией js
<input onclick="doAddComments();return false;" name="submit" type="image" style="width:80px; height:20px" src="{THEME}/images/dlet_bttn_submit.gif" />
Файл ajax\js_edit.js отбрабатывает его и если все ок подключает ajax\addcomments.php
а ajax\addcomments.php уже подключает modules\addcomments.php

stone86

  • Я полноправный форумчанин
  • ***
  • Сообщений: 249
  • Карма: 36
  • Помогу за "На пиво" :)
    • Просмотр профиля
    • fifa, игровой сайт- http://fifas.com.ua
Если честно..так ниче и не понял! :-[ ???
Можно повнятней! ;)
Компьютер не подчиняется законам физики. Только в нем глюки возникают из ничего, файлы исчезают в никуда, а объем измеряется в метрах и называется весом

Читайте подпись у Sima007 и ставьте +

Maxter

  • Герой форума
  • *****
  • Сообщений: 1 564
  • Карма: 100
    • Просмотр профиля
    • Мой маленький СДЛ
4дле уже неделю как работает.
Недорогой хостинг высшего качества!
Недорогие VPS Помогу с настройкой рефералам.
Начинающим веб-мастерам могу предоставить место на сервере, бесплатно.

stone86

  • Я полноправный форумчанин
  • ***
  • Сообщений: 249
  • Карма: 36
  • Помогу за "На пиво" :)
    • Просмотр профиля
    • fifa, игровой сайт- http://fifas.com.ua
как к свому модулю прикрутить длешные комменты!?????
так думаю будет понятней! :)
Компьютер не подчиняется законам физики. Только в нем глюки возникают из ничего, файлы исчезают в никуда, а объем измеряется в метрах и называется весом

Читайте подпись у Sima007 и ставьте +

 

Похожие темы

  Тема / Автор Ответов Последний ответ
1 Ответов
1700 Просмотров
Последний ответ 07-03-2008, 10:38:17
от vladimir
3 Ответов
1811 Просмотров
Последний ответ 09-07-2008, 12:59:29
от SWATOK
7 Ответов
1819 Просмотров
Последний ответ 04-07-2009, 11:47:54
от manhunt76
0 Ответов
267 Просмотров
Последний ответ 22-06-2011, 09:34:37
от timmi40
5 Ответов
250 Просмотров
Последний ответ 16-03-2012, 17:03:54
от jenia9