Вывод отдельных доп полей посредством php
Версия: dle-user-mod

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



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

Реализуется несколькими вариациями, с созданием отдельных модулей. Их мы и рассмотрим далее!


Р. Карпонский - Инженер Web-технологий


Если не знаешь ПХП и Пусть и немного устаревшего, но неплохого движка ДЛЕ, то мало что выйдет..



  • Странно, Юкоз часто, через раз, ругается на недопустимый контент при публикации новостей подобного плана, утомляет...


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

Хорошо, половина данных лежит в Таблице БД, а половина в Доп-Полях. Бд вывести полбеды, а вот отдельное доп поле в отдельную ячейку таблицы - это сложнее.

Поковырял я значит просторы Гугла, а Затем Яндекса, и ничего путного не нашел. Придется сражаться своими силами.


Если с Таблицами БД все понятно, то с доп-полями полная жо.... стоп-стоп-стоп! Ведь за подобный вывод доп-полей отвечает один и тот-же код, вписанный во многих файлах! А еще, раз работа будет с упором на пользователей, и по сути будет создана для Админов, то у нас путь вообще простой!

Копируем в рабочую папку файл /engine/modules/profile.php...... и модифицируем его под свои нужды! А заодно подключаем свой Шаблон!


Это один вариант, а есть второй, создаем кастомный модуль, впихиваем в него по очереди необходимые исходники, прописываем пути к бд,  назначаем шаблон, ну и для обоих случаев привязываем его к engine.php


Давайте по порядку, господа!

Вариант 1: Модернизация файла /engine/modules/profile.php

Нам необходим тот самый участок кода, что выводит нам информацию из доп-полей через скобки {xfields} - вот он:

Код

$xfieldsid = stripslashes( $row['xfields'] );
$xfieldsaction = "init";
$xfieldsadd = false;
include (DLEPlugins::Check(ENGINE_DIR . '/inc/userfields.php'));
$filecontents = array ();

if( !empty( $postedxfields ) ) {

foreach ( $postedxfields as $xfielddataname => $xfielddatavalue ) {

if( trim($xfielddatavalue) == "" ) {
continue;
}

$xfielddatavalue = $db->safesql( $parse->BB_Parse( $parse->process( trim($xfielddatavalue) ), false ) );

$xfielddataname = $db->safesql( str_replace( $not_allow_symbol, '', $xfielddataname) );

$xfielddataname = str_replace( "|", "|", $xfielddataname );
$xfielddatavalue = str_replace( "|", "|", $xfielddatavalue );
$filecontents[] = "$xfielddataname|$xfielddatavalue";
}

$filecontents = implode( "||", $filecontents );

} else $filecontents = '';

Далее нам пригодятся еще несколько моментов в файле, это привязка к файлу шаблона: А мы ведь будем запиливать с вами свой!


Код
$tpl->load_template( 'userinfo.tpl' );

В первом участке кода указан путь к файлу /inc/userfields.php, отвечающему за основной движок полей, по нему пройдемся позже!


Код
include (DLEPlugins::Check(ENGINE_DIR . '/inc/userfields.php'));

и Участок кода, активирующего код полей в скобках, для вывода в шаблоне!


Код

$xfieldsaction = "list";
$xfieldsadd = false;
$xfieldsid = $row['xfields'];
include (DLEPlugins::Check(ENGINE_DIR . '/inc/userfields.php'));
$tpl->set( '{xfields}', $output );

if ( count( $xfieldinput ) ) {
foreach ( $xfieldinput as $key => $value ) {
$tpl->copy_template = str_replace( "[xfinput_{$key}]", $value, $tpl->copy_template );
}
}

$xfieldsdata = xfieldsdataload( $row['xfields'] );

foreach ( $xfields as $value ) {

$preg_safe_name = preg_quote( $value[0], "'" );
if( !isset($xfieldsdata[$value[0]]) ) $xfieldsdata[$value[0]] = '';

if($xfieldsdata[$value[0]] == "") $xfgiven = false; else $xfgiven = true;

if( $value[5] != 1 OR ($is_logged AND $member_id['user_group'] == 1) OR ($is_logged AND $member_id['user_id'] == $row['user_id']) ) {

if( !$xfgiven ) {

$tpl->copy_template = preg_replace( "'\\[xfgiven_{$preg_safe_name}\\](.*?)\\[/xfgiven_{$preg_safe_name}\\]'is", "", $tpl->copy_template );
$tpl->copy_template = str_replace( "[xfnotgiven_{$value[0]}]", "", $tpl->copy_template );
$tpl->copy_template = str_replace( "[/xfnotgiven_{$value[0]}]", "", $tpl->copy_template );

} else {

$tpl->copy_template = preg_replace( "'\\[xfnotgiven_{$preg_safe_name}\\](.*?)\\[/xfnotgiven_{$preg_safe_name}\\]'is", "", $tpl->copy_template );
$tpl->copy_template = str_replace( "[xfgiven_{$value[0]}]", "", $tpl->copy_template );
$tpl->copy_template = str_replace( "[/xfgiven_{$value[0]}]", "", $tpl->copy_template );

}

$tpl->set( "[xfvalue_{$value[0]}]", stripslashes( $xfieldsdata[$value[0]] ));

} else {

$tpl->copy_template = preg_replace( "'\\[xfgiven_{$preg_safe_name}\\](.*?)\\[/xfgiven_{$preg_safe_name}\\]'is", "", $tpl->copy_template );
$tpl->copy_template = preg_replace( "'\\[xfvalue_{$preg_safe_name}\\]'i", "", $tpl->copy_template );
$tpl->copy_template = preg_replace( "'\\[xfnotgiven_{$preg_safe_name}\\](.*?)\\[/xfnotgiven_{$preg_safe_name}\\]'is", "", $tpl->copy_template );

}

}

С первым пунктом вводной части мы разабрались!


Данные выбраные участки кода актуальны в нашем случае, как и для отдельного модуля с подключением, так и с модификацией имеющегося файла

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

Всего комментариев: 6
avatar
0
1 SKYER • 16:58, 04.01.2022 [Материал]
avatar
0
2 SKYER • 17:14, 04.01.2022 [Материал]
avatar
0
3 SKYER • 17:17, 04.01.2022 [Материал]
avatar
0
4 SKYER • 17:26, 04.01.2022 [Материал]
avatar
0
5 SKYER • 17:36, 04.01.2022 [Материал]
avatar
0
6 SKYER • 17:37, 04.01.2022 [Материал]
avatar