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

Материал из MoodleDocs
Перейти к:навигация, поиск
Строка 170: Строка 170:
</code>
</code>


Теперь количество одинаковых блоков на странице не ограничено. Но стоит помнить, что несмотря на это администратор может запретить множественные вхождения для любого блока вручную, используя пункт ''модули → блоки'' на панели администрирования.
Теперь количество одинаковых блоков на странице не ограничено. Но стоит помнить, что несмотря на это администратор может запретить множественные вхождения для любого блока вручную, используя пункт ''модули → блоки → управление блоками'' на панели администрирования.
 
Есть еще один интересный момент, как только мы ввели метод ''instance_allow_multiple()'', больше нет необходимости явно прописывать метод ''instance_allow_config()'', он будет подразумеваться автоматически. Согласитесь нет смысла в нескольких блоках одного типа, если их нельзя настроить для разных целей. Зачем нам абсолютно одинаковые блоки.


== См. также ==
== См. также ==

Версия от 15:48, 19 апреля 2010

Moodle 1.5 и выше

Пошаговое руководство по созданию блоков

Автор источника: Jon Papaioannou (pj@moodle.org)

Данное руководство предназначено для разработчиков которые работают над своими блоками для Moodle. Руководство написано для версии Moodle 1.5 но постоянно обновляется.

Введение

Блоки - это стандартные контейнеры для отображения виджетов на страницах Moodle. В этом руководстве мы рассмотрим несуществующий блок "SimpleHTML". Подразумевается, что вcе пути начинаются из домашней директории Moodle.

Здравствуй Мир

Для создания блока в Moodle в большинстве случаев достаточно написать один скрипт. Для начала в директории blocks/имя_блока/ создаем наш скрипт имя_блока. Например если наш блок будет носить имя simplehtml, путь к скрипту будет иметь вид /blocks/simplehtml/block_simplehtml.php. Теперь начнем писать сам код:

<?php class block_simplehtml extends block_base {

 function init() {
   $this->title   = get_string('simplehtml', 'block_simplehtml');
   $this->version = 2004111200;
 }
• • •

}

Сначала мы объявляем класс, он должен обязательно объявлятся таким образом как показано, т. к. является расширением автоподключаемого класса, который находиться в файле /blocks/moodleblock.class.php В дальнейшем мы можем (и даже должны) изменять только часть simplehtml, все остальное является стандартным и стандартизированным.

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

  • $this->title это заголовок, отображаемый в строке заголовка нашего блока. Мы можем назвать его как угодно. В нашем случае мы берем заголовок из языкового файла, который прилагается к нашему блоку. Более подробно мы рассмотрим этот метод позже. Если вы хотите использовать блок без заголовка, назначьте методу любое значение но не пустую строку! Далее мы рассмотрим как отключить отображение заголовка.
  • $this->version это версия нашего блока. Используется скриптом обновления (англ. upgrade script

nu i??). В нашем случае мы установили версию как дату ГГГГММДД00, для простоты.

Вернутся к началу статьи ↑


Вывод

Для того чтобы наш блок мог что-то отображать, нам необходимо добавить метод(ы), который будет осуществлять вывод:

 function get_content() {
   if ($this->content !== NULL) {
     return $this->content;
   }
   $this->content         =  new stdClass;
   $this->content->text   = 'Здороваемся с Миром :)';
   $this->content->footer = 'Завершающий вывод...';

   return $this->content;
 }

} // Конец класса ?>

Давайте проанализируем этот метод, чтобы увидеть, что происходит.

Прежде всего, мы должны произвести вывод $this->content только в том случае, если оно не равно NULL, в противном случае сформируем content. Это делается для экономии ресурсов и ускорения обработки блоков. Мы можем выводить HTML как в text, так и в footer.

На этом этапе наш блок уже может быть автоматически установлен в систему Moodle. Открываем страницу администратора, нажимаем Уведомления в блоке Администрирование и наш блок появляется на главной странице.

Вернутся к началу статьи ↑


Конфигурирование

Для того чтобы блок не был "мертвым" необходимо обеспечить возможность пользователям (участникам системы) настраивать содержимое блоков. Для того чтобы добавить в наш блок возможность конфигурирования необходимо добавить в него еще один метод:

function instance_allow_config() {

 return true;

}

Этого достаточно для того чтобы в системе Moodle появился пункт (иконка) "Настроить" для нашего блока. Но если вы попробуете его настроить у вас ничего не получится, нам необходимо описать что и как конфигурировать. Для этого нам необходимо создать еще один файл /blocks/simplehtml/config_instance.html (должен называться именно так) с следующим содержанием:

      <?php print_string('configcontent', 'block_simplehtml'); ?>:
      <?php print_textarea(true, 10, 50, 0, 0, 'text', $this->config->text); ?>
     <input type="submit" value="<?php print_string('savechanges') ?>" />

