Moodle: различия между версиями

Содержимое удалено Содержимое добавлено
м →‎Здравствуй Мир: оформление
оформление
Строка 41:
Для того чтобы наш блок мог что-то отображать, нам необходимо добавить метод<span style="color:grey;">(ы)</span>, который будет осуществлять вывод:
 
<source lang="php">
<code>
function get_content()
{
Строка 55:
}
} // Конец класса
?>
?> </code>
</source>
 
Давайте проанализируем этот метод, чтобы увидеть, что происходит.
Строка 67 ⟶ 68 :
Для того чтобы блок не был ''"мертвым"'' необходимо обеспечить возможность пользователям (участникам системы) настраивать содержимое блоков.<!-- В ''терминологии блоков'' это называется "настройка объекта".--> Для того чтобы добавить в наш блок возможность конфигурирования необходимо добавить в него еще один метод:
 
<source lang="php">
<code>
function instance_allow_config() {
return true;
}
</codesource>
 
Этого достаточно для того чтобы в системе Moodle появился пункт (иконка) "Настроить" для нашего блока. Но если вы попробуете его настроить у вас ничего не получится, нам необходимо описать что и как конфигурировать. Для этого нам необходимо создать еще один файл <tt>/blocks/simplehtml/'''config_instance.html'''</tt> (должен называться именно так) с следующим содержанием:
 
<source lang="php">
<code>
<table cellpadding="9" cellspacing="0">
<tr valign="top">
Строка 93 ⟶ 94 :
 
<?php use_html_editor(); ?>
</codesource>
 
Легко увидеть, что код выше предоставляет нам визуальный редактор текста для нашего блока с кнопкой сохранения. Мы можем обращаться к свойствам класса как <tt>'''$this->config->свойство'''</tt> и менять их из конфигурационной формы.
Строка 101 ⟶ 102 :
Теперь нам осталось только ''привязать'' наш конфигурационный файл к нашему блоку. Сделать это довольно просто, в фале ''/blocks/simplehtml/block_simplehtml.php'' находим:
 
<source lang="php">
<code>
$this->content = new stdClass;
$this->content->text = 'Здороваемся с Миром :)';
$this->content->footer = 'Завершающий вывод...';
</codesource>
 
и заменяем на:
 
<source lang="php">
<code>
$this->content = new stdClass;
$this->content->text = $this->config->text;
$this->content->footer = '';
</codesource>
 
Как вы заметили мы ничего не выводим с помощью ''$this->content->footer'', потому что в нашем случае нам просто нечего выводить в нижний завершающий блок.
Строка 121 ⟶ 122 :
Давайте теперь пойдем дальше и дадим возможность пользователям менять не только текст внутри нашего блока но и его заголовок. Для этого добавим еще один параметр в наш конфигурационный файл ''/blocks/simplehtml/config_instance.html'':
 
<source lang="php">
<code>
<tr valign="top">
<td align="right"><p>
Строка 130 ⟶ 131 :
</td>
</tr>
</codesource>
 
Теперь мы можем использовать параметр ''$this->config->title'', но нам он необходим в методе ''init()'', а как мы говорили раньше обращаться к конфигурационным данным в этом методе нельзя. Как же быть? Для решения этой проблемы нам понадобится еще один специальный метод:
 
<source lang="php">
<code>
function specialization()
{
Строка 146 ⟶ 147 :
}
}
</codesource>
 
Все, проблема решена. Вся мощь данного метода состоит в том, что он вызывается автоматически при создании оъекта класса после метода ''init'' и до любого другого действия. Таким образом - это идеальная функция для обработки конфигурационных данных.
Строка 160 ⟶ 161 :
Иногда в рамках одного курса необходимо использовать несколько одинаковых блоков <span style="color:grey; font-size:x-small;">''(одного типа)''</span>. Обеспечить возможность включения нескольких блоков на одной странице в moodle очень легко. Для этого необходим еще один короткий метод:
 
<source lang="php">
<code>
function instance_allow_multiple()
{
return true;
}
</codesource>
 
