Как анализировать PHP код Moodle при обучении

Раздел: Обучение -> LMS

Основные способы просмотра PHP кода в Moodle

Как наиболее эффективно просмотреть выполнение PHP кода Moodle?

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

Настройка:

  1. Открыть файл config.php в корне Moodle.
  2. Добавить строки после установки $CFG:
$CFG->debug = (E_ALL | E_STRICT); // выводить все ошибки
$CFG->debugdisplay = 1;           // показывать на экране
$CFG->debugsmtp = 1;              // лог SMTP
$CFG->perfdebug = 15;             // статистика производительности
$CFG->debugpageinfo = 1;          // информация о странице

View php moodle (просмотр moodle php)

Также можно использовать функцию print_object($var) или var_dump($var) внутри плагина или темы для вывода содержимого переменных.

Типичные проблемы:

  • Ошибки не отображаются из-за кэширования - очистить кэш в админке или удалить файлы в moodledata/cache.
  • После включения debugdisplay сайт может стать медленнее - использовать только на тестовых серверах.
  • Пользователи видят ошибки - отключить debugdisplay в продакшене.

Как посмотреть сгенерированный HTML код страницы Moodle?

Используйте браузерные инструменты: правая кнопка мыши - «Просмотреть код страницы» или F12. Вы увидите HTML, CSS и JavaScript, которые PHP отправил клиенту. Это полезно для анализа структуры, но не показывает сам PHP код.

Проблема: некоторые элементы генерируются динамически через JavaScript - требуется просмотр через инспектор элементов после полной загрузки.

Как выполнить пошаговую отладку PHP кода Moodle с помощью xdebug?

Установите xdebug на сервер, настройте IDE (например, PhpStorm) для приёма отладочных соединений. В файле config.php добавьте:

$CFG->xdebug = 1; // включить поддержку xdebug (Moodle 4.0+)

Установите точки останова в IDE и запустите страницу. Выполнение остановится на заданной строке.

Проблема: xdebug не останавливается - проверьте настройки IDE, наличие расширения xdebug, параметр remote_autostart. Также возможно вмешательство reverse proxy.

Как просмотреть исходные PHP файлы Moodle на сервере?

Подключитесь по SSH или используйте файловый менеджер хостинга. Файлы находятся в корневой папке Moodle: /var/www/moodle. Структура каталогов соответствует компонентам: lib/, mod/, blocks/, course/ и т.д. Просматривайте файлы с помощью редактора или команды cat.

ssh user@server
cd /var/www/moodle
cat mod/forum/index.php | head -50

Проблема: нет доступа к серверу - используйте локальную копию Moodle из Git или архива.

Как создать собственный блок для вывода PHP данных?

Разработайте простой блок Moodle, который выводит содержимое переменных. Например, создайте файл blocks/mytest/block_mytest.php:

<?php
class block_mytest extends block_base {
    public function init() {
        $this->title = get_string('pluginname', 'block_mytest');
    }
    public function get_content() {
        global $DB, $USER;
        $this->content->text = 'Текущий пользователь: ' . fullname($USER) . '<br>';
        $courses = $DB->get_records('course', null, 'id', 'id, fullname', 0, 5);
        $this->content->text .= 'Последние курсы: ' . print_object($courses, true);
        return $this->content;
    }
}

Установите блок через админку и разместите на странице. Вы увидите вывод PHP данных.

Проблема: блок не отображается - проверьте права доступа, кэш контекста, наличие файла db/access.php.

Расширенные примеры просмотра PHP кода Moodle

Пример 1: Полная конфигурация отладки в config.php

Пример
// Включение всех видов отладки Moodle
$CFG->debug = E_ALL | E_STRICT;
$CFG->debugdisplay = 1;
$CFG->debugsmtp = 1;
$CFG->perfdebug = 15;
$CFG->debugpageinfo = 1;
$CFG->debugvalidators = 1;
$CFG->debugdeveloper = 1; // дополнительная отладочная информация для разработчиков
Результат: на каждой странице Moodle внизу появится панель отладки с информацией о времени выполнения, запросах к БД, включенных темах и т.д.

Пример 2: Использование print_object в скрипте CLI

Пример
#!/usr/bin/env php
<?php
require_once('/var/www/moodle/config.php');
global $DB;
$courses = $DB->get_records('course', array('visible' => 1), 'fullname', 'id, fullname, shortname');
echo "Количество видимых курсов: " . count($courses) . "\n";
print_object($courses);
Результат: выводит массив объектов курсов с ID, полными названиями и короткими именами в отформатированном виде.

Пример 3: Настройка xdebug для Moodle в PhpStorm

Пример
В config.php добавьте:
$CFG->xdebug = 1;

Файл php.ini (или .user.ini):
[xdebug]
zend_extension=xdebug.so
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=127.0.0.1
xdebug.client_port=9003
xdebug.idekey=PHPSTORM
xdebug.log=/tmp/xdebug.log
Результат: при запуске страницы в браузере с параметром XDEBUG_SESSION_START=PHPSTORM IDE перехватывает выполнение и останавливается на точках останова.

Пример 4: Просмотр шаблонов Mustache и их PHP контекста

Пример
Создайте файл темы /theme/yourtheme/templates/mytest.mustache:
<div>
    <h2>{{title}}</h2>
    <p>{{description}}</p>
</div>

В PHP (например, в lib.php темы):
$data = ['title' => 'Тестовый заголовок', 'description' => 'Описание из шаблона'];
echo $OUTPUT->render_from_template('theme_yourtheme/mytest', $data);
Результат: на странице выведется HTML с подставленными данными. Чтобы просмотреть, какие данные передаются в шаблон, можно временно вывести $data с помощью var_dump.

Пример 5: Использование get_string и debugging для просмотра языковых строк

Пример
$string = get_string('modulename', 'mod_forum');
echo "Строка: " . $string . "\n";
if (debugging('', DEBUG_DEVELOPER)) {
    echo "Значение из langconfig: " . get_string('thislanguage', 'langconfig');
}
Результат: выводит локализованную строку "Форум" и дополнительную отладочную информацию.

Просмотр Moodle PHP - comments

En
View php moodle (php)