Что нового

Помощь с DialogPM (1 Viewer)

  • Автор темы Maxim Mozes
  • Дата начала
Maxim Mozes

Maxim Mozes

Участник
Регистрация
27 Мар 2021
Сообщения
96
Реакции
205
Всем привет!
Не зарегистрированному пользователю когда заходит в сообщения, выводиться вот такое оповещение:
Screenshot 7
Код находиться отвечающий за это оповещение engine\mods\pm\class\Router.php:
PHP:
<?php
/**
* Роутер
*
* @link https://sandev.pro/
* @author Sander <oleg.sandev@gmail.com>
*/

namespace Sandev;

use Sandev\Pm;
use Sandev\View;
use Sandev\Lang;
use Sandev\Ignore;
use Sandev\Userlist;

class Router
{
  
    public static function start()
    {
        global $is_logged,$member_id,$user_group;

        if (!$is_logged || !$user_group[$member_id['user_group']]['allow_pm']) {
            msgbox(Lang::get('error'), Lang::get('notallowed'));
            return;
        }

        $path = trim($_SERVER['REQUEST_URI'], '/');
        list($path, $query) = explode('?', $path);
        parse_str($query, $data);

        if ($path == 'pm/list/ignore') {
            $controller = 'Ignore';
        } elseif ($data['do'] == 'pm' && $data['username']) {
            $controller = 'Dialog';
            $username = $data['username'];
        } else {
            list(,$username,$action) = explode('/', $path);
            $action = totranslit($action);
            if ($username) {
                $controller = 'Dialog';
            } else {
                $controller = 'Main';
            }
        }

        $action = $action ?: 'index';
        if ($controller == 'Dialog') {
            Pm::setUser($username);
        }

        Pm::onlineUpdate();
        Ignore::load();

        $class_name = 'Sandev\\' . $controller . '\\' . $controller . 'Controller';
        $class = new $class_name();
        $action_name = $action . 'Action';

        if (!method_exists($class, $action_name)) {
            $action_name = 'indexAction';
        }

        $tpl = new View('index');
        $tpl->ifElse('main', $controller === 'Main');

        $tpl->set('{userlist}', Userlist::getList());
      
        $content = $class->$action_name();
        if ($content === false) {
            $error = new View('404');
            $content = $error->result();
            $controller = 'error';
            $action = '404';
        }
        $tpl->set('{content}', $content);

        $tpl->set('{js_config}', Pm::getJsConfig($controller . '_' . $action));
        $tpl->set('{js_lang}', Lang::getJs());

        return $tpl->result();
    }

}

Вот сам кусок кода который отвечает:
PHP:
if (!$is_logged || !$user_group[$member_id['user_group']]['allow_pm']) {
            msgbox(Lang::get('error'), Lang::get('notallowed'));
            return;
        }
Хочу сделать чтобы не оповещение было как у меня на скрине первом, а перекидывало сразу на страницу, которую я создам в плагине в шаблонном файле, пытался сделать по принципу как 404 ошибка но ничего не выходит, пытался по разному попытаться задачу решить, но вот не получается, обращаюсь к вам, может есть более специалисты которые могут помочь.
 
Последнее редактирование:
Не проверял, но должно работать
PHP:
if (!$is_logged || !$user_group[$member_id['user_group']]['allow_pm']) {
    header('Location: http://local.host/404.html ');
    return;
}
 
Не проверял, но должно работать
PHP:
if (!$is_logged || !$user_group[$member_id['user_group']]['allow_pm']) {
    header('Location: http://local.host/404.html ');
    return;
}
Вот так только работает:
PHP:
if (!$is_logged || !$user_group[$member_id['user_group']]['allow_pm']) {
            header('Location: /404.html ');
            die();
        }
Но не совсем то что нужно, так как он берет с корня сайта html, а не tpl файл с шаблона с папки плагина. Это как запасной вариант, если ничего не придумать, хотелось просто чтобы вывод был страницы что сообщения не доступны для не зарегистрированного пользователя, чтобы было понятно вот от куда хотелось чтобы брался файл tpl для заглушки не зарегистрированному пользователю - /templates/AppMobile/pm/, но скорее всего наверно надо не в одной файле плагина допиливать чтобы вывести заглушку, пока с этим еще не разобрался.
 
