Как в шаблоне Moodle определить, является ли пользователь администратором или обычным пользователем?

Привет! Я использую тему <b>universe</b> в Moodle и хочу добавить два скрипта: один для администраторов, другой для пользователей. Я нашел файл <b>head.mustache</b>, который, похоже, отвечает за тег head. 

В этом файле я нашел следующую конструкцию: 
<pre><code class="html">{{^isadmin}}
&lt;script&gt;
  // скрипт 1
&lt;/script&gt;
{{/isadmin}}
{{#isadmin}}
&lt;script&gt;
  // скрипт 2
&lt;/script&gt;
{{/isadmin}}</code></pre>

Теперь мне нужно узнать, где в коде осуществляется рендеринг этого файла, чтобы включить признак isadmin в его контекст. Также мне интересно, правильно ли я определил признак администраторов и пользователей следующим образом: 
<pre><code class="php">global $USER, $PAGE;

$context = [
    'isadmin' =&gt; is_siteadmin($USER)
];

echo $OUTPUT-&gt;render_from_template('filename', $context);</code></pre>
  • 20 ноября 2024 г. 14:43
Ответы на вопрос 1
Да, вы на правильном пути!

Чтобы определить, является ли пользователь администратором, и передать этот признак в контекст вашего шаблона в Moodle, вы можете использовать функцию `is_siteadmin()`, как вы уже сделали. Ваш код выглядит правильно, за исключением некоторых мелких деталей. 

Вот правильный способ его использования:

```php
global $USER, $PAGE;

// Проверяем, является ли пользователь администратором
$isadmin = is_siteadmin($USER->id);

// Создаем контекст для шаблона
$context = [
    'isadmin' => $isadmin,
];

// Рендеринг файла head.mustache (или другого шаблона)
echo $OUTPUT->render_from_template('your_template_name', $context);
```

Важно заменить `'your_template_name'` на фактическое имя вашего шаблона, или `'core/head'`, если вы редактируете конкретный файл `head.mustache`.

### Где рендерится head.mustache

Чаще всего файл `head.mustache` рендерится в функции `page_init()` в файле `lib/pagelib.php`. Эта функция отвечает за инициализацию страницы перед ее рендерингом. Однако конкретно в контексте вашей темы и того, где именно вы хотите вмешаться в процесс, вам нужно будет найти то место, откуда вызывается `output_page`, чтобы добавить свои скрипты.

Обычно, это может быть в классе страницы, который наследует функциональность от `moodle_page`, или где-то в обработке модуля, который вы разрабатываете.

### Важные моменты

1. **Кеширование**: Учтите, что если вы вносите изменения в шаблоны, вам может понадобиться сбросить кэш Moodle, чтобы ваши изменения вступили в силу. 

2. **Безопасность**: Убедитесь, что ваши скрипты безопасны и соответствуют стандартам безопасности Moodle.

3. **Тестирование**: После добавления новых скриптов всегда тестируйте, чтобы убедиться, что они работают корректно под разными учетными записями (администраторов и обычных пользователей).

Можно также использовать `is_user_loggedin()` для проверки, вошел ли пользователь в систему, чтобы избежать ошибок, связанных с проверкой `is_siteadmin()` для неавторизованных пользователей.
Похожие вопросы