Вывод своих полей из MySql в профиль через теги
Версия: Исходники работ

Внимание! Модули сайта находятся в процессе разработки. Функционал доступен частично.
МЫ НЕ СТОИМ НА МЕСТЕ, А СТАРАЕМСЯ СДЕЛАТЬ САЙТ УНИКАЛЬНЫМ!
Ограничение функций от сервисов Ucoz является помехой,но мы будем искать варианты, ведь многие функции либо скрыты и не запрещены,
либо давно забыты и убраны из списков.
Многое можно осуществить через JS и Json.
Мы ищем решение для добавления большего количества файлов.



Специальная тема.

Выкладываю вам свои наработки по работе с движком сайта Data Life Engine


Вопрос следующий - создать свои { теги } для вывода информации из Базы Данных, и их редактирование в профиле. Тем в интернете я не нашел, так что буду первым в этом деле! Заказали сделать сайт, и я решил пойти своим путем!


И так, что мы должны понимать, знать и учитывать, если хотим вызвать свой { ТЕГ } с загрузкой из БД пользователя личной информации на его личной странице.


1. Цель - для чего это необходимо? У меня четкая цель: Добавить тег в регистрацию, с выводом в ЛК пользователя, и с возможностью менять данные. В моем случае это номер телефона.


2. Знать особенности движка DataLife Engine 15 - а я в этом относительно рак. Не хватает усидчивости и внимательности.


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


4. Понимать минимум в PHP и в Базах Данных MySqli




Для начала я создал базу данных - копирующую свойства и значения столбца email. Это для того, чтобы получить дополнительную защиту. Базу данных я назвал mobi_a, поскольку на самом деле у меня получилось аж 12 новых тегов! Не потерять бы файлик с ними!



Код
`email` varchar(50) COLLATE utf8mb4_general_ci NOT NULL DEFAULT '',

// а вот моя копия.</p>

<p>`mobi_a` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,


// Пришлось один атрибут под себя подправить, но не беда. Так нужно!



Имеем столбец в БД, теперь надо его прикрутить к движку, и при том, как я писал ранее, именно родным DLE-шным кодом!


На самом деле ничего сложного! Я открывал все файлы движка по порядку, и вбивал через поиск Notepad++ подходящее значение. В данном случае это уже не email, а страна - текстовое значение для ввода данных. И так - началась охота за land по файлам DLE!


В итоге вот что я накопал! Для начала список файлов, которые я правил для этой цели:


/engine/ajax/Profile.php


/templates/default/profile_popup.tpl


/templates/default/userinfo.tpl


/engine/modules/Profile.php


/engine/engine.php


./engine/inc/editusers.php


/engine/modules/functions.php


Прежде чем описывать php, я заострю внимание на те места, где код обращается к шаблонам, а не содержит готовую верстку. : /engine/ajax/Profile.php ссылается в 34 строке на profile_popup.tpl, но не на userinfo.tpl. Почему так, я поясню чуть позже.


Заглянем в дефолтный profile_popup.tpl и увидим стандартный код, но большинство шаблонов его не используют, а все выводят напрямую в userinfo.tpl, его и рассмотрим.


Код
<div class="popup_userinfo[online] useronline[/online] clrfix">

  <div class="popup_userinfo_top">

  <div class="avatar"[online] title="Онлайн"[/online][offline] title="Офлайн"[/offline]><b class="cover" style="background-image: url({foto});"></b></div>

  <div>{fullname}</div>

  </div>

  <ul class="usinf">

<li><div class="ui-c1 grey">Группа</div> <div class="ui-c2"><b>{mobi_a}</b></div></li></p>
<p>// Здесь я подставил нужное значение в скопированный образец</p>
<p>

<li><div class="ui-c1 grey">Группа</div> <div class="ui-c2">{status}</div></li>

  <li><div class="ui-c1 grey">Был на сайте</div> <div class="ui-c2">{lastdate}</div></li>

  <li><div class="ui-c1 grey">Зарегистрирован</div> <div class="ui-c2">{registration}</div></li>

  <li><div class="ui-c1 grey">Новостей:</div> <div class="ui-c2">{news-num} [ {news} ] [ [rss]RSS[/rss] ]</div></li>

  <li><div class="ui-c1 grey">Комментариев</div> <div class="ui-c2">{comm-num} [ {comments} ]</div></li>

  </ul>

