Что нового

xfnotgiven_x в личных сообщениях

Svayke

Посетитель
Регистрация
30 Дек 2024
Сообщения
102
Реакции
21
Ребят подскажите пожалуйста. По какой то причине не работает [xfnotgiven_x] в персональных сообщениях. В документации копался, коды есть, должны работать соответственно. Причем [xfgiven_x] и [xfvalue_x] работают. Именно с notgiven проблема.
Dle 18, php 8.2+
Может кто-то сталкивался с таким из вас и вы нашли решение проблемы. Спасибо заранее всем.
 
на форуме DLE спрашивал?
Знакомый с лицензией написал, ждем ответа. Но при установке на чистую dle 18, они тоже не работают видимо тут в движке у самих разрабов ошибка
 
Проверил, тоже самое. Это баг. Данных тегов в коде даже и нету, походу их просто забыли указать) Можно исправить так: в engine/pm.php найти:
PHP:
            if ($xfound) {

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

                foreach ($xfields as $value) {
                    $preg_safe_name = preg_quote($value[0], "'");

                    if ($value[5] != 1 OR $member_id['user_group'] == 1 OR $member_id['user_id'] == $row['user_id'] ) {
                        if (empty($xfieldsdata[$value[0]])) {
                            $tpl->copy_template = preg_replace("'\\[xfgiven_{$preg_safe_name}\\](.*?)\\[/xfgiven_{$preg_safe_name}\\]'is", "", $tpl->copy_template);
                        } else {
                            $tpl->copy_template = preg_replace("'\\[xfgiven_{$preg_safe_name}\\](.*?)\\[/xfgiven_{$preg_safe_name}\\]'is", "\\1", $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);
                    }
                }
            }
И заменить на:
PHP:
if ($xfound) {
    $xfieldsdata = xfieldsdataload($row['xfields']);

    foreach ($xfields as $value) {
        $preg_safe_name = preg_quote($value[0], "'");

        if ($value[5] != 1 OR $member_id['user_group'] == 1 OR $member_id['user_id'] == $row['user_id']) {
            if (empty($xfieldsdata[$value[0]])) {
                $tpl->copy_template = preg_replace("'\\[xfgiven_{$preg_safe_name}\\](.*?)\\[/xfgiven_{$preg_safe_name}\\]'is", "", $tpl->copy_template);
                $tpl->copy_template = preg_replace("'\\[xfnotgiven_{$preg_safe_name}\\](.*?)\\[/xfnotgiven_{$preg_safe_name}\\]'is", "\\1", $tpl->copy_template);
            } else {
                $tpl->copy_template = preg_replace("'\\[xfgiven_{$preg_safe_name}\\](.*?)\\[/xfgiven_{$preg_safe_name}\\]'is", "\\1", $tpl->copy_template);
                $tpl->copy_template = preg_replace("'\\[xfnotgiven_{$preg_safe_name}\\](.*?)\\[/xfnotgiven_{$preg_safe_name}\\]'is", "", $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("'\\[xfnotgiven_{$preg_safe_name}\\](.*?)\\[/xfnotgiven_{$preg_safe_name}\\]'is", "", $tpl->copy_template);
            $tpl->copy_template = preg_replace("'\\[xfvalue_{$preg_safe_name}\\]'i", "", $tpl->copy_template);
        }
    }
}
Тем самым добавив теги [xfnotgiven_x] текст [/xfnotgiven_x] Но данные теги работают только тогда когда в шаблоне есть тег [xfvalue_x]. Если его нет то $xfound становиться false и весь блок пропускается. И даже теги [xfgiven_x]/[xfgiven_x] не будут работать, так как переменная $xfound определяется ранее в этом коде так:
PHP:
        if( strpos( $tpl->copy_template, "[xfvalue_" ) !== false ) {
            $xfound = true;
            $xfields = xfieldsload(true);
        } else $xfound = false;
Но можно наверное расширить проверку If, чтобы она была и например на тег xfgiven или xfnotgiven. Но это я уже не проверял.
PHP:
if (
    strpos($tpl->copy_template, "[xfvalue_") !== false ||
    strpos($tpl->copy_template, "[xfgiven_") !== false ||
    strpos($tpl->copy_template, "[xfnotgiven_") !== false
) {
    $xfound = true;
    $xfields = xfieldsload(true);
} else $xfound = false;
 
Последнее редактирование:
А и да забыл. В engine/ajax/pm.php надо проделать те же самые действия, чтобы при ответе на сообщение через ajax всё сразу отображалось корректно.
 
Верх