<?php use_html_editor(); ?>

Легко увидеть, что код выше предоставляет нам визуальный редактор текста для нашего блока с кнопкой сохранения. Мы можем обращаться к свойствам класса как $this->config->свойство и менять их из конфигурационной формы.

Вы также наверное заметили, что мы можем использовать любые элементы формы, включая кнопки и их значения будут переданы в скрипт как $this->config->свойство и их можно использовать в любом месте кроме метода init(). При этом нет необходимости открывать и закрывать форму дескрипторами <form>, всю грязную работу сделает Moodle.

Теперь нам осталось только привязать наш конфигурационный файл к нашему блоку. Сделать это довольно просто, в фале /blocks/simplehtml/block_simplehtml.php находим:

$this->content         =  new stdClass;
$this->content->text   = 'Здороваемся с Миром :)';
$this->content->footer = 'Завершающий вывод...';

и заменяем на:

$this->content = new stdClass;
$this->content->text   = $this->config->text;
$this->content->footer = ;

Как вы заметили мы ничего не выводим с помощью $this->content->footer, потому что в нашем случае нам просто нечего выводить в нижний завершающий блок.

Вернутся к началу статьи ↑


Заголовок (specialization)

Давайте теперь пойдем дальше и дадим возможность пользователям менять не только текст внутри нашего блока но и его заголовок. Для этого добавим еще один параметр в наш конфигурационный файл /blocks/simplehtml/config_instance.html:

<?php print_string('configtitle', 'block_simplehtml'); ?>:

   <input type="text" name="title" size="30" value="<?php echo $this->config->title; ?>" />

Теперь мы можем использовать параметр $this->config->title, но нам он необходим в методе init(), а как мы говорили раньше обращаться к конфигурационным данным в этом методе нельзя. Как же быть? Для решения этой проблемы нам понадобится еще один специальный метод: function specialization() { if(!empty($this->config->title)){ $this->title = $this->config->title; }else{ $this->config->title = 'Заголовок по умолчанию ...'; } if(empty($this->config->text)){ $this->config->text = 'Текст по умолчанию ...'; } } Все, проблема решена. Вся мощь данного метода состоит в том, что он вызывается автоматически при создании оъекта класса после метода init и до любого другого действия. Таким образом - это идеальная функция для обработки конфигурационных данных. Вернутся к началу статьи ↑

"Прятки"

Теперь мы всегда сможем видеть наш блок на страницах moodle. Оказывается, что не всегда. Бывают такие случаи, когда блок вообще нет смысла показывать. Что будет отображать блок "Последние действия", если в последнее время не было никаких действий. В moodle любой блок будет скрыт если он ничего не содержит, т. е. если $this->content->text и $this->content->footer не содержат никаких значений. При обработке блока каждый раз вызывается метол is_empty(), который и проверяет необходимость его отображения.

Заметьте, что заголовок не имеет никакого значения. Блок считается пустым, если в его теле пусто.

Множественные включения

Иногда в рамках одного курса необходимо использовать несколько одинаковых блоков (одного типа). Обеспечить возможность включения нескольких блоков на одной странице в moodle очень легко. Для этого необходим еще один короткий метод:

function instance_allow_multiple() {

 return true;

}

Теперь количество одинаковых блоков на странице не ограничено. Но стоит помнить, что несмотря на это администратор может запретить множественные вхождения для любого блока вручную, используя пункт модули → блоки → управление блоками на панели администрирования.

Есть еще один интересный момент, как только мы ввели метод instance_allow_multiple(), больше нет необходимости явно прописывать метод instance_allow_config(), он будет подразумеваться автоматически. Согласитесь нет смысла в нескольких блоках одного типа, если их нельзя настроить для разных целей. Зачем нам абсолютно одинаковые блоки.

См. также

  • Developer FAQ – часто задаваемые вопросы, особенно полезны для новичков Moodle
  • Moodle tracker - bug доклады, специальные вопросы и другие виды выходов
  • General developer forum
  • CVS code – просмотр кодов Moodle через web
  • Cross reference - phpxref – выход для просмотра ресурсов кода в Moodle
  • Moodle PHP doc reference – автоматически производимая документация
  • Database Schema – для новых публикаций
  • Development news and discussion раздел курса Moodle Using
  • YUI documentation - YUI официальная AJAX библиотека в Moodle.
  • Setting up Eclipse for Moodle development - Eclipse грандиозное издание для проявления php навыков, если Вы если вы сможете выработать план установки .
  • Unmerged files – изменение устойчивого направления в CVS которое может быть не совместимо с HEAD


Вернутся к началу статьи ↑