hook_permission Drupal 7 разрешения на доступ для разных ролей
На прошлых уроках мы выводили страницы и блоки в разных местах, мы также использовали свойства 'access arguments', 'access callback' для задания ограничений на доступ к страницам. В этом уроке мы будем создавать возможность более гибкого редактирования правда доступа к операциям посредством страниц администрирования. Для этого мы будем использовать hook_permission() (в 6ом Друпале это был hook_perm()).
hook_permission()
Определяет разрешения для пользователей.
Hook_menu Drupal 7 создание страниц через модуль
В прошлом уроке мы рассмотрели как выводить информацию из БД с помощью API Drupal, а именно с помощью хуков hook_block_info(), hook_block_view(). В этом уроке мы будем выводить страницы, а точнее с помощью хука hook_menu, подключать страницу к другим частям друпала: меню, модулю перевода, шаблонам и т.д.
Drupal 7 hook_block_info() и hook_block_view() выводим информацию в блоке
В прошлом уроке мы создали модуль для Друпал 7, в этом уроке мы продолжим расширять возможности нашего модуля. Мы добавим вывод блока через хук hook_block_view(), а также hook_block_info(). В этом блоке будет информация о последних пользователях на сайте с ссылкой на их страницу.
Начну с описания hook_block_info():
Определяет все блоки создаваемые модулем.
Этот хук определяет в друпале какие блоки будут выводиться модулем и может описать настройки вывода блока.
Из чего состоит модуль Drupal 7?
Прежде чем начать создавать наш модуль я еще расскажу немного о возможностях API Друпала. API предоставляет широкие возможности для работы с Таксономией, нодами, пользователями, ввода и вывода из БД. Для взаимосвязи модулей и ядра Друпала, а также модулей между собой, в Друпале есть система хуков. Хук это обратный вызов функции, то есть когда выполнение кода доходит до хука, то происходит добавление кода нашей функции, которую мы дописываем в своем модуле.
Создаем модуль на Drupal, быстрый старт
Начнем с api.drupal.org, откройте страницу хука hook_node_presave(), который срабатывает перед добавлением ноды.
http://api.drupal.org/api/drupal/modules!node!node.api.php/function/hook_node_validate/7
Хуки позволяют нам встроить наш код в обычный ход вещей в друпале, добавлять проверки, поля данных, элементы форм и т.д.
Добавляем наш модуль в папку sites/all/modules:
Работа с БД в Drupal 7 - урок 12 - Условия запросов (WHERE, HAVING, LIKE)
Условие запроса позволяет выбрать только те записи, которые подходят под некоторые ограничения, например ноды созданные не раньше двух недель назад, термины в которых есть слово "друпал" и т.д. В SQL мы используем WHERE и HAVING чтобы задать ограничения на запросы SELECT, UPDATE, DELETE. В динамических запросах также реализован механизм для работы с условиями запросов. Этот механизм работает одинаково для всех трех типов запросов: выбора, обновления, удаления.
Концепция условных выражений
Условие содержится в специальном выражение задающем ограничение.
Работа с БД в Drupal 7 - урок 11 - Запросы слияния (MERGE)
Запросы слияния это специальный гибридный тип запросов. Хотя синтаксис для этих запросов был определен в SQL 2003, фактически нет БД поддерживающих этот синтаксис. Однако большинство БД предоставляют альтернативную реализацию использования специфического синтаксиса. Конструктор запросов слияния в Drupal абстрагирует концепцию слияния запроса в структуре объекта, так что объект может быть скомпилирован для каждой БД по разному с учетом ее специфики.
Работа с БД в Drupal 7 - урок 10 - Запросы удаления (DELETE)
Запросы удаления должны использовать конструктор запросов. Они начинаются с функции db_delete():
<?php $query = db_delete('node', $options); ?>
Это запрос на удаление будет удалять записи из таблицы node. Заметьте что не нужно оборачивать имя таблицы в фигурные скобки, конструктор запросов делает это сам. Запросы на удаление используют Fluent API, то есть все методы (кроме execute()) возвращают объект-запрос на себе (все как у запросов на обновление и вставку).
Работа с БД в Drupal 7 - урок 9 - Запросы обновления (UPDATE)
Запросы обновления должны всегда использовать конструктор запросов. Различные БД имееют специфические обработчики для LOB (Large OBject, такие как TEXT в MySQL) и поля BLOB (Binary Large OBject), так что уровень абстракции требуется для индивидуальных драйверов для реализации специфических обработчиков.
Запросы обновления должны начинаться с функции db_update():
Работа с БД в Drupal 7 - урок 8 - Запросы вставки (INSERT INTO)
Запросы вставки всегда должны использовать конструктор запросов. Некоторые БД требуют специальных обработчиков для LOB (Large OBject, такие как текст в MySQL) и BLOB (Binary Large OBject) полей, так что уровень абстракции необходим для индивидуальных драйверов БД для реализации подобных обработчиков.
Запросы вставки начинаются с использования функции db_insert():