Задание 2
Теперь из сайта, в котором будет находиться ссылка редактирования, давайте выведем все ноды. Сразу приступим к нашей функции, выглядеть все будет так:
php /** * Function main_table(). */ //объявляем функцию function main_table() { // создаем $header, где находится массив обозначающий строку, // ячейки имеют следующее содержимое $header_table_edit = array( // первая ячейка содержит текст 'Title' array('data' => t('Title')), // вторая ячейка имеет текст 'Link to edit' array('data' => t('Link to edit')) ); // делаем запрос к БД где выбираем номера нод и их названия с таблицы node $query = db_select('node', 'n') ->fields('n', array('nid', 'title')) ->execute() ->fetchAll(); //выводим все наши данные в конструкции foreach foreach ($query as $record_edit_table) { //выводим строчку которая содержит $rows_table_edit[] = // ячейки array( // а в первой ячейке находится запись array( // в ячейке у нас находится запись ссылки, где название ноды выводиться // с помощью $record_table_edit -> title, сама сылка будет у нас иметь такой вид // «'node/' . $record_table_edit -> nid» - тоесть мы будем переходить на адрес типа: // «наш_сайт/node/'номер ноды'» 'data' => l($record_table_edit -> title, 'node/' . $record_table_edit -> nid) ), // вторая ячейка имеет запись ссылки array( // ссылка у нас будет со значением 'edit node', при нажатии на нее мы будем // переходить на адрес типа: «наш_сайт / node / номер_ноды / edit» 'data' => l(t('edit node'), 'node/' . $record_table_edit -> nid . '/edit') ) ); } // создаем $caption с строковым значением 'Table for edit nodes' $caption_table_edit = t('Table for edit nodes'); // создаем функцию theme, которая имеет значение 'table' и ввыводит return theme('table', array( // шапка таблицы находиться в $header_edit_table 'header' => $header_table_edit, // тело таблицы есть у нас в $rows_edit_table 'rows' => $rows_table_edit, // и заголовок таблицы будет у нас в $caption_edit_table 'caption' => $caption_table_edit ) ); }
При запуске скрипта мы увидим следующее:
На сайте есть всего 3 статьи с выведенными названиями, и справа мы видим активную ссылку для редактирования определенного контента.
Дальше давайте сделаем аналогичную таблицу, только справа у нас будет ссылка на удаление ноды. Весь код таблицы будет иметь следующий вид:
php // у всех переменных в названии будет добавлена цифра 2 $header_table_delete = array( array('data' => t('Title')), array('data' => t('Link delete')) ); foreach ($query as $record_table_delete) { $rows_table_delete[] = array( array( 'data' => l($record_table_delete -> title,'node/' .$record_table_delete -> nid) ), array( // путь к удалению ноды 'data' => l(t('delete node'),'node/' .$record_table_delete -> nid . '/delete') ) ); } // название таблицы $caption_table_delete = t('Table for delete nodes'); // здесь в переменную помещаем таблицу с редактированием нод $table_edit = theme('table', array('header' => $header_table_edit, 'rows' => $rows_table_edit, 'caption' => $caption_table_edit ) ); // в этой переменной увидим функцию, которая буде $table_delete = theme('table', формировать таблицу с ссылкой на удаление ноды array('header' => $header_table_delete, 'rows' => $rows_table_delete, 'caption' => $caption_table_delete ) ); // возвращаем сначала таблицу с ссылками редактирования($table_edit), // дальше выводим таблицу с ссылками на удаление($table_delete). return "$table_edit" . "$table_delete";
Вид всей таблицы будет такой:
Задание 3
Задача которую нам предстоит выполнить сейчас это создание 2х выпадающих списков. Выпадающий список создается при помощи таких тегов как fieldset, legend и специальных классов CSS формирует выпадающий список. Давайте посмотрим сам скрипт.
drupal_add_library('system', 'drupal.collapse');
данная функция обязательна, поскольку здесь мы загружаем библиотеку, которая поможет подключить нам нужный класс.
php // создаем переменную для выпадающего списка // для выведение информации на счет таблицы редактирования нод $edit_element = array( // оглавление списка '#title' => t('Table for edit node'), // содержимое fieldset-а '#children' => t('This is main text in fieldset! Table contains link for edit node'), // список у нас складной '#collapsible' => true, // и свернутый '#collapsed' => true, // в атрибутах указываем, что надо использовать указанные классы '#attributes' => array( 'class' => array('collapsible', 'collapsed') ), ); // помещаем в $fieldset_edit функцию, которая выведет нам поле $fieldset_edit = theme('fieldset', array('element' => $edit_element)); // здесь все аналогично предыдущему скрипту $delete_element = array( '#title' => t('Table for delete node'), '#children' => t('This is main text in fieldset! Table contains link for delete node'), '#collapsible' => true, '#collapsed' => true, '#attributes' => array( 'class' => array('collapsible', 'collapsed') ), ); $fieldset_delete = theme('fieldset', array('element' => $delete_element)); // возвращаем наши данные return "$fieldset_edit" . "$fieldset_delete ";
В браузере мы увидим следующею картину:
Если же мы раскроем списки, то увидим следующее:
Как видно на иллюстрации, списки мы создали - здесь нет ничего сложного. Приступим к последнему заданию.
Задание 4
Нам нужно поместить вновь созданные таблицы в fieldset-списки. Если вы успели выполнить все предыдущие задания, то осилить 4е задание для Вас не составит особого труда. Давайте сразу же посмотрим код, который стоит поменять.
php $edit_element = array( '#title' => t('Table for edit node'), // здесь мы добавляем нашу таблицу редактирование нод '#children' => t('This is main text in fieldset! Table contains link for edit node') . $edit_table, '#collapsible' => true, '#collapsed' => true, '#attributes' => array( 'class' => array('collapsible', 'collapsed') ), ); $fieldset_edit = theme('fieldset', array('element' => $edit_element)); $delete_element = array( '#title' => t('Table for delete node'), // здесь мы добавляем нашу таблицу удаление нод '#children' => t('This is main text in fieldset! Table contains link for delete node') . $delete_table, '#collapsible' => true, '#collapsed' => true, '#attributes' => array( 'class' => array('collapsible', 'collapsed') ), ); $fieldset_delete = theme('fieldset', array('element' => $delete_element)); // и выводим только 2 fieldset-а return "$fieldset_edit" . "$fieldset_delete";
Результат можно увидеть на следующем скрине:
Вот и все, все задания сделаны.