odys 384 Опубликовано: 4 июня 2018 Рассказать Опубликовано: 4 июня 2018 Добрый день, помогите найти ошибку. В общем мне нужно чтобы при добавлении новости в некоторых полях были данные из профиля пользователя. Вывести все его данные получилось, однако с доп. полями проблема. Не могу найти ошибку: include (ENGINE_DIR . '/inc/userfields.php'); if (strpos($tpl->copy_template, "[ufvalue_") !== false) { $xfieldsdata = xfieldsdataload( $userField['xfields'] ); foreach ( $xfields as $value ) { $preg_safe_name = preg_quote( $value[0], "'" ); if($xfieldsdata[$value[0]] == "") $ufgiven = false; else $ufgiven = true; if( $value[5] != 1 ) { if( !$ufgiven ) { $tpl->copy_template = preg_replace( "'\\[ufgiven_{$preg_safe_name}\\](.*?)\\[/ufgiven_{$preg_safe_name}\\]'is", "", $tpl->copy_template ); $tpl->copy_template = str_replace( "[ufnotgiven_{$value[0]}]", "", $tpl->copy_template ); $tpl->copy_template = str_replace( "[/ufnotgiven_{$value[0]}]", "", $tpl->copy_template ); } else { $tpl->copy_template = preg_replace( "'\\[ufnotgiven_{$preg_safe_name}\\](.*?)\\[/ufnotgiven_{$preg_safe_name}\\]'is", "", $tpl->copy_template ); $tpl->copy_template = str_replace( "[ufgiven_{$value[0]}]", "", $tpl->copy_template ); $tpl->copy_template = str_replace( "[/ufgiven_{$value[0]}]", "", $tpl->copy_template ); } $tpl->copy_template = preg_replace( "'\\[ufvalue_{$preg_safe_name}\\]'i", stripslashes( $xfieldsdata[$value[0]] ), $tpl->copy_template ); } else { $tpl->copy_template = preg_replace( "'\\[ufgiven_{$preg_safe_name}\\](.*?)\\[/ufgiven_{$preg_safe_name}\\]'is", "", $tpl->copy_template ); $tpl->copy_template = preg_replace( "'\\[ufvalue_{$preg_safe_name}\\]'i", "", $tpl->copy_template ); $tpl->copy_template = preg_replace( "'\\[ufnotgiven_{$preg_safe_name}\\](.*?)\\[/ufnotgiven_{$preg_safe_name}\\]'is", "", $tpl->copy_template ); } } } код взял из engine/modules/profile.php $preg_safe_name выводит все названия полей — слитно $xfieldsdata[$value[0]] - выводит данные поля и название поля — слитно однако в шаблоне [ufvalue_pole] — пусто. Что делаю не так? Версия dle 12.0 Цитата Ссылка на сообщение Поделиться на других сайтах
Gameer 310 Опубликовано: 4 июня 2018 Рассказать Опубликовано: 4 июня 2018 1. Удалить include (ENGINE_DIR . '/inc/userfields.php'); 2. После if (strpos($tpl->copy_template, "[ufvalue_") !== false) { Вставить $xfields = xfieldsload(true); Все. Цитата Ссылка на сообщение Поделиться на других сайтах
odys 384 Опубликовано: 4 июня 2018 Рассказать Опубликовано: 4 июня 2018 Автор @Gameer так было в модуле UserBox, но он перестал работать, вернее доп. поля стали пустыми, хотя движок не обновлял, я его немного переписал под себя, но вот доп. поля так и не выводятся... через print_r( $xfieldsdata[$value[0]] ); данные из полей выводятся ( Muster Str.str1haus12345plzBerlinstadt0176123456789tel ) а через [ufvalue_pole] нет. Цитата Ссылка на сообщение Поделиться на других сайтах
Gameer 310 Опубликовано: 4 июня 2018 Рассказать Опубликовано: 4 июня 2018 Только что, odys сказал: @Gameer так было в модуле UserBox, но он перестал работать, вернее доп. поля стали пустыми, хотя движок не обновлял, я его немного переписал под себя, но вот доп. поля так и не выводятся... через print_r( $xfieldsdata[$value[0]] ); данные из полей выводятся ( Muster Str.str1haus12345plzBerlinstadt0176123456789tel ) а через [ufvalue_pole] нет. Я только что проверил у себя на отдельной странице, все работает как я описал выше. Вот мой полный код с отдельной страницы. <?php $tpl->load_template('u.tpl'); if (strpos($tpl->copy_template, "[ufvalue_") !== false) { $xfields = xfieldsload(true); $xfieldsdata = xfieldsdataload($member_id['xfields']); foreach ( $xfields as $value ) { $preg_safe_name = preg_quote( $value[0], "'" ); if($xfieldsdata[$value[0]] == "") $ufgiven = false; else $ufgiven = true; if( $value[5] != 1 ) { if( !$ufgiven ) { $tpl->copy_template = preg_replace( "'\\[ufgiven_{$preg_safe_name}\\](.*?)\\[/ufgiven_{$preg_safe_name}\\]'is", "", $tpl->copy_template ); $tpl->copy_template = str_replace( "[ufnotgiven_{$value[0]}]", "", $tpl->copy_template ); $tpl->copy_template = str_replace( "[/ufnotgiven_{$value[0]}]", "", $tpl->copy_template ); } else { $tpl->copy_template = preg_replace( "'\\[ufnotgiven_{$preg_safe_name}\\](.*?)\\[/ufnotgiven_{$preg_safe_name}\\]'is", "", $tpl->copy_template ); $tpl->copy_template = str_replace( "[ufgiven_{$value[0]}]", "", $tpl->copy_template ); $tpl->copy_template = str_replace( "[/ufgiven_{$value[0]}]", "", $tpl->copy_template ); } $tpl->copy_template = preg_replace( "'\\[ufvalue_{$preg_safe_name}\\]'i", stripslashes( $xfieldsdata[$value[0]] ), $tpl->copy_template ); } else { $tpl->copy_template = preg_replace( "'\\[ufgiven_{$preg_safe_name}\\](.*?)\\[/ufgiven_{$preg_safe_name}\\]'is", "", $tpl->copy_template ); $tpl->copy_template = preg_replace( "'\\[ufvalue_{$preg_safe_name}\\]'i", "", $tpl->copy_template ); $tpl->copy_template = preg_replace( "'\\[ufnotgiven_{$preg_safe_name}\\](.*?)\\[/ufnotgiven_{$preg_safe_name}\\]'is", "", $tpl->copy_template ); } } } $tpl->compile('content'); $tpl->clear(); 1 Цитата Ссылка на сообщение Поделиться на других сайтах
odys 384 Опубликовано: 4 июня 2018 Рассказать Опубликовано: 4 июня 2018 Автор 1 час назад, Gameer сказал: Я только что проверил у себя на отдельной странице, все работает как я описал выше. это то и странно, у меня тоже по отдельности работает, а вот если взять весь код целиком из модуля UserBox https://github.com/dle-modules/DLE-UserBox/blob/master/engine/modules/userbox.php то не работает и не работает именно в шаблоне addnews.tpl, в новостях доп. поля выводятся... У разработчика не спрашиваю, т.к. у него уже спрашивали, он написал мол создайте Issues на github, но так и не ответил. Ладно, @Gameer спасибо тебе за попытку помочь. Очень благодарен, буду сегодня вечером дальше ковырять, попробую не брать весь код, а вырезать только нужную мне часть. Цитата Ссылка на сообщение Поделиться на других сайтах
odys 384 Опубликовано: 5 июня 2018 Рассказать Опубликовано: 5 июня 2018 Автор @Gameer не знаю что и как, но вот так работает if (strpos($tpl->copy_template, "[ufvalue_") !== false) { $xfields = xfieldsload(true); $xfieldsdata = xfieldsdataload($userField['xfields']); foreach ($xfields as $value) { $preg_safe_name = preg_quote($value[0], "'"); $tpl->copy_template = preg_replace("'\\[ufvalue_{$preg_safe_name}\\]'i", stripslashes($xfieldsdata[$value[0]]), $tpl->copy_template); } } вырезал все эти if и else, оставив только формирование ufvalue и всё норм, выводит то, что нужно и нормально Цитата Ссылка на сообщение Поделиться на других сайтах
Gameer 310 Опубликовано: 5 июня 2018 Рассказать Опубликовано: 5 июня 2018 13 минут назад, odys сказал: @Gameer не знаю что и как, но вот так работает if (strpos($tpl->copy_template, "[ufvalue_") !== false) { $xfields = xfieldsload(true); $xfieldsdata = xfieldsdataload($userField['xfields']); foreach ($xfields as $value) { $preg_safe_name = preg_quote($value[0], "'"); $tpl->copy_template = preg_replace("'\\[ufvalue_{$preg_safe_name}\\]'i", stripslashes($xfieldsdata[$value[0]]), $tpl->copy_template); } } вырезал все эти if и else, оставив только формирование ufvalue и всё норм, выводит то, что нужно и нормально А пробовал убирать if( $value[5] != 1 ) { Это проверка на личное ли поле или нет. Если личное то выводить данные не будет. Цитата Ссылка на сообщение Поделиться на других сайтах
odys 384 Опубликовано: 5 июня 2018 Рассказать Опубликовано: 5 июня 2018 Автор 3 минуты назад, Gameer сказал: А пробовал убирать не, не пробовал, мне и не нужна эта проверка, сайт компании и этот вывод делаю только при добавлении новостей сотрудниками, добавление доступно только для них в доп. полях только их данные, которые передаю в доп. поля новости... Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.