Теперь количество одинаковых блоков на странице не ограничено. Но стоит помнить, что несмотря на это администратор может запретить множественные вхождения для любого блока вручную, используя пункт ''модули → блоки → управление блоками'' на панели администрирования.
Строка 175 ⟶ 176 :
Если в '''moodle''' существует возможность [[#Множественные включения|множественного включения]] однотипных блоков, то разумно обеспечить возможность определения общих настроек для всех блоков одного типа. Для этого существует отдельные ''метод''.
 
<source lang="php">
<code>
function has_config()
{
return true;
}
</codesource>
 
Для этого метода необходим соответствующий файл для отображения самих настроек, он должен называться ''/blocks/simplehtml/config_global.html''. В нашем случае в нем будет одна опция ''«разрешить HTML»'':
 
<source lang="php">
<code>
<div style="text-align: center;">
<input type="hidden" name="block_simplehtml_strict" value="0" />
Строка 195 ⟶ 196 :
</p>
</div>
</codesource>
 
{{ambox|text=На заметку: английская документация по файлу ''settings.php'' не полная. Ее написание и перевод на русский язык ожидается в ближайшее время.}}
Строка 207 ⟶ 208 :
Есть более сложный способ получить и сохранить конфигурационные данные. Он реализуется с помощью метода ''config_save()'', синтаксис которого показан ниже:
 
<source lang="php">
<code>
function config_save($data)
{
Строка 217 ⟶ 218 :
return true;
}
</codesource>
 
Как мы можем видеть метод перебирает все значения ассоциативного массива ''$data'', который содержит значения всех переменных из обрабатываемой формы. Если мы хотим обойтись без одноименных полей в форме, то обрабатывающий скрипт будет выглядеть так:
 
<source lang="php">
<code>
function config_save($data)
{
Строка 231 ⟶ 232 :
return true;
}
</codesource>
 
=== чтение конфигурации ===
Строка 244 ⟶ 245 :
Если у нас есть несколько однотипных блоков, то мы можем задать для них глобальные свойства. А как сохранить конфигурацию каждого из них? Для этого существует метод ''instance_config_save()'' который по умолчанию выглядит так:
 
<source lang="php">
<code>
function instance_config_save($data)
{
Строка 255 ⟶ 256 :
$this->instance->id);
}
</codesource>
 
В нашем случае, если мы хотим предварительно обработать данные перед записью, мы можем использовать такую конструкцию:
 
<source lang="php">
<code>
function instance_config_save($data)
{
Строка 271 ⟶ 272 :
return parent::instance_config_save($data);
}
</codesource>
 
{{ambox|text='''На заметку:'''
Строка 282 ⟶ 283 :
Для начала, мы можем создать блок вообще без заголовка. Для этого используется следующий метод:
 
<source lang="php">
<code>
function hide_header()
{
return true;
}
</codesource>
 
Как мы уже говорили выше, мы '''не можем''' просто указать в качестве заголовка пустую строку внутри метода init(). Заголовок используется для идентификации блоков.
Строка 295 ⟶ 296 :
Для того чтобы сообщить Moodle предпочитаемую ширину для нашего блока, используется следующий метод:
 
<source lang="php">
<code>
function preferred_width()
{
Строка 301 ⟶ 302 :
return 200;
}
</codesource>
 
Все блоки заключены в &lt;div&gt; <span style="color:grey; font-size:x-small;">(&lt;table&gt; в более старых версиях)</span> контейнеры, атрибуты и CSS свойства которых мы можем изменять. Целесообразнее для блока создать CSS класс и прописать селектор с свойствами в CSS файле темы Moodle. Для этого нам необходимо использовать соответствующий метод, который возвращает ассоциативный массив атрибутов и значений:
 
<source lang="php">
<code>
function html_attributes()
{
Строка 313 ⟶ 314 :
);
}
</codesource>
 
Как видим мы добавили обработку события с использованием JavaScript и сохранили стандартный CSS класс кроме нашего собственного.
Строка 319 ⟶ 320 :
=== полезные примеры ===
 
<source lang="php">
<code>
function html_attributes()
{
Строка 325 ⟶ 326 :
return array('id' => 'inst'.$this->instance->id, 'class' => 'block_'. $this->name());
}
</codesource>
 
Мы можем переписать (перегрузить) этот метод так, чтобы кроме добавления своих атрибутов, сохранить старые (стандартные):
 
<source lang="php">
<code>
function html_attributes()
{
Строка 337 ⟶ 338 :
return $attrs;
}
</codesource>
 
== ''«Паранджа»'' ==
Строка 343 ⟶ 344 :
Трудно представить себе блок который был бы полезен во всех случаях, на всех страницах Moodle. Поэтому Moodle позволяет определить на каких страницах, в рамках каких курсов показывать блок. Для этого используется специальный метод, который возвращает ассоциативный массив ключи которого задают формат страниц, а значения (''true/false'') определяют показывать блок или нет:
 
<source lang="php">
<code>
function applicable_formats()
{
Строка 349 ⟶ 350 :
'course-view' => true);
}
</codesource>
 
В результате использования этого метода блок будет отображаться '''только''' на страницах курсов.
Строка 363 ⟶ 364 :
Мы можем использовать столько шаблонов, сколько захотим. Каждый шаблон может запрещать или разрешать отображение блока.
 
<source lang="php">
<code>
function applicable_formats()
{
return array('site' => true);
}
</codesource>
 
В этом случае блок будет отображаться только на главной странице Moodle. Так как шаблон '''all''' не указан, то отображение блока будет запрещено. Но шаблон '''site''' разрешает отображение для главной страницы.