Решено Один extender для классов

Статус
В этой теме нельзя размещать новые ответы.

grisha2217

Проверенные
Сообщения
913
Решения
6
Реакции
1,389
Баллы
5,715
Всем привет, планирую написать пару плагинов на ксен, которые будут независимы друг от друга, но при этом не нести большой нагрузки.
Сейчас я использую единый класс extender для множества своих плагинов, повесил обработчик на событие на load_class
PHP:
const AutoBumpThread = 'Lolzteam_AutoBumpThread';
const ArbitrageSystem = 'Lolzteam_AS';
const LolzteamRoot = 'Lolzteam';
const SearchByIp = 'Lolzteam_SearchByIp';
const FSD = 'Lolzteam_ForumSearchThreads';

class Lolzteam_EventListener_Extender
{
    public static function Extend($class, &$extend)
    {
        if ($class == 'XenForo_DataWriter_User')
        {
            $extend[] = self::_getExtendingClass(LolzteamRoot, $class);
        }

        if ($class == 'XenForo_ControllerPublic_Report')
        {
            $extend[] = self::_getExtendingClass(LolzteamRoot, $class);
        }

        if ($class == 'XenForo_Model_Report')
        {
            $extend[] = self::_getExtendingClass(LolzteamRoot, $class);
        }

        if ($class == 'XenForo_ReportHandler_Post')
        {
            $extend[] = self::_getExtendingClass(LolzteamRoot, $class);
        }

        if ($class == 'XenForo_ControllerPublic_Thread')
        {
            $extend[] = self::_getExtendingClass(AutoBumpThread, $class);
            $extend[] = self::_getExtendingClass(ArbitrageSystem, $class);
            $extend[] = self::_getExtendingClass(FSD, $class);
        }

        if ($class == 'XenForo_ControllerPublic_Forum')
        {
            $extend[] = self::_getExtendingClass(ArbitrageSystem, $class);
            $extend[] = self::_getExtendingClass(FSD, $class);
        }

        if ($class == 'XenForo_ControllerPublic_Member')
        {
            $extend[] = self::_getExtendingClass(ArbitrageSystem, $class);
        }

        if ($class == 'XenForo_ControllerPublic_Search')
        {
            $extend[] = self::_getExtendingClass(SearchByIp, $class);
        }

    }

    protected static function _getExtendingClass($prefix, $class)
    {
        return str_replace('XenForo', $prefix, $class);
    }
}


По-моему, это удобная штука: хочешь расширить класс - просто добавил сюда нужный класс для поиска и класс, который должен быть вызван. А если создавать обработчик под каждый плагин и создавать еще файл для этого... слишком геморно плюс лишние файлы вызываются каждый раз (если много плагинов), хотелось бы реализовать как-нибудь единый файлик, чтобы можно было удобно расширять классы. У кого есть идеи?
 
.какой-то пиздец.. Достаточно такого кода:

PHP:
<?php

class BS_Addon_Listener
{
    const _ = 'BS_Addon_';
    
    public static function lc($class, array &$extend)
    {
        $extend[] = self::_ . $class;
    }
}

Универсальный расширитель будет костылём, потому что нужно будет определять аддон.
 
BINGO_SHARK, разве движок не будет пытаться 1000 раз загружать несуществующий класс? Например, этот метод же вызывается при любом вызове динамического класса, и следовательно, движок будет делать лишние операции для ненужных классов.
 
Сейчас я использую единый класс extender для множества своих плагинов, повесил обработчик на событие на load_class
Очень плохая идея. Для каждого плагина должен быть оделенный файл. Так как плагины должны быть не зависимы друг от друга и изменение одного не должно приводить к правке файлов других плагинов.
И я вообще не понимаю как вы собираетесь подключать этот файл, либо будет ставиться с одним плагином который обязательно должен быть, либо руками в режиме разработки подключать.
 
BINGO_SHARK, я не видел нигде, чтобы это поле было чем-то заполнено, что туда вписывать? Нужные классы для расширения через пробел?

Kolya groza morey, в этом и проблема, что я выложил код, который не решает проблему зависимости плагинов друг от друга.
И я вообще не понимаю как вы собираетесь подключать этот файл
Ну планировалось иметь мини плагин "Core", который будет содержать этот Extened
 
@Kolya groza morey, в этом и проблема, что я выложил код, который не решает проблему зависимости плагинов друг от друга.
В каждом плагине свой файл. И советую уже понемногу переходить на вторую ветку там вообще этих файлов нет
 
Статус
В этой теме нельзя размещать новые ответы.
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу