Drupal 7, Создаем более сложный модуль по выводу информации

test

Итак, сейчас мы сделаем более сложный вариант модуля чем в предшествующей статье lsoft.daraba.ru/node/173.

Мы создаем модуль с вложенным меню и выводом информации о пользователях и опубликованных нодах, в соответствующих таблицах мы простым методом будем ссылаться на соответсвенно сам материал/пользователя. Статья является предпосылкой к более сложной статье создающей уже действительно полезный модуль.

Итак, создаем как и положенно, дирректорию ./sites/all/modules/advinfo, файл advinfo.info:

; $Id$
name = AdvInfo
description = Advanced Info
package = Samples
version = 0.1
core = 7.x

advinfo.module:

<?php

//Наше меню
function advinfo_menu()
{

//Основной элемент меню
    $items['advinfo']=array(
    'title'=>t('Advanced Info'),
    'page callback'=>'nodeslist_form',
    'access callback'=>'user_access',
    'access arguments'=>array('access content'),
    'expanded'=>TRUE
    );

//вложенный элемент меню ведущий на список пользователей
    $items['advinfo/nodeslist']=array(
    'title'=>t('Nodes List'),
    'description'=>t('List of nodes'),
    'page callback'=>'nodeslist_form',
    'access callback'=>'user_access',
    'access arguments'=>array('access content'),
    'type'=>MENU_NORMAL_ITEM
    );

//вложенный элемент меню ведущий на список материалов
    $items['advinfo/userslist']=array(
    'title'=>t('Users List'),
    'description'=>t('List of users'),
    'page callback'=>'userslist_form',
    'access callback'=>'user_access',
    'access arguments'=>array('access content'),
    'type'=>MENU_NORMAL_ITEM
    );
    return $items;
}
//Ф-ция формирующая список материалов
function nodeslist_form()
{
    $perpage = 10;
    //шапка нашей таблицы
    $header = array(
    array('data'=>'Заголовок', 'field'=>'title'),
    array('data'=>'Создано', 'field'=>'created'),
    array('data'=>'Тип', 'field'=>'type'),
    );
    //получаем результат выборки из БД о нашим материалах
    $nodes = db_select('node','n')
    ->fields('n', array('title','created','type','nid'))
    ->extend('PagerDefault')
    ->limit(10)
    ->extend('TableSort')
    ->orderByHeader($header)
    ->execute();
   
    global $base_url;
    $rows = array();

//создаем массив который выведим в таблицу после шапки
    foreach ($nodes as $node)
    {
        $rows[] = array(
        l($node->title,$base_url ."/node/". $node->nid), //наша ссылка указывающая на конкретную ноду
        format_date($node->created), //дата публикации
        $node->type //тип ноды
        );
    }
    //выводим шапку и массив таблицей
    $output = theme('table', array('header'=>$header,'rows'=>$rows));
    $output .= theme('pager'); //листалка результатов
    return $output;
}

//ф-ция вывода списка пользователей
function userslist_form()
{
    $perpage = 10;
    //наша шапка таблицы
    $header = array(
    array('data'=>'UID', 'field'=>'uid'),
    array('data'=>'Имя', 'field'=>'name'),
    array('data'=>'Был', 'field'=>'login'),
    array('data'=>'e-mail', 'field'=>'mail'),
    array('data'=>'Активен', 'field'=>'status'),
    array('data'=>'Подпись', 'field'=>'signature'),
    );
    //получаем результат выборки из таблицы по полям uid, name, login, mail, status, signature
    $usrs = db_select('users','usrs')
    ->fields('usrs', array('uid','name','login','mail','status','signature'))
    ->extend('PagerDefault')
    ->limit(10)
    ->extend('TableSort')
    ->orderByHeader($header)
    ->execute();
   
    global $base_url;
    $rows = array();

//создаем сформированный под таблицу массив пользователей
    foreach ($usrs as $usr)
    {
        if ($usr->uid!=0) //uid == 0 говорит что пользователь гость, значит пропускаем
        $rows[] = array(
        check_plain($usr->uid),
        l($usr->name,$base_url . "/user/".$usr->uid),//формируем ссылку на пользователя вида www.site.st/user/uid
        format_date($usr->login),
        check_plain($usr->mail),
        check_plain($usr->status),
        check_plain($usr->signature)
        );
    }
    //вывод шапки и массива в таблицу
    $output = theme('table', array('header'=>$header,'rows'=>$rows));
    $output .= theme('pager');

    return $output;
}

Ну вот собственно и все, достаточно просто, по аналогии можно сделать другие нужные выборки в таблицу. =)

Категория: 

Делитесь с друзьями в социальных сетях! Оставляйте комментарии!

Share/Save

Это Вам так же может быть интересно!