Версия: Исходники работ
Внимание! Модули сайта находятся в процессе разработки. Функционал доступен частично. МЫ НЕ СТОИМ НА МЕСТЕ, А СТАРАЕМСЯ СДЕЛАТЬ САЙТ УНИКАЛЬНЫМ!
Ограничение функций от сервисов Ucoz является помехой,но мы будем искать варианты, ведь многие функции либо скрыты и не запрещены, Последняя фиксацияВыкладываю вам свои наработки по работе с движком сайта 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, подставляю значения под свои. 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, делая из него Примерно 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.php - 906, 1275 строки – вписываем аналоговые значения после land Это простой пример реализации. Увы, разработчики этого прекрасного движка не удостоили вниманием такую вещь, как возможность создавать подобные теги в один клик из админ панели. Вероятно, что я сам сделаю этот модуле-плагино-хако-чудо) даже не знаю как назвать такое. Уважаемые пользователи! Копирование новостей разрешено только с указанием ссылки на данную новость на другом сайте. При обнаружении нарушения будут приняты меры, связанные с защитой авторских прав по пункту законов о плагиате и нарушении авторских прав. На сайте используются только оригинальные материалы, без копирования из других источников. Все скрипты и коды здесь - наши авторские работы. Чужие работы мы бережно выносим на отдельные html странички, со ссылками на оригинальный материал. ПРИМЕРУважайте чужой труд! | |
Категория: разработки DLE 15 | | | |
Всего комментариев: 0 | |