хотелось просто чтобы вывод был страницы что сообщения не доступны для не зарегистрированного пользователя, чтобы было понятно вот от куда хотелось чтобы брался файл tpl для заглушки не зарегистрированному пользователю - /templates/AppMobile/pm/, но скорее всего наверно надо не в одной файле плагина допиливать чтобы вывести заглушку, пока с этим еще не разобрался.
Создай статистическую страницу [/admin.php?mod=static&action=addnew], пропиши данной странице нужный tpl файл, сможешь там использовать теги например
Код:
[group=5]Для того чтобы использовать персональные сообщения, Вам необходимо зарегистрироватся[/group]
[group=1]У админов ПМ  отключены :D[/group]
и сделай на неё редирект
 
Да все же нашел решение прямое, чтобы и адрес http://localhost/pm/ остался и шаблонный файл был в папке плагина, вот код может кому пригодится:
PHP:
if (!$is_logged || !$user_group[$member_id['user_group']]['allow_pm']) {
            $tpl = new View('no_dialog');
            return $tpl->result();   
        }
Далее создаем шаблонный файл no_dialog.tpl в /templates/{THEME}/pm и заполняем по своему усмотрению под свой шаблон.
Вот пример мой, как получилось
Screenshot 2
 
Да все же нашел решение прямое, чтобы и адрес http://localhost/pm/ остался и шаблонный файл был в папке плагина, вот код может кому пригодится:
PHP:
if (!$is_logged || !$user_group[$member_id['user_group']]['allow_pm']) {
            $tpl = new View('no_dialog');
            return $tpl->result();  
        }
Далее создаем шаблонный файл no_dialog.tpl в /templates/{THEME}/pm и заполняем по своему усмотрению под свой шаблон.
Вот пример мой, как получилось
Посмотреть вложение 211
А теперь представь, что по какой либо причине ты запрещаешь обычным зарегистрированным юзерам отправлять личку, оставляя её допустим только для VIP, модераторов и админов. И уже зареганые юзеры будут видеть это сообщение.)))
 
А теперь представь, что по какой либо причине ты запрещаешь обычным зарегистрированным юзерам отправлять личку, оставляя её допустим только для VIP, модераторов и админов. И уже зареганые юзеры будут видеть это сообщение.)))
Ну в планах у меня нет просто запрещать личные сообщения пользователям, кроме гостей, а так можно просто текст поменять, к примеру - ""Вы не можете использовать личные сообщения."
Или даже вот так сделать:
PHP:
/**
* Шаблон для не зарегистрированного пользователя - no_dialog.tpl
*/
if (!$is_logged) {
    $tpl = new View('no_dialog');
    return $tpl->result();
}

/**
* Шаблон если запрещено писать сообщение определенной группе - no_dostup.tpl.
*/
if (!$user_group[$member_id['user_group']]['allow_pm']) {
    $tpl = new View('no_dostup');
    return $tpl->result();
}
Можно конечно использовать тег к примеру {inform} создать, тем самым не нужен второй .tpl файл, а все будет в одном, только выводиться текст разный.
---------------------------------
Вот можно так:
PHP:
/**
* Шаблон для не зарегистрированного пользователя.
*/
if (!$is_logged) {
    $tpl = new View('no_dialog');
    $tpl->set('{inform}', Lang::get('nodostup'));
    return $tpl->result(); 
}

/**
* Шаблон если запрещено писать сообщение определенной группе.
*/ 
if (!$user_group[$member_id['user_group']]['allow_pm']) {
    $tpl = new View('no_dialog');
    $tpl->set('{inform}', Lang::get('notallowed'));
    return $tpl->result(); 
}
Найти в файле engine/mods/pm/language/Russian.lng:
Код:
'notallowed' => "К сожалению, Вы не можете использовать персональные сообщения на сайте",
Добавить ниже:
Код:
'nodostup' => "Данный раздел доступен только для зарегистрированных пользователей.",
И в шаблон в файл no_dialog.tpl вставить в нужное место {inform}
Ну это как способ, если не для всех группы отрыты личные сообщения.

Конечно лучше сделать в один запрос на проверку это все, но я еще не разобрался с этим.
 
Последнее редактирование:

Пользователи, просматривающие данную тему

Верх