Кастомизация

Класс для внедрения пользовательских разработок – Custom – определен в файле includes/custom.php.

Этот класс позволяет подключить файл из текущей темы, если он там есть. Кроме того, класс обеспечивает частичную кастомизацию, которая позволяет веб-мастеру выносить свои доработки из файла, который он изменяет.

Методы

void init ([string $name = '']) – Обнуляет внутрений кеш класса.

  • string $name: название темы, если задано, то только эта тема считается примененной

Пример:

// инициация класса Custom сразу после подключения
include_once ABSOLUTE_PATH.'includes/custom.php';
Custom::init();

string name ([string $name = '']) – Возвращаяет название первой примененной темы.

  • string $name: название темы, если задано, фунция задает тему как первую применную для текущего сеанса

string add (string $name) – Добавляет название примененной темы.

  • string $name: название темы

string del ([string $name = '']) – Исключает название примененной темы.

  • string $name: название темы

string rename ([string $name = ''], [string $old_name = '']) – Переименовывает название примененной темы.

  • string $name: новое название темы
  • string $old_name: старое название темы

array names () – Возвращаяет названия примененных тем.

void inc (string $path) – Подключает PHP-файл.

  • string $path: путь до файла относительно корня сайта

Пример:

// подключаем файл includes/sms.php или файл
// custom/my_theme/includes/sms.php, если файл существует
// и тема my_theme является текущей
Custom::inc('includes/sms.php');

boolean exists (string $path_to_file) – Проверяет существует ли файл.

  • string $path_to_file: путь до файла относительно корня сайта

Пример:

if(Custom::exists('includes/sms.php'))
{
    echo
'ok';
}
else
{
    echo
'fail';
}
// выведет ok, если файла есть в основном хранилище скриптов
// или в текущей теме

string path (string $path_to_file) – Возвращает путь до файла.

  • string $path_to_file: путь до файла относительно корня сайта

Пример:

echo Custom::path('includes/sms.php');
// выведет:
// custom/my_theme/includes/sms.php, если такой файл существует
// и тема my_theme является текущей
// или includes/sms.php в ином случае

// заменяем Custom::inc('includes/sms.php');
// если нужно, чтобы переменные, определенные файл были доступны
// в контексте файла, в котором идет подключение
include_once(Custom::path('includes/sms.php'));

array read_dir (string $path) – Читает директорию.

  • string $path: путь до директории относительно корня сайта

Пример:

// читает папку modules в основом хранилище файлов и добавляет
// файлы и директории из текущей темы
$rows = Custom::read_dir('modules');
print_r($rows);
/* выведет:
Array
(
    [0] => ab
    [1] => admin
    [2] => attachments
    ...
    [45] => wishlist
)
*/

array protected_list ([boolean $custom = false]) – Возвращает файлы, не подлежащие кастомизации.

  • boolean $custom: выводит только кастомизированные файлы

string version_core () – Возвращает версию сборки.

Частичная кастомизация

Частичная кастомизация позволяет выносить доработки из файла, который изменяется. Для этого все доработки нужно размещать в файле с таким же названием, но суффиксом .custom.

Пример:

Для файла modules/news/news.model.php кастомизированный файл modules/news/news.model.custom.php.

В файле частичной кастомизации можно переопределить классы, свойства и функции классов. Также можно добавить код в начало или конец.

Для этого в кастомизированном файле определяется класс с аналогичным оригиналу именем. В классе определяются свойства и функции.

Свойства могут иметь следующие приставки:

  • replace – переопределение свойства;
  • new – новое свойство.

Функции могут иметь следующие приставки:

  • replace – переопределение функции;
  • new – новая функция;
  • before – добавить код в начало функции;
  • after – добавить код в конец функции.

Пример:

Дорабатываем файл modules/users/users.inc.php. Для этого создаем файл modules/users/users.inc.custom.php.

следующего содержания:

class Users_inc extends Model
{
    
// делаем свойство класса публичными и задаем ему значение по умолчанию
    
replace public $user = NULL;

    
// добавляем новое свойство класса
    
new public $age;

    
// добавляем код в начало функции set()
    
before public function set ($user)
    {
        
$current_user_id = $user->id;
    }

    
// заменяем функцию logout()
    
replace public function logout ()
    {
        return
true;
    }

    
// добавляем код в конце функции _log()
    
after private function _log()
    {
        
$_SESSION["user_log"] = true;
    }

    
// добавляем новую функцию check
    
new private function check()
    {
        
$_SESSION["check"] = true;
    }
}

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

Если на сайте используется несколько примененных тем, то порядок подключения файлов частичной кастомизации соответствует дате подключения тем. То есть сначала на основной файл накладывается файл частичной кастомизации из первой примененной темы. Затем на сгенерированный файл накладывается файл частичной кастомизации из второй примененной темы. Таким образом при приставки after, before могут быть использованы в двух темах и код будет учитываться из обоих тем. А приставка replace из последней применной темы заменит код, перекрыв изменения из предыдущих тем.

Ваши комментарии и дополнения
24 декабря 2019 г.
вот только синтаксические анализаторы редакторов эти прибавки сбивают с толку и присутствуют постоянные напоминалки что в "тех" файлах якобы ошибки
05 января 2023 г.
Сейчас подумал, что можно бы было всё это реализовать как наследование, тогда бы синтаксические анализаторы не ругались бы и вообще было бы быстрее и проще

Зарегистрируйтесь или авторизируйтесь для того, чтобы оставить комментарий.