</div>


/engine/ajax/Profile.php - теперь обратимся к нему в строки 156-166


Код
if( $row['mobi_a'] ) {

  $tpl->set( '[mobi_a]', "" );

  $tpl->set( '[/mobi_a]', "" );

  $tpl->set( '{mobi_a}', stripslashes( $row['mobi_a'] ) );

  $tpl->set_block( "'\\[not-mobi_a\\](.*?)\\[/not-mobi_a\\]'si", "" );

} else {

  $tpl->set_block( "'\\[mobi_a\\](.*?)\\[/mobi_a\\]'si", "" );

  $tpl->set( '{mobi_a}', "" );

  $tpl->set( '[not-mobi_a]', "" );

  $tpl->set( '[/not-mobi_a]', "" );



}


Во всем массиве из файла, что я скопировал в np++, атрибут ведет к land, я везде подменил на mobi_a и вставил в php файл ниже оригинального текста. Так будет и дальше, чтобы мне не повторять одно и тоже много раз!


Взяв за источник вывода из БД Land, подставляю значения под свои.

Прописываем вместо LAND своё значение из БД, а затем в конце вставляем в код, и в таблицу.

Сделано? Запускаем на Локальнике машину, чтоб не ломать сайт! Вся работа через Open Server.

Открываем папку с движком, и идем в гости к шаблонам и Аякс-папке!


Engine/ajax/Profile.php открываем Notepad++ и вносим измененный код сразу же после массива land!


Далее идем в шаблоны, открываем нужный, в нем файл profile_popup.tpl. В него добавляем добавленную стоку в удобное место!


Код
<li><span class="grey">Мобильный номер</span> <b>{mobi_a}</b></li>


Если шаблон не стандартный, а свой, адаптируем разметку под стиль вашего шаблона.


Копируем и адаптируем в нужном месте тот-же код.

Все вставили, но вот беда, вместо желаемого поля у нас появляется вот что…


Код
+375(29){mobi_a}


Зря рано радовался - еще ковырять пришлось долго файлы!


К слову, код оператора мобильной связи я пока еще не решил, как лучше вводить в БД, поскольку он у меня идет через выпадающий список. Поэтому его и видно. Но раз вставил в Доп-поля, вставлю и в БД. Вот как обьединить два значения как одно, еще подумаю!


Цифры кода мы пока храним в доп-полях. До них тоже доберемся.

Нам важно сейчас разрешить вопрос с тем, чтобы заставить все работать!


А теперь сходим еще к одному ПРОФИЛЮ в гости, этот лежит уже в /engine/modules/


B нем почти в начале, в строке 55 мы видим обещающую запись adduserinfo.php


Как и в первом случае, ищем в коде значение land, его и продублируем с аналогичным подменом имени в базе данных!


Ведь мы должны выбрать помимо всего еще и код оператора!


/engine/modules/profile.php Строки 101-102:


Код
$land = $db->safesql( $parse->process( $_POST['land'] ) );

Превращаем в  

$mobi_a = $db->safesql( $parse->process( $_POST['mobi_a'] ) );


строки 320-327


Код
if( dle_strlen( $mobi_a, $config['charset'] ) > 100 ) {

   

  $stop .= $lang['news_err_24'];

  }

  if ( preg_match( "/[\||\'|\<|\>|\"|\!|\]|\?|\$|\@|\/|\\\|\&\~\*\+]/", $mobi_a ) ) {

  $stop .= $lang['news_err_36'];


Подменяем в строках 400 и 410 в двух массивах копируем land, делая из него

, land='$land' - >, mobi_a='$mobi_a' после чего вставляем измененные участки или перед, или после исходного. Следим, чтобы не сбились запятые.


Примерно 560-570 строки.

Копируем и подменяем массив


Код
if( $ mobi_a [' mobi_a '] ) {

  $tpl->set( ' mobi_a]', "" );

  $tpl->set( '[/mobi_a]', "" );

  $tpl->set( '{ mobi_a }', stripslashes( $row[' mobi_a '] ) );

  $tpl->set_block( "'\\[not- mobi_a \\](.*?)\\[/not- mobi_a \\]'si", "" );

   

  } else {

  $tpl->set_block( "'\\[ mobi_a \\](.*?)\\[/ mobi_a \\]'si", "" );

  $tpl->set( '{ mobi_a }', "" );

  $tpl->set( '[not- mobi_a]', "" );

  $tpl->set( '[/not- mobi_a]', "" );


И вставляем с разрывом в 1 строку после исходного массива Land


Все! С этим файлом разобрались!

Во избежание проблем перезапускаем локалку!


Теперь открываем многострадальный /engine/engine.php


234 строка: После u.land дописываем u.mobi_a .


Открываем файл ./engine/inc/editusers.php


1115 строка:


Код
$row['land'] = $parse->decodeBBCodes( $row['land'], false );


меняем на в текстовом редакторе и вставляем под образцом



Код
$row['mobi_a'] = $parse->decodeBBCodes( $row['mobi_a'], false );


Строка 1487

Код
<div class="form-group">

  <label class="control-label col-md-3 col-sm-3">{$lang['opt_land']}</label>

  <div class="col-md-9 col-sm-9">

  <input class="form-control" maxlength="100" type="text" name="editland" value="{$row['land']}">


В текстовом редакторе меняем соответствующие значения на свои


Код
<div class="form-group">

<label class="control-label col-md-3 col-sm-3">{$lang['opt_mobi_a']}</label>

<div class="col-md-9 col-sm-9"><input class="form-control" maxlength="100" name="editland" type="text" value="{$row['mobi_a']}" /></div>


Также вставляем измененный участок после исходного текста


Строка 1798


 

Код
 <td colspan="2"><input style="width:100%;" name="editland" value="{$row['mobi_a']}" class="edit


Строка 2174


Код
$_POST['editmobi_a'] = isset($_POST['editmobi_a']) ? $_POST['editmobi_a'] : '';


Строка 2186


Код
$sets[] = "mobi_a='".$db->safesql( $parse->process( $_POST['editmobi_a'] ) )."'";


C editusers.php мы завершили!


/engine/modules/profile_innews.php строка 63


Код
if( $row['mobi_a'] ) {

  $tpl->set( '[mobi_a]', "");

  $tpl->set( '[/mobi_a]', "");

  $tpl->set( '{mobi_a}', stripslashes( $row['mobi_a'] ) );

  $tpl->set_block("'\\[not-mobi_a \\](.*?)\\[/not-mobi_a\\]'si", "");

}

  else {

  $tpl->set_block("'\\[mobi_a\\](.*?)\\[/mobi_a\\]'si", "");

  $tpl->set( '{mobi_a}', "");

  $tpl->set( '[not-mobi_a]', "");

  $tpl->set( '[/not-mobi_a]', "");

}


/engine/modules/functions.php906, 1275 строки – вписываем аналоговые значения после land


Это простой пример реализации. Увы, разработчики этого прекрасного движка не удостоили вниманием такую вещь, как возможность создавать подобные теги в один клик из админ панели.


Вероятно, что я сам сделаю этот модуле-плагино-хако-чудо) даже не знаю как назвать такое.

и в завершение! Работать это будет исключительно на 15 версии движка. Вопрос в то, что помимо всего этого - надо переписать еще 3 JavaScript-а. Но о этом допишу здесь позже!

Всем удачи, не болеть и быть счастливыми!

Кому данная тема помогла - оставьте здесь свой отзыв!

Уважаемые пользователи!
Копирование новостей разрешено только с указанием ссылки на данную новость на другом сайте.
При обнаружении нарушения будут приняты меры, связанные с защитой авторских прав по пункту законов о плагиате и нарушении авторских прав.
На сайте используются только оригинальные материалы, без копирования из других источников. Все скрипты и коды здесь - наши авторские работы.
Чужие работы мы бережно выносим на отдельные html странички, со ссылками на оригинальный материал. ПРИМЕР
Уважайте чужой труд!
Категория: разработки DLE 15 | Добавил: SKYER | Теги: свои скобки dle, свои ***dle, свои теги dle

Всего комментариев: 0
avatar