/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'controller class' => 'RoomController',
'base table' => 'room',
'uri callback' => 'room_uri',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
),
'static cache' => TRUE,
'bundles' => array( // バンドルの指定
'room'=> array( // バンドル名: room
'label' => 'Room',
'admin' => array(
'path' => 'admin/structure/room/manage', // バンドルの管理URI
'access arguments' => array('administer rooms'),
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Full Room'),
'custom settings' => FALSE,
),
)
);
return $room_info;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// 管理が面にメッセージ表示のみ
$items['admin/structure/room/manage'] = array(
'title' => 'Room Admin',
'description' => 'Manage Room structure',
'page callback' => 'room_info',
'access arguments' => array('administer rooms'),
);
// 個別Room表示
$items['room/%entity_room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
// 新規Room作成
$items['room/add'] = array(
'title' => t('Add Room'),
'page callback' => 'room_add',
'access arguments' => array('create room'),
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* create "add room" form
*/
function room_add() {
$room = (object) array (
'rid' => '',
'type' => 'room',
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
field_attach_form('room', $room, $form, $form_state);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate('room', $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit('room', $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
return entity_get_controller('room')->save($room);
}
function room_info() {
return t('Welcome to the administration page for your rooms!');
}
function room_page_title($room){
return $room->room_number;
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
$return['room']['room'] = array(
'form' => array(
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 1,
),
),
);
return $return;
}
function room_uri( $room ){
return array(
'path' => 'room/' . $room->rid,
);
}
class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* Implements hook_load().
*/
function entity_room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.55 KB) | 2.55 KB |
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'RoomController', // EntityAPIControllerExportableの使用
// 'controller class' => 'EntityAPIController',// <-前回使用したもの: デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
・・・・・・・
);
// Entityの「controller class」のコールバッククラス
class RoomController extends EntityAPIControllerExportable {
public function __construct($entityType) {
parent::__construct($entityType);
}
/**
* Create a room - we first set up the values that are specific
* to our room schema but then also go through the EntityAPIController
* function.
*/
public function create(array $values = array()) {
// Add values that are specific to our Room
$values += array(
'rid' => '',
'is_new' => TRUE,
'type' => '',
'room_number' => '',
'sys_name' => '',
);
$room = parent::create($values);
return $room;
}
}
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
・・・・・
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
'admin ui' => array(
'path' => 'admin/structure/rooms',
'file' => 'rooms.admin.inc',
'controller class' => 'RoomsUIController',
),
);
return $services;
}
/**
* UI controller.
*/
class RoomsUIController extends EntityDefaultUIController {
/**
* Overrides hook_menu() defaults.
*/
public function hook_menu() {
$items = parent::hook_menu();
$items[$this->path]['description'] = t('Manage rooms. including adding
and removing fields and the display of fields.');
return $items;
}
}
/**
* Generates the room editing form.
*/
function room_form($form, &$form_state, $room, $op = 'edit') {
if ($op == 'clone') {
$room->sys_name .= ' (cloned)';
$room->room_number = '';
}
$form['room_number'] = array(
'#title' => t('Room Number'),
'#type' => 'textfield',
'#default_value' => isset($room->room_number)?$room->room_number : "",
'#description' => t('Entry the Room number.'),
'#required' => TRUE,
'#size' => 30,
);
// Machine-readable type name.
$form['sys_name'] = array(
'#type' => 'machine_name',
'#default_value' => isset($room->sys_name) ? $room->sys_name : '',
'#maxlength' => 32,
'#machine_name' => array(
'exists' => 'room_get_sys_names',
'source' => array('label'),
),
'#description' => t('A unique machine-readable name for this model type. It must only contain lowercase letters, numbers, and underscores.'),
);
$form['type'] = array(
'#title' => t('Room Type'),
'#type' => 'textfield',
'#default_value' => isset($room->type) ? $room->type : "",
'#description' => t('Entry the Room type.'),
'#required' => TRUE,
'#size' => 60,
);
$form['actions'] = array('#type' => 'actions');
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save Room'),
'#weight' => 40,
);
return $form;
}
/**
* Form API submit callback for the type form.
*/
function room_form_submit(&$form, &$form_state) {
$room = entity_ui_form_submit_build_entity($form, $form_state);
$room->save();
$form_state['redirect'] = 'admin/structure/rooms';
}
| 添付 | サイズ |
|---|---|
| entity_example_2.zip (3.28 KB) | 3.28 KB |
Roomのテストデータ(dsvフォーマット):
ルームナンバー: room_number
rid,room_number,type 1,1001,シングル 2,1002,シングル 3,1003,シングル 4,2001,ダブル 5,3001,ダブル
/**
* Implement hook_schema()
*/
function entity_example_schema(){
$schema['room']=array(
'description' => 'Rooms',
'fields' => array(
'rid' => array(
'type' => 'serial',
'description' => 'Room Id'
),
'type' => array(
'type' => 'varchar',
'length' => '255',
'description' => 'Room Type'
),
'room_number' => array(
'type' => 'varchar',
'length' => '25',
'description' => 'Room Number'
),
),
'primary key' => array('rid'),
);
return $schema;
}
/**
* Implements hook_entity_info().
*/
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'EntityAPIController',// デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
'fieldable' => TRUE, // 余分のフィールド追加可能
'entity keys' => array( // ルームIDをエンティティのキー.
'id' => 'rid',
'label' => 'room_number', // コールバック関数が優先
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'bundles' => array(), // bundleはこのエンティティ自身
// 'label callback' => 'room_label', // 指定しないとラベルの取得ができない
'access callback' => 'room_access' , // default:'value user_access'動作しない
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
);
return $services;
}
/**
* Extend the defaults.
*/
class EntityExampleMetadataController extends EntityDefaultMetadataController {
public function entityPropertyInfo() {
$info = parent::entityPropertyInfo();
$properties = &$info[$this->type]['properties'];
$properties['type'] = array(
'label' => t('Room type'),
'schema field' => 'type',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('Room type of the room'),
);
$properties['room_number'] = array(
'label' => t('Room Number'),
'schema field' => 'room_number',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('The number of the room'),
)
return $info;
}
}
function room_access($op, $room = NULL, $account = NULL) {
// 全員アクセス可能にする
return TRUE;
}
| 添付 | サイズ |
|---|---|
| entity_example.zip (1.87 KB) | 1.87 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'controller class' => 'RoomController',
'base table' => 'room',
'uri callback' => 'room_uri',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
),
'static cache' => TRUE,
'bundles' => array( // バンドルの指定
'room'=> array( // バンドル名: room
'label' => 'Room',
'admin' => array(
'path' => 'admin/structure/room/manage', // バンドルの管理URI
'access arguments' => array('administer rooms'),
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Full Room'),
'custom settings' => FALSE,
),
)
);
return $room_info;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// 管理が面にメッセージ表示のみ
$items['admin/structure/room/manage'] = array(
'title' => 'Room Admin',
'description' => 'Manage Room structure',
'page callback' => 'room_info',
'access arguments' => array('administer rooms'),
);
// 個別Room表示
$items['room/%entity_room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
// 新規Room作成
$items['room/add'] = array(
'title' => t('Add Room'),
'page callback' => 'room_add',
'access arguments' => array('create room'),
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* create "add room" form
*/
function room_add() {
$room = (object) array (
'rid' => '',
'type' => 'room',
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
field_attach_form('room', $room, $form, $form_state);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate('room', $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit('room', $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
return entity_get_controller('room')->save($room);
}
function room_info() {
return t('Welcome to the administration page for your rooms!');
}
function room_page_title($room){
return $room->room_number;
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
$return['room']['room'] = array(
'form' => array(
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 1,
),
),
);
return $return;
}
function room_uri( $room ){
return array(
'path' => 'room/' . $room->rid,
);
}
class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* Implements hook_load().
*/
function entity_room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.55 KB) | 2.55 KB |
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'RoomController', // EntityAPIControllerExportableの使用
// 'controller class' => 'EntityAPIController',// <-前回使用したもの: デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
・・・・・・・
);
// Entityの「controller class」のコールバッククラス
class RoomController extends EntityAPIControllerExportable {
public function __construct($entityType) {
parent::__construct($entityType);
}
/**
* Create a room - we first set up the values that are specific
* to our room schema but then also go through the EntityAPIController
* function.
*/
public function create(array $values = array()) {
// Add values that are specific to our Room
$values += array(
'rid' => '',
'is_new' => TRUE,
'type' => '',
'room_number' => '',
'sys_name' => '',
);
$room = parent::create($values);
return $room;
}
}
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
・・・・・
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
'admin ui' => array(
'path' => 'admin/structure/rooms',
'file' => 'rooms.admin.inc',
'controller class' => 'RoomsUIController',
),
);
return $services;
}
/**
* UI controller.
*/
class RoomsUIController extends EntityDefaultUIController {
/**
* Overrides hook_menu() defaults.
*/
public function hook_menu() {
$items = parent::hook_menu();
$items[$this->path]['description'] = t('Manage rooms. including adding
and removing fields and the display of fields.');
return $items;
}
}
/**
* Generates the room editing form.
*/
function room_form($form, &$form_state, $room, $op = 'edit') {
if ($op == 'clone') {
$room->sys_name .= ' (cloned)';
$room->room_number = '';
}
$form['room_number'] = array(
'#title' => t('Room Number'),
'#type' => 'textfield',
'#default_value' => isset($room->room_number)?$room->room_number : "",
'#description' => t('Entry the Room number.'),
'#required' => TRUE,
'#size' => 30,
);
// Machine-readable type name.
$form['sys_name'] = array(
'#type' => 'machine_name',
'#default_value' => isset($room->sys_name) ? $room->sys_name : '',
'#maxlength' => 32,
'#machine_name' => array(
'exists' => 'room_get_sys_names',
'source' => array('label'),
),
'#description' => t('A unique machine-readable name for this model type. It must only contain lowercase letters, numbers, and underscores.'),
);
$form['type'] = array(
'#title' => t('Room Type'),
'#type' => 'textfield',
'#default_value' => isset($room->type) ? $room->type : "",
'#description' => t('Entry the Room type.'),
'#required' => TRUE,
'#size' => 60,
);
$form['actions'] = array('#type' => 'actions');
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save Room'),
'#weight' => 40,
);
return $form;
}
/**
* Form API submit callback for the type form.
*/
function room_form_submit(&$form, &$form_state) {
$room = entity_ui_form_submit_build_entity($form, $form_state);
$room->save();
$form_state['redirect'] = 'admin/structure/rooms';
}
| 添付 | サイズ |
|---|---|
| entity_example_2.zip (3.28 KB) | 3.28 KB |
Roomのテストデータ(dsvフォーマット):
ルームナンバー: room_number
rid,room_number,type 1,1001,シングル 2,1002,シングル 3,1003,シングル 4,2001,ダブル 5,3001,ダブル
/**
* Implement hook_schema()
*/
function entity_example_schema(){
$schema['room']=array(
'description' => 'Rooms',
'fields' => array(
'rid' => array(
'type' => 'serial',
'description' => 'Room Id'
),
'type' => array(
'type' => 'varchar',
'length' => '255',
'description' => 'Room Type'
),
'room_number' => array(
'type' => 'varchar',
'length' => '25',
'description' => 'Room Number'
),
),
'primary key' => array('rid'),
);
return $schema;
}
/**
* Implements hook_entity_info().
*/
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'EntityAPIController',// デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
'fieldable' => TRUE, // 余分のフィールド追加可能
'entity keys' => array( // ルームIDをエンティティのキー.
'id' => 'rid',
'label' => 'room_number', // コールバック関数が優先
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'bundles' => array(), // bundleはこのエンティティ自身
// 'label callback' => 'room_label', // 指定しないとラベルの取得ができない
'access callback' => 'room_access' , // default:'value user_access'動作しない
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
);
return $services;
}
/**
* Extend the defaults.
*/
class EntityExampleMetadataController extends EntityDefaultMetadataController {
public function entityPropertyInfo() {
$info = parent::entityPropertyInfo();
$properties = &$info[$this->type]['properties'];
$properties['type'] = array(
'label' => t('Room type'),
'schema field' => 'type',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('Room type of the room'),
);
$properties['room_number'] = array(
'label' => t('Room Number'),
'schema field' => 'room_number',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('The number of the room'),
)
return $info;
}
}
function room_access($op, $room = NULL, $account = NULL) {
// 全員アクセス可能にする
return TRUE;
}
| 添付 | サイズ |
|---|---|
| entity_example.zip (1.87 KB) | 1.87 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'controller class' => 'RoomController',
'base table' => 'room',
'uri callback' => 'room_uri',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
),
'static cache' => TRUE,
'bundles' => array( // バンドルの指定
'room'=> array( // バンドル名: room
'label' => 'Room',
'admin' => array(
'path' => 'admin/structure/room/manage', // バンドルの管理URI
'access arguments' => array('administer rooms'),
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Full Room'),
'custom settings' => FALSE,
),
)
);
return $room_info;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// 管理が面にメッセージ表示のみ
$items['admin/structure/room/manage'] = array(
'title' => 'Room Admin',
'description' => 'Manage Room structure',
'page callback' => 'room_info',
'access arguments' => array('administer rooms'),
);
// 個別Room表示
$items['room/%entity_room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
// 新規Room作成
$items['room/add'] = array(
'title' => t('Add Room'),
'page callback' => 'room_add',
'access arguments' => array('create room'),
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* create "add room" form
*/
function room_add() {
$room = (object) array (
'rid' => '',
'type' => 'room',
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
field_attach_form('room', $room, $form, $form_state);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate('room', $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit('room', $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
return entity_get_controller('room')->save($room);
}
function room_info() {
return t('Welcome to the administration page for your rooms!');
}
function room_page_title($room){
return $room->room_number;
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
$return['room']['room'] = array(
'form' => array(
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 1,
),
),
);
return $return;
}
function room_uri( $room ){
return array(
'path' => 'room/' . $room->rid,
);
}
class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* Implements hook_load().
*/
function entity_room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.55 KB) | 2.55 KB |
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'RoomController', // EntityAPIControllerExportableの使用
// 'controller class' => 'EntityAPIController',// <-前回使用したもの: デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
・・・・・・・
);
// Entityの「controller class」のコールバッククラス
class RoomController extends EntityAPIControllerExportable {
public function __construct($entityType) {
parent::__construct($entityType);
}
/**
* Create a room - we first set up the values that are specific
* to our room schema but then also go through the EntityAPIController
* function.
*/
public function create(array $values = array()) {
// Add values that are specific to our Room
$values += array(
'rid' => '',
'is_new' => TRUE,
'type' => '',
'room_number' => '',
'sys_name' => '',
);
$room = parent::create($values);
return $room;
}
}
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
・・・・・
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
'admin ui' => array(
'path' => 'admin/structure/rooms',
'file' => 'rooms.admin.inc',
'controller class' => 'RoomsUIController',
),
);
return $services;
}
/**
* UI controller.
*/
class RoomsUIController extends EntityDefaultUIController {
/**
* Overrides hook_menu() defaults.
*/
public function hook_menu() {
$items = parent::hook_menu();
$items[$this->path]['description'] = t('Manage rooms. including adding
and removing fields and the display of fields.');
return $items;
}
}
/**
* Generates the room editing form.
*/
function room_form($form, &$form_state, $room, $op = 'edit') {
if ($op == 'clone') {
$room->sys_name .= ' (cloned)';
$room->room_number = '';
}
$form['room_number'] = array(
'#title' => t('Room Number'),
'#type' => 'textfield',
'#default_value' => isset($room->room_number)?$room->room_number : "",
'#description' => t('Entry the Room number.'),
'#required' => TRUE,
'#size' => 30,
);
// Machine-readable type name.
$form['sys_name'] = array(
'#type' => 'machine_name',
'#default_value' => isset($room->sys_name) ? $room->sys_name : '',
'#maxlength' => 32,
'#machine_name' => array(
'exists' => 'room_get_sys_names',
'source' => array('label'),
),
'#description' => t('A unique machine-readable name for this model type. It must only contain lowercase letters, numbers, and underscores.'),
);
$form['type'] = array(
'#title' => t('Room Type'),
'#type' => 'textfield',
'#default_value' => isset($room->type) ? $room->type : "",
'#description' => t('Entry the Room type.'),
'#required' => TRUE,
'#size' => 60,
);
$form['actions'] = array('#type' => 'actions');
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save Room'),
'#weight' => 40,
);
return $form;
}
/**
* Form API submit callback for the type form.
*/
function room_form_submit(&$form, &$form_state) {
$room = entity_ui_form_submit_build_entity($form, $form_state);
$room->save();
$form_state['redirect'] = 'admin/structure/rooms';
}
| 添付 | サイズ |
|---|---|
| entity_example_2.zip (3.28 KB) | 3.28 KB |
Roomのテストデータ(dsvフォーマット):
ルームナンバー: room_number
rid,room_number,type 1,1001,シングル 2,1002,シングル 3,1003,シングル 4,2001,ダブル 5,3001,ダブル
/**
* Implement hook_schema()
*/
function entity_example_schema(){
$schema['room']=array(
'description' => 'Rooms',
'fields' => array(
'rid' => array(
'type' => 'serial',
'description' => 'Room Id'
),
'type' => array(
'type' => 'varchar',
'length' => '255',
'description' => 'Room Type'
),
'room_number' => array(
'type' => 'varchar',
'length' => '25',
'description' => 'Room Number'
),
),
'primary key' => array('rid'),
);
return $schema;
}
/**
* Implements hook_entity_info().
*/
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'EntityAPIController',// デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
'fieldable' => TRUE, // 余分のフィールド追加可能
'entity keys' => array( // ルームIDをエンティティのキー.
'id' => 'rid',
'label' => 'room_number', // コールバック関数が優先
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'bundles' => array(), // bundleはこのエンティティ自身
// 'label callback' => 'room_label', // 指定しないとラベルの取得ができない
'access callback' => 'room_access' , // default:'value user_access'動作しない
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
);
return $services;
}
/**
* Extend the defaults.
*/
class EntityExampleMetadataController extends EntityDefaultMetadataController {
public function entityPropertyInfo() {
$info = parent::entityPropertyInfo();
$properties = &$info[$this->type]['properties'];
$properties['type'] = array(
'label' => t('Room type'),
'schema field' => 'type',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('Room type of the room'),
);
$properties['room_number'] = array(
'label' => t('Room Number'),
'schema field' => 'room_number',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('The number of the room'),
)
return $info;
}
}
function room_access($op, $room = NULL, $account = NULL) {
// 全員アクセス可能にする
return TRUE;
}
| 添付 | サイズ |
|---|---|
| entity_example.zip (1.87 KB) | 1.87 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'controller class' => 'RoomController',
'base table' => 'room',
'uri callback' => 'room_uri',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
),
'static cache' => TRUE,
'bundles' => array( // バンドルの指定
'room'=> array( // バンドル名: room
'label' => 'Room',
'admin' => array(
'path' => 'admin/structure/room/manage', // バンドルの管理URI
'access arguments' => array('administer rooms'),
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Full Room'),
'custom settings' => FALSE,
),
)
);
return $room_info;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// 管理が面にメッセージ表示のみ
$items['admin/structure/room/manage'] = array(
'title' => 'Room Admin',
'description' => 'Manage Room structure',
'page callback' => 'room_info',
'access arguments' => array('administer rooms'),
);
// 個別Room表示
$items['room/%entity_room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
// 新規Room作成
$items['room/add'] = array(
'title' => t('Add Room'),
'page callback' => 'room_add',
'access arguments' => array('create room'),
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* create "add room" form
*/
function room_add() {
$room = (object) array (
'rid' => '',
'type' => 'room',
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
field_attach_form('room', $room, $form, $form_state);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate('room', $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit('room', $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
return entity_get_controller('room')->save($room);
}
function room_info() {
return t('Welcome to the administration page for your rooms!');
}
function room_page_title($room){
return $room->room_number;
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
$return['room']['room'] = array(
'form' => array(
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 1,
),
),
);
return $return;
}
function room_uri( $room ){
return array(
'path' => 'room/' . $room->rid,
);
}
class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* Implements hook_load().
*/
function entity_room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.55 KB) | 2.55 KB |
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'RoomController', // EntityAPIControllerExportableの使用
// 'controller class' => 'EntityAPIController',// <-前回使用したもの: デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
・・・・・・・
);
// Entityの「controller class」のコールバッククラス
class RoomController extends EntityAPIControllerExportable {
public function __construct($entityType) {
parent::__construct($entityType);
}
/**
* Create a room - we first set up the values that are specific
* to our room schema but then also go through the EntityAPIController
* function.
*/
public function create(array $values = array()) {
// Add values that are specific to our Room
$values += array(
'rid' => '',
'is_new' => TRUE,
'type' => '',
'room_number' => '',
'sys_name' => '',
);
$room = parent::create($values);
return $room;
}
}
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
・・・・・
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
'admin ui' => array(
'path' => 'admin/structure/rooms',
'file' => 'rooms.admin.inc',
'controller class' => 'RoomsUIController',
),
);
return $services;
}
/**
* UI controller.
*/
class RoomsUIController extends EntityDefaultUIController {
/**
* Overrides hook_menu() defaults.
*/
public function hook_menu() {
$items = parent::hook_menu();
$items[$this->path]['description'] = t('Manage rooms. including adding
and removing fields and the display of fields.');
return $items;
}
}
/**
* Generates the room editing form.
*/
function room_form($form, &$form_state, $room, $op = 'edit') {
if ($op == 'clone') {
$room->sys_name .= ' (cloned)';
$room->room_number = '';
}
$form['room_number'] = array(
'#title' => t('Room Number'),
'#type' => 'textfield',
'#default_value' => isset($room->room_number)?$room->room_number : "",
'#description' => t('Entry the Room number.'),
'#required' => TRUE,
'#size' => 30,
);
// Machine-readable type name.
$form['sys_name'] = array(
'#type' => 'machine_name',
'#default_value' => isset($room->sys_name) ? $room->sys_name : '',
'#maxlength' => 32,
'#machine_name' => array(
'exists' => 'room_get_sys_names',
'source' => array('label'),
),
'#description' => t('A unique machine-readable name for this model type. It must only contain lowercase letters, numbers, and underscores.'),
);
$form['type'] = array(
'#title' => t('Room Type'),
'#type' => 'textfield',
'#default_value' => isset($room->type) ? $room->type : "",
'#description' => t('Entry the Room type.'),
'#required' => TRUE,
'#size' => 60,
);
$form['actions'] = array('#type' => 'actions');
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save Room'),
'#weight' => 40,
);
return $form;
}
/**
* Form API submit callback for the type form.
*/
function room_form_submit(&$form, &$form_state) {
$room = entity_ui_form_submit_build_entity($form, $form_state);
$room->save();
$form_state['redirect'] = 'admin/structure/rooms';
}
| 添付 | サイズ |
|---|---|
| entity_example_2.zip (3.28 KB) | 3.28 KB |
Roomのテストデータ(dsvフォーマット):
ルームナンバー: room_number
rid,room_number,type 1,1001,シングル 2,1002,シングル 3,1003,シングル 4,2001,ダブル 5,3001,ダブル
/**
* Implement hook_schema()
*/
function entity_example_schema(){
$schema['room']=array(
'description' => 'Rooms',
'fields' => array(
'rid' => array(
'type' => 'serial',
'description' => 'Room Id'
),
'type' => array(
'type' => 'varchar',
'length' => '255',
'description' => 'Room Type'
),
'room_number' => array(
'type' => 'varchar',
'length' => '25',
'description' => 'Room Number'
),
),
'primary key' => array('rid'),
);
return $schema;
}
/**
* Implements hook_entity_info().
*/
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'EntityAPIController',// デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
'fieldable' => TRUE, // 余分のフィールド追加可能
'entity keys' => array( // ルームIDをエンティティのキー.
'id' => 'rid',
'label' => 'room_number', // コールバック関数が優先
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'bundles' => array(), // bundleはこのエンティティ自身
// 'label callback' => 'room_label', // 指定しないとラベルの取得ができない
'access callback' => 'room_access' , // default:'value user_access'動作しない
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
);
return $services;
}
/**
* Extend the defaults.
*/
class EntityExampleMetadataController extends EntityDefaultMetadataController {
public function entityPropertyInfo() {
$info = parent::entityPropertyInfo();
$properties = &$info[$this->type]['properties'];
$properties['type'] = array(
'label' => t('Room type'),
'schema field' => 'type',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('Room type of the room'),
);
$properties['room_number'] = array(
'label' => t('Room Number'),
'schema field' => 'room_number',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('The number of the room'),
)
return $info;
}
}
function room_access($op, $room = NULL, $account = NULL) {
// 全員アクセス可能にする
return TRUE;
}
| 添付 | サイズ |
|---|---|
| entity_example.zip (1.87 KB) | 1.87 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'controller class' => 'RoomController',
'base table' => 'room',
'uri callback' => 'room_uri',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
),
'static cache' => TRUE,
'bundles' => array( // バンドルの指定
'room'=> array( // バンドル名: room
'label' => 'Room',
'admin' => array(
'path' => 'admin/structure/room/manage', // バンドルの管理URI
'access arguments' => array('administer rooms'),
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Full Room'),
'custom settings' => FALSE,
),
)
);
return $room_info;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// 管理が面にメッセージ表示のみ
$items['admin/structure/room/manage'] = array(
'title' => 'Room Admin',
'description' => 'Manage Room structure',
'page callback' => 'room_info',
'access arguments' => array('administer rooms'),
);
// 個別Room表示
$items['room/%entity_room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
// 新規Room作成
$items['room/add'] = array(
'title' => t('Add Room'),
'page callback' => 'room_add',
'access arguments' => array('create room'),
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* create "add room" form
*/
function room_add() {
$room = (object) array (
'rid' => '',
'type' => 'room',
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
field_attach_form('room', $room, $form, $form_state);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate('room', $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit('room', $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
return entity_get_controller('room')->save($room);
}
function room_info() {
return t('Welcome to the administration page for your rooms!');
}
function room_page_title($room){
return $room->room_number;
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
$return['room']['room'] = array(
'form' => array(
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 1,
),
),
);
return $return;
}
function room_uri( $room ){
return array(
'path' => 'room/' . $room->rid,
);
}
class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* Implements hook_load().
*/
function entity_room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.55 KB) | 2.55 KB |
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'RoomController', // EntityAPIControllerExportableの使用
// 'controller class' => 'EntityAPIController',// <-前回使用したもの: デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
・・・・・・・
);
// Entityの「controller class」のコールバッククラス
class RoomController extends EntityAPIControllerExportable {
public function __construct($entityType) {
parent::__construct($entityType);
}
/**
* Create a room - we first set up the values that are specific
* to our room schema but then also go through the EntityAPIController
* function.
*/
public function create(array $values = array()) {
// Add values that are specific to our Room
$values += array(
'rid' => '',
'is_new' => TRUE,
'type' => '',
'room_number' => '',
'sys_name' => '',
);
$room = parent::create($values);
return $room;
}
}
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
・・・・・
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
'admin ui' => array(
'path' => 'admin/structure/rooms',
'file' => 'rooms.admin.inc',
'controller class' => 'RoomsUIController',
),
);
return $services;
}
/**
* UI controller.
*/
class RoomsUIController extends EntityDefaultUIController {
/**
* Overrides hook_menu() defaults.
*/
public function hook_menu() {
$items = parent::hook_menu();
$items[$this->path]['description'] = t('Manage rooms. including adding
and removing fields and the display of fields.');
return $items;
}
}
/**
* Generates the room editing form.
*/
function room_form($form, &$form_state, $room, $op = 'edit') {
if ($op == 'clone') {
$room->sys_name .= ' (cloned)';
$room->room_number = '';
}
$form['room_number'] = array(
'#title' => t('Room Number'),
'#type' => 'textfield',
'#default_value' => isset($room->room_number)?$room->room_number : "",
'#description' => t('Entry the Room number.'),
'#required' => TRUE,
'#size' => 30,
);
// Machine-readable type name.
$form['sys_name'] = array(
'#type' => 'machine_name',
'#default_value' => isset($room->sys_name) ? $room->sys_name : '',
'#maxlength' => 32,
'#machine_name' => array(
'exists' => 'room_get_sys_names',
'source' => array('label'),
),
'#description' => t('A unique machine-readable name for this model type. It must only contain lowercase letters, numbers, and underscores.'),
);
$form['type'] = array(
'#title' => t('Room Type'),
'#type' => 'textfield',
'#default_value' => isset($room->type) ? $room->type : "",
'#description' => t('Entry the Room type.'),
'#required' => TRUE,
'#size' => 60,
);
$form['actions'] = array('#type' => 'actions');
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save Room'),
'#weight' => 40,
);
return $form;
}
/**
* Form API submit callback for the type form.
*/
function room_form_submit(&$form, &$form_state) {
$room = entity_ui_form_submit_build_entity($form, $form_state);
$room->save();
$form_state['redirect'] = 'admin/structure/rooms';
}
| 添付 | サイズ |
|---|---|
| entity_example_2.zip (3.28 KB) | 3.28 KB |
Roomのテストデータ(dsvフォーマット):
ルームナンバー: room_number
rid,room_number,type 1,1001,シングル 2,1002,シングル 3,1003,シングル 4,2001,ダブル 5,3001,ダブル
/**
* Implement hook_schema()
*/
function entity_example_schema(){
$schema['room']=array(
'description' => 'Rooms',
'fields' => array(
'rid' => array(
'type' => 'serial',
'description' => 'Room Id'
),
'type' => array(
'type' => 'varchar',
'length' => '255',
'description' => 'Room Type'
),
'room_number' => array(
'type' => 'varchar',
'length' => '25',
'description' => 'Room Number'
),
),
'primary key' => array('rid'),
);
return $schema;
}
/**
* Implements hook_entity_info().
*/
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'EntityAPIController',// デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
'fieldable' => TRUE, // 余分のフィールド追加可能
'entity keys' => array( // ルームIDをエンティティのキー.
'id' => 'rid',
'label' => 'room_number', // コールバック関数が優先
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'bundles' => array(), // bundleはこのエンティティ自身
// 'label callback' => 'room_label', // 指定しないとラベルの取得ができない
'access callback' => 'room_access' , // default:'value user_access'動作しない
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
);
return $services;
}
/**
* Extend the defaults.
*/
class EntityExampleMetadataController extends EntityDefaultMetadataController {
public function entityPropertyInfo() {
$info = parent::entityPropertyInfo();
$properties = &$info[$this->type]['properties'];
$properties['type'] = array(
'label' => t('Room type'),
'schema field' => 'type',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('Room type of the room'),
);
$properties['room_number'] = array(
'label' => t('Room Number'),
'schema field' => 'room_number',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('The number of the room'),
)
return $info;
}
}
function room_access($op, $room = NULL, $account = NULL) {
// 全員アクセス可能にする
return TRUE;
}
| 添付 | サイズ |
|---|---|
| entity_example.zip (1.87 KB) | 1.87 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'controller class' => 'RoomController',
'base table' => 'room',
'uri callback' => 'room_uri',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
),
'static cache' => TRUE,
'bundles' => array( // バンドルの指定
'room'=> array( // バンドル名: room
'label' => 'Room',
'admin' => array(
'path' => 'admin/structure/room/manage', // バンドルの管理URI
'access arguments' => array('administer rooms'),
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Full Room'),
'custom settings' => FALSE,
),
)
);
return $room_info;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// 管理が面にメッセージ表示のみ
$items['admin/structure/room/manage'] = array(
'title' => 'Room Admin',
'description' => 'Manage Room structure',
'page callback' => 'room_info',
'access arguments' => array('administer rooms'),
);
// 個別Room表示
$items['room/%entity_room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
// 新規Room作成
$items['room/add'] = array(
'title' => t('Add Room'),
'page callback' => 'room_add',
'access arguments' => array('create room'),
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* create "add room" form
*/
function room_add() {
$room = (object) array (
'rid' => '',
'type' => 'room',
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
field_attach_form('room', $room, $form, $form_state);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate('room', $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit('room', $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
return entity_get_controller('room')->save($room);
}
function room_info() {
return t('Welcome to the administration page for your rooms!');
}
function room_page_title($room){
return $room->room_number;
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
$return['room']['room'] = array(
'form' => array(
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 1,
),
),
);
return $return;
}
function room_uri( $room ){
return array(
'path' => 'room/' . $room->rid,
);
}
class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* Implements hook_load().
*/
function entity_room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.55 KB) | 2.55 KB |
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'RoomController', // EntityAPIControllerExportableの使用
// 'controller class' => 'EntityAPIController',// <-前回使用したもの: デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
・・・・・・・
);
// Entityの「controller class」のコールバッククラス
class RoomController extends EntityAPIControllerExportable {
public function __construct($entityType) {
parent::__construct($entityType);
}
/**
* Create a room - we first set up the values that are specific
* to our room schema but then also go through the EntityAPIController
* function.
*/
public function create(array $values = array()) {
// Add values that are specific to our Room
$values += array(
'rid' => '',
'is_new' => TRUE,
'type' => '',
'room_number' => '',
'sys_name' => '',
);
$room = parent::create($values);
return $room;
}
}
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
・・・・・
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
'admin ui' => array(
'path' => 'admin/structure/rooms',
'file' => 'rooms.admin.inc',
'controller class' => 'RoomsUIController',
),
);
return $services;
}
/**
* UI controller.
*/
class RoomsUIController extends EntityDefaultUIController {
/**
* Overrides hook_menu() defaults.
*/
public function hook_menu() {
$items = parent::hook_menu();
$items[$this->path]['description'] = t('Manage rooms. including adding
and removing fields and the display of fields.');
return $items;
}
}
/**
* Generates the room editing form.
*/
function room_form($form, &$form_state, $room, $op = 'edit') {
if ($op == 'clone') {
$room->sys_name .= ' (cloned)';
$room->room_number = '';
}
$form['room_number'] = array(
'#title' => t('Room Number'),
'#type' => 'textfield',
'#default_value' => isset($room->room_number)?$room->room_number : "",
'#description' => t('Entry the Room number.'),
'#required' => TRUE,
'#size' => 30,
);
// Machine-readable type name.
$form['sys_name'] = array(
'#type' => 'machine_name',
'#default_value' => isset($room->sys_name) ? $room->sys_name : '',
'#maxlength' => 32,
'#machine_name' => array(
'exists' => 'room_get_sys_names',
'source' => array('label'),
),
'#description' => t('A unique machine-readable name for this model type. It must only contain lowercase letters, numbers, and underscores.'),
);
$form['type'] = array(
'#title' => t('Room Type'),
'#type' => 'textfield',
'#default_value' => isset($room->type) ? $room->type : "",
'#description' => t('Entry the Room type.'),
'#required' => TRUE,
'#size' => 60,
);
$form['actions'] = array('#type' => 'actions');
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save Room'),
'#weight' => 40,
);
return $form;
}
/**
* Form API submit callback for the type form.
*/
function room_form_submit(&$form, &$form_state) {
$room = entity_ui_form_submit_build_entity($form, $form_state);
$room->save();
$form_state['redirect'] = 'admin/structure/rooms';
}
| 添付 | サイズ |
|---|---|
| entity_example_2.zip (3.28 KB) | 3.28 KB |
Roomのテストデータ(dsvフォーマット):
ルームナンバー: room_number
rid,room_number,type 1,1001,シングル 2,1002,シングル 3,1003,シングル 4,2001,ダブル 5,3001,ダブル
/**
* Implement hook_schema()
*/
function entity_example_schema(){
$schema['room']=array(
'description' => 'Rooms',
'fields' => array(
'rid' => array(
'type' => 'serial',
'description' => 'Room Id'
),
'type' => array(
'type' => 'varchar',
'length' => '255',
'description' => 'Room Type'
),
'room_number' => array(
'type' => 'varchar',
'length' => '25',
'description' => 'Room Number'
),
),
'primary key' => array('rid'),
);
return $schema;
}
/**
* Implements hook_entity_info().
*/
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'EntityAPIController',// デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
'fieldable' => TRUE, // 余分のフィールド追加可能
'entity keys' => array( // ルームIDをエンティティのキー.
'id' => 'rid',
'label' => 'room_number', // コールバック関数が優先
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'bundles' => array(), // bundleはこのエンティティ自身
// 'label callback' => 'room_label', // 指定しないとラベルの取得ができない
'access callback' => 'room_access' , // default:'value user_access'動作しない
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
);
return $services;
}
/**
* Extend the defaults.
*/
class EntityExampleMetadataController extends EntityDefaultMetadataController {
public function entityPropertyInfo() {
$info = parent::entityPropertyInfo();
$properties = &$info[$this->type]['properties'];
$properties['type'] = array(
'label' => t('Room type'),
'schema field' => 'type',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('Room type of the room'),
);
$properties['room_number'] = array(
'label' => t('Room Number'),
'schema field' => 'room_number',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('The number of the room'),
)
return $info;
}
}
function room_access($op, $room = NULL, $account = NULL) {
// 全員アクセス可能にする
return TRUE;
}
| 添付 | サイズ |
|---|---|
| entity_example.zip (1.87 KB) | 1.87 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'controller class' => 'RoomController',
'base table' => 'room',
'uri callback' => 'room_uri',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
),
'static cache' => TRUE,
'bundles' => array( // バンドルの指定
'room'=> array( // バンドル名: room
'label' => 'Room',
'admin' => array(
'path' => 'admin/structure/room/manage', // バンドルの管理URI
'access arguments' => array('administer rooms'),
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Full Room'),
'custom settings' => FALSE,
),
)
);
return $room_info;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// 管理が面にメッセージ表示のみ
$items['admin/structure/room/manage'] = array(
'title' => 'Room Admin',
'description' => 'Manage Room structure',
'page callback' => 'room_info',
'access arguments' => array('administer rooms'),
);
// 個別Room表示
$items['room/%entity_room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
// 新規Room作成
$items['room/add'] = array(
'title' => t('Add Room'),
'page callback' => 'room_add',
'access arguments' => array('create room'),
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* create "add room" form
*/
function room_add() {
$room = (object) array (
'rid' => '',
'type' => 'room',
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
field_attach_form('room', $room, $form, $form_state);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate('room', $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit('room', $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
return entity_get_controller('room')->save($room);
}
function room_info() {
return t('Welcome to the administration page for your rooms!');
}
function room_page_title($room){
return $room->room_number;
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
$return['room']['room'] = array(
'form' => array(
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 1,
),
),
);
return $return;
}
function room_uri( $room ){
return array(
'path' => 'room/' . $room->rid,
);
}
class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* Implements hook_load().
*/
function entity_room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.55 KB) | 2.55 KB |
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'RoomController', // EntityAPIControllerExportableの使用
// 'controller class' => 'EntityAPIController',// <-前回使用したもの: デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
・・・・・・・
);
// Entityの「controller class」のコールバッククラス
class RoomController extends EntityAPIControllerExportable {
public function __construct($entityType) {
parent::__construct($entityType);
}
/**
* Create a room - we first set up the values that are specific
* to our room schema but then also go through the EntityAPIController
* function.
*/
public function create(array $values = array()) {
// Add values that are specific to our Room
$values += array(
'rid' => '',
'is_new' => TRUE,
'type' => '',
'room_number' => '',
'sys_name' => '',
);
$room = parent::create($values);
return $room;
}
}
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
・・・・・
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
'admin ui' => array(
'path' => 'admin/structure/rooms',
'file' => 'rooms.admin.inc',
'controller class' => 'RoomsUIController',
),
);
return $services;
}
/**
* UI controller.
*/
class RoomsUIController extends EntityDefaultUIController {
/**
* Overrides hook_menu() defaults.
*/
public function hook_menu() {
$items = parent::hook_menu();
$items[$this->path]['description'] = t('Manage rooms. including adding
and removing fields and the display of fields.');
return $items;
}
}
/**
* Generates the room editing form.
*/
function room_form($form, &$form_state, $room, $op = 'edit') {
if ($op == 'clone') {
$room->sys_name .= ' (cloned)';
$room->room_number = '';
}
$form['room_number'] = array(
'#title' => t('Room Number'),
'#type' => 'textfield',
'#default_value' => isset($room->room_number)?$room->room_number : "",
'#description' => t('Entry the Room number.'),
'#required' => TRUE,
'#size' => 30,
);
// Machine-readable type name.
$form['sys_name'] = array(
'#type' => 'machine_name',
'#default_value' => isset($room->sys_name) ? $room->sys_name : '',
'#maxlength' => 32,
'#machine_name' => array(
'exists' => 'room_get_sys_names',
'source' => array('label'),
),
'#description' => t('A unique machine-readable name for this model type. It must only contain lowercase letters, numbers, and underscores.'),
);
$form['type'] = array(
'#title' => t('Room Type'),
'#type' => 'textfield',
'#default_value' => isset($room->type) ? $room->type : "",
'#description' => t('Entry the Room type.'),
'#required' => TRUE,
'#size' => 60,
);
$form['actions'] = array('#type' => 'actions');
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save Room'),
'#weight' => 40,
);
return $form;
}
/**
* Form API submit callback for the type form.
*/
function room_form_submit(&$form, &$form_state) {
$room = entity_ui_form_submit_build_entity($form, $form_state);
$room->save();
$form_state['redirect'] = 'admin/structure/rooms';
}
| 添付 | サイズ |
|---|---|
| entity_example_2.zip (3.28 KB) | 3.28 KB |
Roomのテストデータ(dsvフォーマット):
ルームナンバー: room_number
rid,room_number,type 1,1001,シングル 2,1002,シングル 3,1003,シングル 4,2001,ダブル 5,3001,ダブル
/**
* Implement hook_schema()
*/
function entity_example_schema(){
$schema['room']=array(
'description' => 'Rooms',
'fields' => array(
'rid' => array(
'type' => 'serial',
'description' => 'Room Id'
),
'type' => array(
'type' => 'varchar',
'length' => '255',
'description' => 'Room Type'
),
'room_number' => array(
'type' => 'varchar',
'length' => '25',
'description' => 'Room Number'
),
),
'primary key' => array('rid'),
);
return $schema;
}
/**
* Implements hook_entity_info().
*/
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'EntityAPIController',// デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
'fieldable' => TRUE, // 余分のフィールド追加可能
'entity keys' => array( // ルームIDをエンティティのキー.
'id' => 'rid',
'label' => 'room_number', // コールバック関数が優先
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'bundles' => array(), // bundleはこのエンティティ自身
// 'label callback' => 'room_label', // 指定しないとラベルの取得ができない
'access callback' => 'room_access' , // default:'value user_access'動作しない
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
);
return $services;
}
/**
* Extend the defaults.
*/
class EntityExampleMetadataController extends EntityDefaultMetadataController {
public function entityPropertyInfo() {
$info = parent::entityPropertyInfo();
$properties = &$info[$this->type]['properties'];
$properties['type'] = array(
'label' => t('Room type'),
'schema field' => 'type',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('Room type of the room'),
);
$properties['room_number'] = array(
'label' => t('Room Number'),
'schema field' => 'room_number',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('The number of the room'),
)
return $info;
}
}
function room_access($op, $room = NULL, $account = NULL) {
// 全員アクセス可能にする
return TRUE;
}
| 添付 | サイズ |
|---|---|
| entity_example.zip (1.87 KB) | 1.87 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'controller class' => 'RoomController',
'base table' => 'room',
'uri callback' => 'room_uri',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
),
'static cache' => TRUE,
'bundles' => array( // バンドルの指定
'room'=> array( // バンドル名: room
'label' => 'Room',
'admin' => array(
'path' => 'admin/structure/room/manage', // バンドルの管理URI
'access arguments' => array('administer rooms'),
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Full Room'),
'custom settings' => FALSE,
),
)
);
return $room_info;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// 管理が面にメッセージ表示のみ
$items['admin/structure/room/manage'] = array(
'title' => 'Room Admin',
'description' => 'Manage Room structure',
'page callback' => 'room_info',
'access arguments' => array('administer rooms'),
);
// 個別Room表示
$items['room/%entity_room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
// 新規Room作成
$items['room/add'] = array(
'title' => t('Add Room'),
'page callback' => 'room_add',
'access arguments' => array('create room'),
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* create "add room" form
*/
function room_add() {
$room = (object) array (
'rid' => '',
'type' => 'room',
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
field_attach_form('room', $room, $form, $form_state);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate('room', $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit('room', $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
return entity_get_controller('room')->save($room);
}
function room_info() {
return t('Welcome to the administration page for your rooms!');
}
function room_page_title($room){
return $room->room_number;
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
$return['room']['room'] = array(
'form' => array(
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 1,
),
),
);
return $return;
}
function room_uri( $room ){
return array(
'path' => 'room/' . $room->rid,
);
}
class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* Implements hook_load().
*/
function entity_room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.55 KB) | 2.55 KB |
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'RoomController', // EntityAPIControllerExportableの使用
// 'controller class' => 'EntityAPIController',// <-前回使用したもの: デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
・・・・・・・
);
// Entityの「controller class」のコールバッククラス
class RoomController extends EntityAPIControllerExportable {
public function __construct($entityType) {
parent::__construct($entityType);
}
/**
* Create a room - we first set up the values that are specific
* to our room schema but then also go through the EntityAPIController
* function.
*/
public function create(array $values = array()) {
// Add values that are specific to our Room
$values += array(
'rid' => '',
'is_new' => TRUE,
'type' => '',
'room_number' => '',
'sys_name' => '',
);
$room = parent::create($values);
return $room;
}
}
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
・・・・・
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
'admin ui' => array(
'path' => 'admin/structure/rooms',
'file' => 'rooms.admin.inc',
'controller class' => 'RoomsUIController',
),
);
return $services;
}
/**
* UI controller.
*/
class RoomsUIController extends EntityDefaultUIController {
/**
* Overrides hook_menu() defaults.
*/
public function hook_menu() {
$items = parent::hook_menu();
$items[$this->path]['description'] = t('Manage rooms. including adding
and removing fields and the display of fields.');
return $items;
}
}
/**
* Generates the room editing form.
*/
function room_form($form, &$form_state, $room, $op = 'edit') {
if ($op == 'clone') {
$room->sys_name .= ' (cloned)';
$room->room_number = '';
}
$form['room_number'] = array(
'#title' => t('Room Number'),
'#type' => 'textfield',
'#default_value' => isset($room->room_number)?$room->room_number : "",
'#description' => t('Entry the Room number.'),
'#required' => TRUE,
'#size' => 30,
);
// Machine-readable type name.
$form['sys_name'] = array(
'#type' => 'machine_name',
'#default_value' => isset($room->sys_name) ? $room->sys_name : '',
'#maxlength' => 32,
'#machine_name' => array(
'exists' => 'room_get_sys_names',
'source' => array('label'),
),
'#description' => t('A unique machine-readable name for this model type. It must only contain lowercase letters, numbers, and underscores.'),
);
$form['type'] = array(
'#title' => t('Room Type'),
'#type' => 'textfield',
'#default_value' => isset($room->type) ? $room->type : "",
'#description' => t('Entry the Room type.'),
'#required' => TRUE,
'#size' => 60,
);
$form['actions'] = array('#type' => 'actions');
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save Room'),
'#weight' => 40,
);
return $form;
}
/**
* Form API submit callback for the type form.
*/
function room_form_submit(&$form, &$form_state) {
$room = entity_ui_form_submit_build_entity($form, $form_state);
$room->save();
$form_state['redirect'] = 'admin/structure/rooms';
}
| 添付 | サイズ |
|---|---|
| entity_example_2.zip (3.28 KB) | 3.28 KB |
Roomのテストデータ(dsvフォーマット):
ルームナンバー: room_number
rid,room_number,type 1,1001,シングル 2,1002,シングル 3,1003,シングル 4,2001,ダブル 5,3001,ダブル
/**
* Implement hook_schema()
*/
function entity_example_schema(){
$schema['room']=array(
'description' => 'Rooms',
'fields' => array(
'rid' => array(
'type' => 'serial',
'description' => 'Room Id'
),
'type' => array(
'type' => 'varchar',
'length' => '255',
'description' => 'Room Type'
),
'room_number' => array(
'type' => 'varchar',
'length' => '25',
'description' => 'Room Number'
),
),
'primary key' => array('rid'),
);
return $schema;
}
/**
* Implements hook_entity_info().
*/
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'EntityAPIController',// デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
'fieldable' => TRUE, // 余分のフィールド追加可能
'entity keys' => array( // ルームIDをエンティティのキー.
'id' => 'rid',
'label' => 'room_number', // コールバック関数が優先
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'bundles' => array(), // bundleはこのエンティティ自身
// 'label callback' => 'room_label', // 指定しないとラベルの取得ができない
'access callback' => 'room_access' , // default:'value user_access'動作しない
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
);
return $services;
}
/**
* Extend the defaults.
*/
class EntityExampleMetadataController extends EntityDefaultMetadataController {
public function entityPropertyInfo() {
$info = parent::entityPropertyInfo();
$properties = &$info[$this->type]['properties'];
$properties['type'] = array(
'label' => t('Room type'),
'schema field' => 'type',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('Room type of the room'),
);
$properties['room_number'] = array(
'label' => t('Room Number'),
'schema field' => 'room_number',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('The number of the room'),
)
return $info;
}
}
function room_access($op, $room = NULL, $account = NULL) {
// 全員アクセス可能にする
return TRUE;
}
| 添付 | サイズ |
|---|---|
| entity_example.zip (1.87 KB) | 1.87 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'controller class' => 'RoomController',
'base table' => 'room',
'uri callback' => 'room_uri',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
),
'static cache' => TRUE,
'bundles' => array( // バンドルの指定
'room'=> array( // バンドル名: room
'label' => 'Room',
'admin' => array(
'path' => 'admin/structure/room/manage', // バンドルの管理URI
'access arguments' => array('administer rooms'),
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Full Room'),
'custom settings' => FALSE,
),
)
);
return $room_info;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// 管理が面にメッセージ表示のみ
$items['admin/structure/room/manage'] = array(
'title' => 'Room Admin',
'description' => 'Manage Room structure',
'page callback' => 'room_info',
'access arguments' => array('administer rooms'),
);
// 個別Room表示
$items['room/%entity_room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
// 新規Room作成
$items['room/add'] = array(
'title' => t('Add Room'),
'page callback' => 'room_add',
'access arguments' => array('create room'),
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* create "add room" form
*/
function room_add() {
$room = (object) array (
'rid' => '',
'type' => 'room',
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
field_attach_form('room', $room, $form, $form_state);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate('room', $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit('room', $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
return entity_get_controller('room')->save($room);
}
function room_info() {
return t('Welcome to the administration page for your rooms!');
}
function room_page_title($room){
return $room->room_number;
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
$return['room']['room'] = array(
'form' => array(
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 1,
),
),
);
return $return;
}
function room_uri( $room ){
return array(
'path' => 'room/' . $room->rid,
);
}
class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* Implements hook_load().
*/
function entity_room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.55 KB) | 2.55 KB |
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'RoomController', // EntityAPIControllerExportableの使用
// 'controller class' => 'EntityAPIController',// <-前回使用したもの: デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
・・・・・・・
);
// Entityの「controller class」のコールバッククラス
class RoomController extends EntityAPIControllerExportable {
public function __construct($entityType) {
parent::__construct($entityType);
}
/**
* Create a room - we first set up the values that are specific
* to our room schema but then also go through the EntityAPIController
* function.
*/
public function create(array $values = array()) {
// Add values that are specific to our Room
$values += array(
'rid' => '',
'is_new' => TRUE,
'type' => '',
'room_number' => '',
'sys_name' => '',
);
$room = parent::create($values);
return $room;
}
}
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
・・・・・
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
'admin ui' => array(
'path' => 'admin/structure/rooms',
'file' => 'rooms.admin.inc',
'controller class' => 'RoomsUIController',
),
);
return $services;
}
/**
* UI controller.
*/
class RoomsUIController extends EntityDefaultUIController {
/**
* Overrides hook_menu() defaults.
*/
public function hook_menu() {
$items = parent::hook_menu();
$items[$this->path]['description'] = t('Manage rooms. including adding
and removing fields and the display of fields.');
return $items;
}
}
/**
* Generates the room editing form.
*/
function room_form($form, &$form_state, $room, $op = 'edit') {
if ($op == 'clone') {
$room->sys_name .= ' (cloned)';
$room->room_number = '';
}
$form['room_number'] = array(
'#title' => t('Room Number'),
'#type' => 'textfield',
'#default_value' => isset($room->room_number)?$room->room_number : "",
'#description' => t('Entry the Room number.'),
'#required' => TRUE,
'#size' => 30,
);
// Machine-readable type name.
$form['sys_name'] = array(
'#type' => 'machine_name',
'#default_value' => isset($room->sys_name) ? $room->sys_name : '',
'#maxlength' => 32,
'#machine_name' => array(
'exists' => 'room_get_sys_names',
'source' => array('label'),
),
'#description' => t('A unique machine-readable name for this model type. It must only contain lowercase letters, numbers, and underscores.'),
);
$form['type'] = array(
'#title' => t('Room Type'),
'#type' => 'textfield',
'#default_value' => isset($room->type) ? $room->type : "",
'#description' => t('Entry the Room type.'),
'#required' => TRUE,
'#size' => 60,
);
$form['actions'] = array('#type' => 'actions');
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save Room'),
'#weight' => 40,
);
return $form;
}
/**
* Form API submit callback for the type form.
*/
function room_form_submit(&$form, &$form_state) {
$room = entity_ui_form_submit_build_entity($form, $form_state);
$room->save();
$form_state['redirect'] = 'admin/structure/rooms';
}
| 添付 | サイズ |
|---|---|
| entity_example_2.zip (3.28 KB) | 3.28 KB |
Roomのテストデータ(dsvフォーマット):
ルームナンバー: room_number
rid,room_number,type 1,1001,シングル 2,1002,シングル 3,1003,シングル 4,2001,ダブル 5,3001,ダブル
/**
* Implement hook_schema()
*/
function entity_example_schema(){
$schema['room']=array(
'description' => 'Rooms',
'fields' => array(
'rid' => array(
'type' => 'serial',
'description' => 'Room Id'
),
'type' => array(
'type' => 'varchar',
'length' => '255',
'description' => 'Room Type'
),
'room_number' => array(
'type' => 'varchar',
'length' => '25',
'description' => 'Room Number'
),
),
'primary key' => array('rid'),
);
return $schema;
}
/**
* Implements hook_entity_info().
*/
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'EntityAPIController',// デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
'fieldable' => TRUE, // 余分のフィールド追加可能
'entity keys' => array( // ルームIDをエンティティのキー.
'id' => 'rid',
'label' => 'room_number', // コールバック関数が優先
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'bundles' => array(), // bundleはこのエンティティ自身
// 'label callback' => 'room_label', // 指定しないとラベルの取得ができない
'access callback' => 'room_access' , // default:'value user_access'動作しない
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
);
return $services;
}
/**
* Extend the defaults.
*/
class EntityExampleMetadataController extends EntityDefaultMetadataController {
public function entityPropertyInfo() {
$info = parent::entityPropertyInfo();
$properties = &$info[$this->type]['properties'];
$properties['type'] = array(
'label' => t('Room type'),
'schema field' => 'type',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('Room type of the room'),
);
$properties['room_number'] = array(
'label' => t('Room Number'),
'schema field' => 'room_number',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('The number of the room'),
)
return $info;
}
}
function room_access($op, $room = NULL, $account = NULL) {
// 全員アクセス可能にする
return TRUE;
}
| 添付 | サイズ |
|---|---|
| entity_example.zip (1.87 KB) | 1.87 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'controller class' => 'RoomController',
'base table' => 'room',
'uri callback' => 'room_uri',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
),
'static cache' => TRUE,
'bundles' => array( // バンドルの指定
'room'=> array( // バンドル名: room
'label' => 'Room',
'admin' => array(
'path' => 'admin/structure/room/manage', // バンドルの管理URI
'access arguments' => array('administer rooms'),
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Full Room'),
'custom settings' => FALSE,
),
)
);
return $room_info;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// 管理が面にメッセージ表示のみ
$items['admin/structure/room/manage'] = array(
'title' => 'Room Admin',
'description' => 'Manage Room structure',
'page callback' => 'room_info',
'access arguments' => array('administer rooms'),
);
// 個別Room表示
$items['room/%entity_room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
// 新規Room作成
$items['room/add'] = array(
'title' => t('Add Room'),
'page callback' => 'room_add',
'access arguments' => array('create room'),
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* create "add room" form
*/
function room_add() {
$room = (object) array (
'rid' => '',
'type' => 'room',
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
field_attach_form('room', $room, $form, $form_state);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate('room', $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit('room', $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
return entity_get_controller('room')->save($room);
}
function room_info() {
return t('Welcome to the administration page for your rooms!');
}
function room_page_title($room){
return $room->room_number;
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
$return['room']['room'] = array(
'form' => array(
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 1,
),
),
);
return $return;
}
function room_uri( $room ){
return array(
'path' => 'room/' . $room->rid,
);
}
class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* Implements hook_load().
*/
function entity_room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.55 KB) | 2.55 KB |
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'RoomController', // EntityAPIControllerExportableの使用
// 'controller class' => 'EntityAPIController',// <-前回使用したもの: デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
・・・・・・・
);
// Entityの「controller class」のコールバッククラス
class RoomController extends EntityAPIControllerExportable {
public function __construct($entityType) {
parent::__construct($entityType);
}
/**
* Create a room - we first set up the values that are specific
* to our room schema but then also go through the EntityAPIController
* function.
*/
public function create(array $values = array()) {
// Add values that are specific to our Room
$values += array(
'rid' => '',
'is_new' => TRUE,
'type' => '',
'room_number' => '',
'sys_name' => '',
);
$room = parent::create($values);
return $room;
}
}
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
・・・・・
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
'admin ui' => array(
'path' => 'admin/structure/rooms',
'file' => 'rooms.admin.inc',
'controller class' => 'RoomsUIController',
),
);
return $services;
}
/**
* UI controller.
*/
class RoomsUIController extends EntityDefaultUIController {
/**
* Overrides hook_menu() defaults.
*/
public function hook_menu() {
$items = parent::hook_menu();
$items[$this->path]['description'] = t('Manage rooms. including adding
and removing fields and the display of fields.');
return $items;
}
}
/**
* Generates the room editing form.
*/
function room_form($form, &$form_state, $room, $op = 'edit') {
if ($op == 'clone') {
$room->sys_name .= ' (cloned)';
$room->room_number = '';
}
$form['room_number'] = array(
'#title' => t('Room Number'),
'#type' => 'textfield',
'#default_value' => isset($room->room_number)?$room->room_number : "",
'#description' => t('Entry the Room number.'),
'#required' => TRUE,
'#size' => 30,
);
// Machine-readable type name.
$form['sys_name'] = array(
'#type' => 'machine_name',
'#default_value' => isset($room->sys_name) ? $room->sys_name : '',
'#maxlength' => 32,
'#machine_name' => array(
'exists' => 'room_get_sys_names',
'source' => array('label'),
),
'#description' => t('A unique machine-readable name for this model type. It must only contain lowercase letters, numbers, and underscores.'),
);
$form['type'] = array(
'#title' => t('Room Type'),
'#type' => 'textfield',
'#default_value' => isset($room->type) ? $room->type : "",
'#description' => t('Entry the Room type.'),
'#required' => TRUE,
'#size' => 60,
);
$form['actions'] = array('#type' => 'actions');
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save Room'),
'#weight' => 40,
);
return $form;
}
/**
* Form API submit callback for the type form.
*/
function room_form_submit(&$form, &$form_state) {
$room = entity_ui_form_submit_build_entity($form, $form_state);
$room->save();
$form_state['redirect'] = 'admin/structure/rooms';
}
| 添付 | サイズ |
|---|---|
| entity_example_2.zip (3.28 KB) | 3.28 KB |
Roomのテストデータ(dsvフォーマット):
ルームナンバー: room_number
rid,room_number,type 1,1001,シングル 2,1002,シングル 3,1003,シングル 4,2001,ダブル 5,3001,ダブル
/**
* Implement hook_schema()
*/
function entity_example_schema(){
$schema['room']=array(
'description' => 'Rooms',
'fields' => array(
'rid' => array(
'type' => 'serial',
'description' => 'Room Id'
),
'type' => array(
'type' => 'varchar',
'length' => '255',
'description' => 'Room Type'
),
'room_number' => array(
'type' => 'varchar',
'length' => '25',
'description' => 'Room Number'
),
),
'primary key' => array('rid'),
);
return $schema;
}
/**
* Implements hook_entity_info().
*/
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'EntityAPIController',// デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
'fieldable' => TRUE, // 余分のフィールド追加可能
'entity keys' => array( // ルームIDをエンティティのキー.
'id' => 'rid',
'label' => 'room_number', // コールバック関数が優先
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'bundles' => array(), // bundleはこのエンティティ自身
// 'label callback' => 'room_label', // 指定しないとラベルの取得ができない
'access callback' => 'room_access' , // default:'value user_access'動作しない
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
);
return $services;
}
/**
* Extend the defaults.
*/
class EntityExampleMetadataController extends EntityDefaultMetadataController {
public function entityPropertyInfo() {
$info = parent::entityPropertyInfo();
$properties = &$info[$this->type]['properties'];
$properties['type'] = array(
'label' => t('Room type'),
'schema field' => 'type',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('Room type of the room'),
);
$properties['room_number'] = array(
'label' => t('Room Number'),
'schema field' => 'room_number',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('The number of the room'),
)
return $info;
}
}
function room_access($op, $room = NULL, $account = NULL) {
// 全員アクセス可能にする
return TRUE;
}
| 添付 | サイズ |
|---|---|
| entity_example.zip (1.87 KB) | 1.87 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'controller class' => 'RoomController',
'base table' => 'room',
'uri callback' => 'room_uri',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
),
'static cache' => TRUE,
'bundles' => array( // バンドルの指定
'room'=> array( // バンドル名: room
'label' => 'Room',
'admin' => array(
'path' => 'admin/structure/room/manage', // バンドルの管理URI
'access arguments' => array('administer rooms'),
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Full Room'),
'custom settings' => FALSE,
),
)
);
return $room_info;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// 管理が面にメッセージ表示のみ
$items['admin/structure/room/manage'] = array(
'title' => 'Room Admin',
'description' => 'Manage Room structure',
'page callback' => 'room_info',
'access arguments' => array('administer rooms'),
);
// 個別Room表示
$items['room/%entity_room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
// 新規Room作成
$items['room/add'] = array(
'title' => t('Add Room'),
'page callback' => 'room_add',
'access arguments' => array('create room'),
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* create "add room" form
*/
function room_add() {
$room = (object) array (
'rid' => '',
'type' => 'room',
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
field_attach_form('room', $room, $form, $form_state);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate('room', $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit('room', $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
return entity_get_controller('room')->save($room);
}
function room_info() {
return t('Welcome to the administration page for your rooms!');
}
function room_page_title($room){
return $room->room_number;
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
$return['room']['room'] = array(
'form' => array(
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 1,
),
),
);
return $return;
}
function room_uri( $room ){
return array(
'path' => 'room/' . $room->rid,
);
}
class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* Implements hook_load().
*/
function entity_room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.55 KB) | 2.55 KB |
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'RoomController', // EntityAPIControllerExportableの使用
// 'controller class' => 'EntityAPIController',// <-前回使用したもの: デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
・・・・・・・
);
// Entityの「controller class」のコールバッククラス
class RoomController extends EntityAPIControllerExportable {
public function __construct($entityType) {
parent::__construct($entityType);
}
/**
* Create a room - we first set up the values that are specific
* to our room schema but then also go through the EntityAPIController
* function.
*/
public function create(array $values = array()) {
// Add values that are specific to our Room
$values += array(
'rid' => '',
'is_new' => TRUE,
'type' => '',
'room_number' => '',
'sys_name' => '',
);
$room = parent::create($values);
return $room;
}
}
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
・・・・・
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
'admin ui' => array(
'path' => 'admin/structure/rooms',
'file' => 'rooms.admin.inc',
'controller class' => 'RoomsUIController',
),
);
return $services;
}
/**
* UI controller.
*/
class RoomsUIController extends EntityDefaultUIController {
/**
* Overrides hook_menu() defaults.
*/
public function hook_menu() {
$items = parent::hook_menu();
$items[$this->path]['description'] = t('Manage rooms. including adding
and removing fields and the display of fields.');
return $items;
}
}
/**
* Generates the room editing form.
*/
function room_form($form, &$form_state, $room, $op = 'edit') {
if ($op == 'clone') {
$room->sys_name .= ' (cloned)';
$room->room_number = '';
}
$form['room_number'] = array(
'#title' => t('Room Number'),
'#type' => 'textfield',
'#default_value' => isset($room->room_number)?$room->room_number : "",
'#description' => t('Entry the Room number.'),
'#required' => TRUE,
'#size' => 30,
);
// Machine-readable type name.
$form['sys_name'] = array(
'#type' => 'machine_name',
'#default_value' => isset($room->sys_name) ? $room->sys_name : '',
'#maxlength' => 32,
'#machine_name' => array(
'exists' => 'room_get_sys_names',
'source' => array('label'),
),
'#description' => t('A unique machine-readable name for this model type. It must only contain lowercase letters, numbers, and underscores.'),
);
$form['type'] = array(
'#title' => t('Room Type'),
'#type' => 'textfield',
'#default_value' => isset($room->type) ? $room->type : "",
'#description' => t('Entry the Room type.'),
'#required' => TRUE,
'#size' => 60,
);
$form['actions'] = array('#type' => 'actions');
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save Room'),
'#weight' => 40,
);
return $form;
}
/**
* Form API submit callback for the type form.
*/
function room_form_submit(&$form, &$form_state) {
$room = entity_ui_form_submit_build_entity($form, $form_state);
$room->save();
$form_state['redirect'] = 'admin/structure/rooms';
}
| 添付 | サイズ |
|---|---|
| entity_example_2.zip (3.28 KB) | 3.28 KB |
Roomのテストデータ(dsvフォーマット):
ルームナンバー: room_number
rid,room_number,type 1,1001,シングル 2,1002,シングル 3,1003,シングル 4,2001,ダブル 5,3001,ダブル
/**
* Implement hook_schema()
*/
function entity_example_schema(){
$schema['room']=array(
'description' => 'Rooms',
'fields' => array(
'rid' => array(
'type' => 'serial',
'description' => 'Room Id'
),
'type' => array(
'type' => 'varchar',
'length' => '255',
'description' => 'Room Type'
),
'room_number' => array(
'type' => 'varchar',
'length' => '25',
'description' => 'Room Number'
),
),
'primary key' => array('rid'),
);
return $schema;
}
/**
* Implements hook_entity_info().
*/
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'EntityAPIController',// デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
'fieldable' => TRUE, // 余分のフィールド追加可能
'entity keys' => array( // ルームIDをエンティティのキー.
'id' => 'rid',
'label' => 'room_number', // コールバック関数が優先
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'bundles' => array(), // bundleはこのエンティティ自身
// 'label callback' => 'room_label', // 指定しないとラベルの取得ができない
'access callback' => 'room_access' , // default:'value user_access'動作しない
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
);
return $services;
}
/**
* Extend the defaults.
*/
class EntityExampleMetadataController extends EntityDefaultMetadataController {
public function entityPropertyInfo() {
$info = parent::entityPropertyInfo();
$properties = &$info[$this->type]['properties'];
$properties['type'] = array(
'label' => t('Room type'),
'schema field' => 'type',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('Room type of the room'),
);
$properties['room_number'] = array(
'label' => t('Room Number'),
'schema field' => 'room_number',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('The number of the room'),
)
return $info;
}
}
function room_access($op, $room = NULL, $account = NULL) {
// 全員アクセス可能にする
return TRUE;
}
| 添付 | サイズ |
|---|---|
| entity_example.zip (1.87 KB) | 1.87 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'controller class' => 'RoomController',
'base table' => 'room',
'uri callback' => 'room_uri',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
),
'static cache' => TRUE,
'bundles' => array( // バンドルの指定
'room'=> array( // バンドル名: room
'label' => 'Room',
'admin' => array(
'path' => 'admin/structure/room/manage', // バンドルの管理URI
'access arguments' => array('administer rooms'),
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Full Room'),
'custom settings' => FALSE,
),
)
);
return $room_info;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// 管理が面にメッセージ表示のみ
$items['admin/structure/room/manage'] = array(
'title' => 'Room Admin',
'description' => 'Manage Room structure',
'page callback' => 'room_info',
'access arguments' => array('administer rooms'),
);
// 個別Room表示
$items['room/%entity_room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
// 新規Room作成
$items['room/add'] = array(
'title' => t('Add Room'),
'page callback' => 'room_add',
'access arguments' => array('create room'),
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* create "add room" form
*/
function room_add() {
$room = (object) array (
'rid' => '',
'type' => 'room',
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
field_attach_form('room', $room, $form, $form_state);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate('room', $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit('room', $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
return entity_get_controller('room')->save($room);
}
function room_info() {
return t('Welcome to the administration page for your rooms!');
}
function room_page_title($room){
return $room->room_number;
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
$return['room']['room'] = array(
'form' => array(
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 1,
),
),
);
return $return;
}
function room_uri( $room ){
return array(
'path' => 'room/' . $room->rid,
);
}
class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* Implements hook_load().
*/
function entity_room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.55 KB) | 2.55 KB |
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'RoomController', // EntityAPIControllerExportableの使用
// 'controller class' => 'EntityAPIController',// <-前回使用したもの: デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
・・・・・・・
);
// Entityの「controller class」のコールバッククラス
class RoomController extends EntityAPIControllerExportable {
public function __construct($entityType) {
parent::__construct($entityType);
}
/**
* Create a room - we first set up the values that are specific
* to our room schema but then also go through the EntityAPIController
* function.
*/
public function create(array $values = array()) {
// Add values that are specific to our Room
$values += array(
'rid' => '',
'is_new' => TRUE,
'type' => '',
'room_number' => '',
'sys_name' => '',
);
$room = parent::create($values);
return $room;
}
}
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
・・・・・
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
'admin ui' => array(
'path' => 'admin/structure/rooms',
'file' => 'rooms.admin.inc',
'controller class' => 'RoomsUIController',
),
);
return $services;
}
/**
* UI controller.
*/
class RoomsUIController extends EntityDefaultUIController {
/**
* Overrides hook_menu() defaults.
*/
public function hook_menu() {
$items = parent::hook_menu();
$items[$this->path]['description'] = t('Manage rooms. including adding
and removing fields and the display of fields.');
return $items;
}
}
/**
* Generates the room editing form.
*/
function room_form($form, &$form_state, $room, $op = 'edit') {
if ($op == 'clone') {
$room->sys_name .= ' (cloned)';
$room->room_number = '';
}
$form['room_number'] = array(
'#title' => t('Room Number'),
'#type' => 'textfield',
'#default_value' => isset($room->room_number)?$room->room_number : "",
'#description' => t('Entry the Room number.'),
'#required' => TRUE,
'#size' => 30,
);
// Machine-readable type name.
$form['sys_name'] = array(
'#type' => 'machine_name',
'#default_value' => isset($room->sys_name) ? $room->sys_name : '',
'#maxlength' => 32,
'#machine_name' => array(
'exists' => 'room_get_sys_names',
'source' => array('label'),
),
'#description' => t('A unique machine-readable name for this model type. It must only contain lowercase letters, numbers, and underscores.'),
);
$form['type'] = array(
'#title' => t('Room Type'),
'#type' => 'textfield',
'#default_value' => isset($room->type) ? $room->type : "",
'#description' => t('Entry the Room type.'),
'#required' => TRUE,
'#size' => 60,
);
$form['actions'] = array('#type' => 'actions');
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save Room'),
'#weight' => 40,
);
return $form;
}
/**
* Form API submit callback for the type form.
*/
function room_form_submit(&$form, &$form_state) {
$room = entity_ui_form_submit_build_entity($form, $form_state);
$room->save();
$form_state['redirect'] = 'admin/structure/rooms';
}
| 添付 | サイズ |
|---|---|
| entity_example_2.zip (3.28 KB) | 3.28 KB |
Roomのテストデータ(dsvフォーマット):
ルームナンバー: room_number
rid,room_number,type 1,1001,シングル 2,1002,シングル 3,1003,シングル 4,2001,ダブル 5,3001,ダブル
/**
* Implement hook_schema()
*/
function entity_example_schema(){
$schema['room']=array(
'description' => 'Rooms',
'fields' => array(
'rid' => array(
'type' => 'serial',
'description' => 'Room Id'
),
'type' => array(
'type' => 'varchar',
'length' => '255',
'description' => 'Room Type'
),
'room_number' => array(
'type' => 'varchar',
'length' => '25',
'description' => 'Room Number'
),
),
'primary key' => array('rid'),
);
return $schema;
}
/**
* Implements hook_entity_info().
*/
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'EntityAPIController',// デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
'fieldable' => TRUE, // 余分のフィールド追加可能
'entity keys' => array( // ルームIDをエンティティのキー.
'id' => 'rid',
'label' => 'room_number', // コールバック関数が優先
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'bundles' => array(), // bundleはこのエンティティ自身
// 'label callback' => 'room_label', // 指定しないとラベルの取得ができない
'access callback' => 'room_access' , // default:'value user_access'動作しない
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
);
return $services;
}
/**
* Extend the defaults.
*/
class EntityExampleMetadataController extends EntityDefaultMetadataController {
public function entityPropertyInfo() {
$info = parent::entityPropertyInfo();
$properties = &$info[$this->type]['properties'];
$properties['type'] = array(
'label' => t('Room type'),
'schema field' => 'type',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('Room type of the room'),
);
$properties['room_number'] = array(
'label' => t('Room Number'),
'schema field' => 'room_number',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('The number of the room'),
)
return $info;
}
}
function room_access($op, $room = NULL, $account = NULL) {
// 全員アクセス可能にする
return TRUE;
}
| 添付 | サイズ |
|---|---|
| entity_example.zip (1.87 KB) | 1.87 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'controller class' => 'RoomController',
'base table' => 'room',
'uri callback' => 'room_uri',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
),
'static cache' => TRUE,
'bundles' => array( // バンドルの指定
'room'=> array( // バンドル名: room
'label' => 'Room',
'admin' => array(
'path' => 'admin/structure/room/manage', // バンドルの管理URI
'access arguments' => array('administer rooms'),
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Full Room'),
'custom settings' => FALSE,
),
)
);
return $room_info;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// 管理が面にメッセージ表示のみ
$items['admin/structure/room/manage'] = array(
'title' => 'Room Admin',
'description' => 'Manage Room structure',
'page callback' => 'room_info',
'access arguments' => array('administer rooms'),
);
// 個別Room表示
$items['room/%entity_room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
// 新規Room作成
$items['room/add'] = array(
'title' => t('Add Room'),
'page callback' => 'room_add',
'access arguments' => array('create room'),
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* create "add room" form
*/
function room_add() {
$room = (object) array (
'rid' => '',
'type' => 'room',
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
field_attach_form('room', $room, $form, $form_state);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate('room', $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit('room', $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
return entity_get_controller('room')->save($room);
}
function room_info() {
return t('Welcome to the administration page for your rooms!');
}
function room_page_title($room){
return $room->room_number;
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
$return['room']['room'] = array(
'form' => array(
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 1,
),
),
);
return $return;
}
function room_uri( $room ){
return array(
'path' => 'room/' . $room->rid,
);
}
class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* Implements hook_load().
*/
function entity_room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.55 KB) | 2.55 KB |
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'RoomController', // EntityAPIControllerExportableの使用
// 'controller class' => 'EntityAPIController',// <-前回使用したもの: デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
・・・・・・・
);
// Entityの「controller class」のコールバッククラス
class RoomController extends EntityAPIControllerExportable {
public function __construct($entityType) {
parent::__construct($entityType);
}
/**
* Create a room - we first set up the values that are specific
* to our room schema but then also go through the EntityAPIController
* function.
*/
public function create(array $values = array()) {
// Add values that are specific to our Room
$values += array(
'rid' => '',
'is_new' => TRUE,
'type' => '',
'room_number' => '',
'sys_name' => '',
);
$room = parent::create($values);
return $room;
}
}
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
・・・・・
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
'admin ui' => array(
'path' => 'admin/structure/rooms',
'file' => 'rooms.admin.inc',
'controller class' => 'RoomsUIController',
),
);
return $services;
}
/**
* UI controller.
*/
class RoomsUIController extends EntityDefaultUIController {
/**
* Overrides hook_menu() defaults.
*/
public function hook_menu() {
$items = parent::hook_menu();
$items[$this->path]['description'] = t('Manage rooms. including adding
and removing fields and the display of fields.');
return $items;
}
}
/**
* Generates the room editing form.
*/
function room_form($form, &$form_state, $room, $op = 'edit') {
if ($op == 'clone') {
$room->sys_name .= ' (cloned)';
$room->room_number = '';
}
$form['room_number'] = array(
'#title' => t('Room Number'),
'#type' => 'textfield',
'#default_value' => isset($room->room_number)?$room->room_number : "",
'#description' => t('Entry the Room number.'),
'#required' => TRUE,
'#size' => 30,
);
// Machine-readable type name.
$form['sys_name'] = array(
'#type' => 'machine_name',
'#default_value' => isset($room->sys_name) ? $room->sys_name : '',
'#maxlength' => 32,
'#machine_name' => array(
'exists' => 'room_get_sys_names',
'source' => array('label'),
),
'#description' => t('A unique machine-readable name for this model type. It must only contain lowercase letters, numbers, and underscores.'),
);
$form['type'] = array(
'#title' => t('Room Type'),
'#type' => 'textfield',
'#default_value' => isset($room->type) ? $room->type : "",
'#description' => t('Entry the Room type.'),
'#required' => TRUE,
'#size' => 60,
);
$form['actions'] = array('#type' => 'actions');
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save Room'),
'#weight' => 40,
);
return $form;
}
/**
* Form API submit callback for the type form.
*/
function room_form_submit(&$form, &$form_state) {
$room = entity_ui_form_submit_build_entity($form, $form_state);
$room->save();
$form_state['redirect'] = 'admin/structure/rooms';
}
| 添付 | サイズ |
|---|---|
| entity_example_2.zip (3.28 KB) | 3.28 KB |
Roomのテストデータ(dsvフォーマット):
ルームナンバー: room_number
rid,room_number,type 1,1001,シングル 2,1002,シングル 3,1003,シングル 4,2001,ダブル 5,3001,ダブル
/**
* Implement hook_schema()
*/
function entity_example_schema(){
$schema['room']=array(
'description' => 'Rooms',
'fields' => array(
'rid' => array(
'type' => 'serial',
'description' => 'Room Id'
),
'type' => array(
'type' => 'varchar',
'length' => '255',
'description' => 'Room Type'
),
'room_number' => array(
'type' => 'varchar',
'length' => '25',
'description' => 'Room Number'
),
),
'primary key' => array('rid'),
);
return $schema;
}
/**
* Implements hook_entity_info().
*/
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'EntityAPIController',// デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
'fieldable' => TRUE, // 余分のフィールド追加可能
'entity keys' => array( // ルームIDをエンティティのキー.
'id' => 'rid',
'label' => 'room_number', // コールバック関数が優先
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'bundles' => array(), // bundleはこのエンティティ自身
// 'label callback' => 'room_label', // 指定しないとラベルの取得ができない
'access callback' => 'room_access' , // default:'value user_access'動作しない
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
);
return $services;
}
/**
* Extend the defaults.
*/
class EntityExampleMetadataController extends EntityDefaultMetadataController {
public function entityPropertyInfo() {
$info = parent::entityPropertyInfo();
$properties = &$info[$this->type]['properties'];
$properties['type'] = array(
'label' => t('Room type'),
'schema field' => 'type',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('Room type of the room'),
);
$properties['room_number'] = array(
'label' => t('Room Number'),
'schema field' => 'room_number',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('The number of the room'),
)
return $info;
}
}
function room_access($op, $room = NULL, $account = NULL) {
// 全員アクセス可能にする
return TRUE;
}
| 添付 | サイズ |
|---|---|
| entity_example.zip (1.87 KB) | 1.87 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'controller class' => 'RoomController',
'base table' => 'room',
'uri callback' => 'room_uri',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
),
'static cache' => TRUE,
'bundles' => array( // バンドルの指定
'room'=> array( // バンドル名: room
'label' => 'Room',
'admin' => array(
'path' => 'admin/structure/room/manage', // バンドルの管理URI
'access arguments' => array('administer rooms'),
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Full Room'),
'custom settings' => FALSE,
),
)
);
return $room_info;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// 管理が面にメッセージ表示のみ
$items['admin/structure/room/manage'] = array(
'title' => 'Room Admin',
'description' => 'Manage Room structure',
'page callback' => 'room_info',
'access arguments' => array('administer rooms'),
);
// 個別Room表示
$items['room/%entity_room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
// 新規Room作成
$items['room/add'] = array(
'title' => t('Add Room'),
'page callback' => 'room_add',
'access arguments' => array('create room'),
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* create "add room" form
*/
function room_add() {
$room = (object) array (
'rid' => '',
'type' => 'room',
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
field_attach_form('room', $room, $form, $form_state);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate('room', $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit('room', $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
return entity_get_controller('room')->save($room);
}
function room_info() {
return t('Welcome to the administration page for your rooms!');
}
function room_page_title($room){
return $room->room_number;
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
$return['room']['room'] = array(
'form' => array(
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 1,
),
),
);
return $return;
}
function room_uri( $room ){
return array(
'path' => 'room/' . $room->rid,
);
}
class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* Implements hook_load().
*/
function entity_room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.55 KB) | 2.55 KB |
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'RoomController', // EntityAPIControllerExportableの使用
// 'controller class' => 'EntityAPIController',// <-前回使用したもの: デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
・・・・・・・
);
// Entityの「controller class」のコールバッククラス
class RoomController extends EntityAPIControllerExportable {
public function __construct($entityType) {
parent::__construct($entityType);
}
/**
* Create a room - we first set up the values that are specific
* to our room schema but then also go through the EntityAPIController
* function.
*/
public function create(array $values = array()) {
// Add values that are specific to our Room
$values += array(
'rid' => '',
'is_new' => TRUE,
'type' => '',
'room_number' => '',
'sys_name' => '',
);
$room = parent::create($values);
return $room;
}
}
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
・・・・・
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
'admin ui' => array(
'path' => 'admin/structure/rooms',
'file' => 'rooms.admin.inc',
'controller class' => 'RoomsUIController',
),
);
return $services;
}
/**
* UI controller.
*/
class RoomsUIController extends EntityDefaultUIController {
/**
* Overrides hook_menu() defaults.
*/
public function hook_menu() {
$items = parent::hook_menu();
$items[$this->path]['description'] = t('Manage rooms. including adding
and removing fields and the display of fields.');
return $items;
}
}
/**
* Generates the room editing form.
*/
function room_form($form, &$form_state, $room, $op = 'edit') {
if ($op == 'clone') {
$room->sys_name .= ' (cloned)';
$room->room_number = '';
}
$form['room_number'] = array(
'#title' => t('Room Number'),
'#type' => 'textfield',
'#default_value' => isset($room->room_number)?$room->room_number : "",
'#description' => t('Entry the Room number.'),
'#required' => TRUE,
'#size' => 30,
);
// Machine-readable type name.
$form['sys_name'] = array(
'#type' => 'machine_name',
'#default_value' => isset($room->sys_name) ? $room->sys_name : '',
'#maxlength' => 32,
'#machine_name' => array(
'exists' => 'room_get_sys_names',
'source' => array('label'),
),
'#description' => t('A unique machine-readable name for this model type. It must only contain lowercase letters, numbers, and underscores.'),
);
$form['type'] = array(
'#title' => t('Room Type'),
'#type' => 'textfield',
'#default_value' => isset($room->type) ? $room->type : "",
'#description' => t('Entry the Room type.'),
'#required' => TRUE,
'#size' => 60,
);
$form['actions'] = array('#type' => 'actions');
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save Room'),
'#weight' => 40,
);
return $form;
}
/**
* Form API submit callback for the type form.
*/
function room_form_submit(&$form, &$form_state) {
$room = entity_ui_form_submit_build_entity($form, $form_state);
$room->save();
$form_state['redirect'] = 'admin/structure/rooms';
}
| 添付 | サイズ |
|---|---|
| entity_example_2.zip (3.28 KB) | 3.28 KB |
Roomのテストデータ(dsvフォーマット):
ルームナンバー: room_number
rid,room_number,type 1,1001,シングル 2,1002,シングル 3,1003,シングル 4,2001,ダブル 5,3001,ダブル
/**
* Implement hook_schema()
*/
function entity_example_schema(){
$schema['room']=array(
'description' => 'Rooms',
'fields' => array(
'rid' => array(
'type' => 'serial',
'description' => 'Room Id'
),
'type' => array(
'type' => 'varchar',
'length' => '255',
'description' => 'Room Type'
),
'room_number' => array(
'type' => 'varchar',
'length' => '25',
'description' => 'Room Number'
),
),
'primary key' => array('rid'),
);
return $schema;
}
/**
* Implements hook_entity_info().
*/
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'EntityAPIController',// デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
'fieldable' => TRUE, // 余分のフィールド追加可能
'entity keys' => array( // ルームIDをエンティティのキー.
'id' => 'rid',
'label' => 'room_number', // コールバック関数が優先
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'bundles' => array(), // bundleはこのエンティティ自身
// 'label callback' => 'room_label', // 指定しないとラベルの取得ができない
'access callback' => 'room_access' , // default:'value user_access'動作しない
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
);
return $services;
}
/**
* Extend the defaults.
*/
class EntityExampleMetadataController extends EntityDefaultMetadataController {
public function entityPropertyInfo() {
$info = parent::entityPropertyInfo();
$properties = &$info[$this->type]['properties'];
$properties['type'] = array(
'label' => t('Room type'),
'schema field' => 'type',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('Room type of the room'),
);
$properties['room_number'] = array(
'label' => t('Room Number'),
'schema field' => 'room_number',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('The number of the room'),
)
return $info;
}
}
function room_access($op, $room = NULL, $account = NULL) {
// 全員アクセス可能にする
return TRUE;
}
| 添付 | サイズ |
|---|---|
| entity_example.zip (1.87 KB) | 1.87 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'controller class' => 'RoomController',
'base table' => 'room',
'uri callback' => 'room_uri',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
),
'static cache' => TRUE,
'bundles' => array( // バンドルの指定
'room'=> array( // バンドル名: room
'label' => 'Room',
'admin' => array(
'path' => 'admin/structure/room/manage', // バンドルの管理URI
'access arguments' => array('administer rooms'),
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Full Room'),
'custom settings' => FALSE,
),
)
);
return $room_info;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// 管理が面にメッセージ表示のみ
$items['admin/structure/room/manage'] = array(
'title' => 'Room Admin',
'description' => 'Manage Room structure',
'page callback' => 'room_info',
'access arguments' => array('administer rooms'),
);
// 個別Room表示
$items['room/%entity_room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
// 新規Room作成
$items['room/add'] = array(
'title' => t('Add Room'),
'page callback' => 'room_add',
'access arguments' => array('create room'),
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* create "add room" form
*/
function room_add() {
$room = (object) array (
'rid' => '',
'type' => 'room',
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
field_attach_form('room', $room, $form, $form_state);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate('room', $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit('room', $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
return entity_get_controller('room')->save($room);
}
function room_info() {
return t('Welcome to the administration page for your rooms!');
}
function room_page_title($room){
return $room->room_number;
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
$return['room']['room'] = array(
'form' => array(
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 1,
),
),
);
return $return;
}
function room_uri( $room ){
return array(
'path' => 'room/' . $room->rid,
);
}
class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* Implements hook_load().
*/
function entity_room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.55 KB) | 2.55 KB |
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'RoomController', // EntityAPIControllerExportableの使用
// 'controller class' => 'EntityAPIController',// <-前回使用したもの: デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
・・・・・・・
);
// Entityの「controller class」のコールバッククラス
class RoomController extends EntityAPIControllerExportable {
public function __construct($entityType) {
parent::__construct($entityType);
}
/**
* Create a room - we first set up the values that are specific
* to our room schema but then also go through the EntityAPIController
* function.
*/
public function create(array $values = array()) {
// Add values that are specific to our Room
$values += array(
'rid' => '',
'is_new' => TRUE,
'type' => '',
'room_number' => '',
'sys_name' => '',
);
$room = parent::create($values);
return $room;
}
}
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
・・・・・
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
'admin ui' => array(
'path' => 'admin/structure/rooms',
'file' => 'rooms.admin.inc',
'controller class' => 'RoomsUIController',
),
);
return $services;
}
/**
* UI controller.
*/
class RoomsUIController extends EntityDefaultUIController {
/**
* Overrides hook_menu() defaults.
*/
public function hook_menu() {
$items = parent::hook_menu();
$items[$this->path]['description'] = t('Manage rooms. including adding
and removing fields and the display of fields.');
return $items;
}
}
/**
* Generates the room editing form.
*/
function room_form($form, &$form_state, $room, $op = 'edit') {
if ($op == 'clone') {
$room->sys_name .= ' (cloned)';
$room->room_number = '';
}
$form['room_number'] = array(
'#title' => t('Room Number'),
'#type' => 'textfield',
'#default_value' => isset($room->room_number)?$room->room_number : "",
'#description' => t('Entry the Room number.'),
'#required' => TRUE,
'#size' => 30,
);
// Machine-readable type name.
$form['sys_name'] = array(
'#type' => 'machine_name',
'#default_value' => isset($room->sys_name) ? $room->sys_name : '',
'#maxlength' => 32,
'#machine_name' => array(
'exists' => 'room_get_sys_names',
'source' => array('label'),
),
'#description' => t('A unique machine-readable name for this model type. It must only contain lowercase letters, numbers, and underscores.'),
);
$form['type'] = array(
'#title' => t('Room Type'),
'#type' => 'textfield',
'#default_value' => isset($room->type) ? $room->type : "",
'#description' => t('Entry the Room type.'),
'#required' => TRUE,
'#size' => 60,
);
$form['actions'] = array('#type' => 'actions');
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save Room'),
'#weight' => 40,
);
return $form;
}
/**
* Form API submit callback for the type form.
*/
function room_form_submit(&$form, &$form_state) {
$room = entity_ui_form_submit_build_entity($form, $form_state);
$room->save();
$form_state['redirect'] = 'admin/structure/rooms';
}
| 添付 | サイズ |
|---|---|
| entity_example_2.zip (3.28 KB) | 3.28 KB |
Roomのテストデータ(dsvフォーマット):
ルームナンバー: room_number
rid,room_number,type 1,1001,シングル 2,1002,シングル 3,1003,シングル 4,2001,ダブル 5,3001,ダブル
/**
* Implement hook_schema()
*/
function entity_example_schema(){
$schema['room']=array(
'description' => 'Rooms',
'fields' => array(
'rid' => array(
'type' => 'serial',
'description' => 'Room Id'
),
'type' => array(
'type' => 'varchar',
'length' => '255',
'description' => 'Room Type'
),
'room_number' => array(
'type' => 'varchar',
'length' => '25',
'description' => 'Room Number'
),
),
'primary key' => array('rid'),
);
return $schema;
}
/**
* Implements hook_entity_info().
*/
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'EntityAPIController',// デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
'fieldable' => TRUE, // 余分のフィールド追加可能
'entity keys' => array( // ルームIDをエンティティのキー.
'id' => 'rid',
'label' => 'room_number', // コールバック関数が優先
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'bundles' => array(), // bundleはこのエンティティ自身
// 'label callback' => 'room_label', // 指定しないとラベルの取得ができない
'access callback' => 'room_access' , // default:'value user_access'動作しない
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
);
return $services;
}
/**
* Extend the defaults.
*/
class EntityExampleMetadataController extends EntityDefaultMetadataController {
public function entityPropertyInfo() {
$info = parent::entityPropertyInfo();
$properties = &$info[$this->type]['properties'];
$properties['type'] = array(
'label' => t('Room type'),
'schema field' => 'type',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('Room type of the room'),
);
$properties['room_number'] = array(
'label' => t('Room Number'),
'schema field' => 'room_number',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('The number of the room'),
)
return $info;
}
}
function room_access($op, $room = NULL, $account = NULL) {
// 全員アクセス可能にする
return TRUE;
}
| 添付 | サイズ |
|---|---|
| entity_example.zip (1.87 KB) | 1.87 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'controller class' => 'RoomController',
'base table' => 'room',
'uri callback' => 'room_uri',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
),
'static cache' => TRUE,
'bundles' => array( // バンドルの指定
'room'=> array( // バンドル名: room
'label' => 'Room',
'admin' => array(
'path' => 'admin/structure/room/manage', // バンドルの管理URI
'access arguments' => array('administer rooms'),
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Full Room'),
'custom settings' => FALSE,
),
)
);
return $room_info;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// 管理が面にメッセージ表示のみ
$items['admin/structure/room/manage'] = array(
'title' => 'Room Admin',
'description' => 'Manage Room structure',
'page callback' => 'room_info',
'access arguments' => array('administer rooms'),
);
// 個別Room表示
$items['room/%entity_room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
// 新規Room作成
$items['room/add'] = array(
'title' => t('Add Room'),
'page callback' => 'room_add',
'access arguments' => array('create room'),
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* create "add room" form
*/
function room_add() {
$room = (object) array (
'rid' => '',
'type' => 'room',
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
field_attach_form('room', $room, $form, $form_state);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate('room', $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit('room', $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
return entity_get_controller('room')->save($room);
}
function room_info() {
return t('Welcome to the administration page for your rooms!');
}
function room_page_title($room){
return $room->room_number;
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
$return['room']['room'] = array(
'form' => array(
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 1,
),
),
);
return $return;
}
function room_uri( $room ){
return array(
'path' => 'room/' . $room->rid,
);
}
class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* Implements hook_load().
*/
function entity_room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.55 KB) | 2.55 KB |
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'RoomController', // EntityAPIControllerExportableの使用
// 'controller class' => 'EntityAPIController',// <-前回使用したもの: デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
・・・・・・・
);
// Entityの「controller class」のコールバッククラス
class RoomController extends EntityAPIControllerExportable {
public function __construct($entityType) {
parent::__construct($entityType);
}
/**
* Create a room - we first set up the values that are specific
* to our room schema but then also go through the EntityAPIController
* function.
*/
public function create(array $values = array()) {
// Add values that are specific to our Room
$values += array(
'rid' => '',
'is_new' => TRUE,
'type' => '',
'room_number' => '',
'sys_name' => '',
);
$room = parent::create($values);
return $room;
}
}
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
・・・・・
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
'admin ui' => array(
'path' => 'admin/structure/rooms',
'file' => 'rooms.admin.inc',
'controller class' => 'RoomsUIController',
),
);
return $services;
}
/**
* UI controller.
*/
class RoomsUIController extends EntityDefaultUIController {
/**
* Overrides hook_menu() defaults.
*/
public function hook_menu() {
$items = parent::hook_menu();
$items[$this->path]['description'] = t('Manage rooms. including adding
and removing fields and the display of fields.');
return $items;
}
}
/**
* Generates the room editing form.
*/
function room_form($form, &$form_state, $room, $op = 'edit') {
if ($op == 'clone') {
$room->sys_name .= ' (cloned)';
$room->room_number = '';
}
$form['room_number'] = array(
'#title' => t('Room Number'),
'#type' => 'textfield',
'#default_value' => isset($room->room_number)?$room->room_number : "",
'#description' => t('Entry the Room number.'),
'#required' => TRUE,
'#size' => 30,
);
// Machine-readable type name.
$form['sys_name'] = array(
'#type' => 'machine_name',
'#default_value' => isset($room->sys_name) ? $room->sys_name : '',
'#maxlength' => 32,
'#machine_name' => array(
'exists' => 'room_get_sys_names',
'source' => array('label'),
),
'#description' => t('A unique machine-readable name for this model type. It must only contain lowercase letters, numbers, and underscores.'),
);
$form['type'] = array(
'#title' => t('Room Type'),
'#type' => 'textfield',
'#default_value' => isset($room->type) ? $room->type : "",
'#description' => t('Entry the Room type.'),
'#required' => TRUE,
'#size' => 60,
);
$form['actions'] = array('#type' => 'actions');
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save Room'),
'#weight' => 40,
);
return $form;
}
/**
* Form API submit callback for the type form.
*/
function room_form_submit(&$form, &$form_state) {
$room = entity_ui_form_submit_build_entity($form, $form_state);
$room->save();
$form_state['redirect'] = 'admin/structure/rooms';
}
| 添付 | サイズ |
|---|---|
| entity_example_2.zip (3.28 KB) | 3.28 KB |
Roomのテストデータ(dsvフォーマット):
ルームナンバー: room_number
rid,room_number,type 1,1001,シングル 2,1002,シングル 3,1003,シングル 4,2001,ダブル 5,3001,ダブル
/**
* Implement hook_schema()
*/
function entity_example_schema(){
$schema['room']=array(
'description' => 'Rooms',
'fields' => array(
'rid' => array(
'type' => 'serial',
'description' => 'Room Id'
),
'type' => array(
'type' => 'varchar',
'length' => '255',
'description' => 'Room Type'
),
'room_number' => array(
'type' => 'varchar',
'length' => '25',
'description' => 'Room Number'
),
),
'primary key' => array('rid'),
);
return $schema;
}
/**
* Implements hook_entity_info().
*/
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'EntityAPIController',// デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
'fieldable' => TRUE, // 余分のフィールド追加可能
'entity keys' => array( // ルームIDをエンティティのキー.
'id' => 'rid',
'label' => 'room_number', // コールバック関数が優先
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'bundles' => array(), // bundleはこのエンティティ自身
// 'label callback' => 'room_label', // 指定しないとラベルの取得ができない
'access callback' => 'room_access' , // default:'value user_access'動作しない
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
);
return $services;
}
/**
* Extend the defaults.
*/
class EntityExampleMetadataController extends EntityDefaultMetadataController {
public function entityPropertyInfo() {
$info = parent::entityPropertyInfo();
$properties = &$info[$this->type]['properties'];
$properties['type'] = array(
'label' => t('Room type'),
'schema field' => 'type',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('Room type of the room'),
);
$properties['room_number'] = array(
'label' => t('Room Number'),
'schema field' => 'room_number',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('The number of the room'),
)
return $info;
}
}
function room_access($op, $room = NULL, $account = NULL) {
// 全員アクセス可能にする
return TRUE;
}
| 添付 | サイズ |
|---|---|
| entity_example.zip (1.87 KB) | 1.87 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'controller class' => 'RoomController',
'base table' => 'room',
'uri callback' => 'room_uri',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
),
'static cache' => TRUE,
'bundles' => array( // バンドルの指定
'room'=> array( // バンドル名: room
'label' => 'Room',
'admin' => array(
'path' => 'admin/structure/room/manage', // バンドルの管理URI
'access arguments' => array('administer rooms'),
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Full Room'),
'custom settings' => FALSE,
),
)
);
return $room_info;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// 管理が面にメッセージ表示のみ
$items['admin/structure/room/manage'] = array(
'title' => 'Room Admin',
'description' => 'Manage Room structure',
'page callback' => 'room_info',
'access arguments' => array('administer rooms'),
);
// 個別Room表示
$items['room/%entity_room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
// 新規Room作成
$items['room/add'] = array(
'title' => t('Add Room'),
'page callback' => 'room_add',
'access arguments' => array('create room'),
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* create "add room" form
*/
function room_add() {
$room = (object) array (
'rid' => '',
'type' => 'room',
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
field_attach_form('room', $room, $form, $form_state);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate('room', $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit('room', $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
return entity_get_controller('room')->save($room);
}
function room_info() {
return t('Welcome to the administration page for your rooms!');
}
function room_page_title($room){
return $room->room_number;
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
$return['room']['room'] = array(
'form' => array(
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 1,
),
),
);
return $return;
}
function room_uri( $room ){
return array(
'path' => 'room/' . $room->rid,
);
}
class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* Implements hook_load().
*/
function entity_room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.55 KB) | 2.55 KB |
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'RoomController', // EntityAPIControllerExportableの使用
// 'controller class' => 'EntityAPIController',// <-前回使用したもの: デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
・・・・・・・
);
// Entityの「controller class」のコールバッククラス
class RoomController extends EntityAPIControllerExportable {
public function __construct($entityType) {
parent::__construct($entityType);
}
/**
* Create a room - we first set up the values that are specific
* to our room schema but then also go through the EntityAPIController
* function.
*/
public function create(array $values = array()) {
// Add values that are specific to our Room
$values += array(
'rid' => '',
'is_new' => TRUE,
'type' => '',
'room_number' => '',
'sys_name' => '',
);
$room = parent::create($values);
return $room;
}
}
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
・・・・・
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
'admin ui' => array(
'path' => 'admin/structure/rooms',
'file' => 'rooms.admin.inc',
'controller class' => 'RoomsUIController',
),
);
return $services;
}
/**
* UI controller.
*/
class RoomsUIController extends EntityDefaultUIController {
/**
* Overrides hook_menu() defaults.
*/
public function hook_menu() {
$items = parent::hook_menu();
$items[$this->path]['description'] = t('Manage rooms. including adding
and removing fields and the display of fields.');
return $items;
}
}
/**
* Generates the room editing form.
*/
function room_form($form, &$form_state, $room, $op = 'edit') {
if ($op == 'clone') {
$room->sys_name .= ' (cloned)';
$room->room_number = '';
}
$form['room_number'] = array(
'#title' => t('Room Number'),
'#type' => 'textfield',
'#default_value' => isset($room->room_number)?$room->room_number : "",
'#description' => t('Entry the Room number.'),
'#required' => TRUE,
'#size' => 30,
);
// Machine-readable type name.
$form['sys_name'] = array(
'#type' => 'machine_name',
'#default_value' => isset($room->sys_name) ? $room->sys_name : '',
'#maxlength' => 32,
'#machine_name' => array(
'exists' => 'room_get_sys_names',
'source' => array('label'),
),
'#description' => t('A unique machine-readable name for this model type. It must only contain lowercase letters, numbers, and underscores.'),
);
$form['type'] = array(
'#title' => t('Room Type'),
'#type' => 'textfield',
'#default_value' => isset($room->type) ? $room->type : "",
'#description' => t('Entry the Room type.'),
'#required' => TRUE,
'#size' => 60,
);
$form['actions'] = array('#type' => 'actions');
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save Room'),
'#weight' => 40,
);
return $form;
}
/**
* Form API submit callback for the type form.
*/
function room_form_submit(&$form, &$form_state) {
$room = entity_ui_form_submit_build_entity($form, $form_state);
$room->save();
$form_state['redirect'] = 'admin/structure/rooms';
}
| 添付 | サイズ |
|---|---|
| entity_example_2.zip (3.28 KB) | 3.28 KB |
Roomのテストデータ(dsvフォーマット):
ルームナンバー: room_number
rid,room_number,type 1,1001,シングル 2,1002,シングル 3,1003,シングル 4,2001,ダブル 5,3001,ダブル
/**
* Implement hook_schema()
*/
function entity_example_schema(){
$schema['room']=array(
'description' => 'Rooms',
'fields' => array(
'rid' => array(
'type' => 'serial',
'description' => 'Room Id'
),
'type' => array(
'type' => 'varchar',
'length' => '255',
'description' => 'Room Type'
),
'room_number' => array(
'type' => 'varchar',
'length' => '25',
'description' => 'Room Number'
),
),
'primary key' => array('rid'),
);
return $schema;
}
/**
* Implements hook_entity_info().
*/
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'EntityAPIController',// デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
'fieldable' => TRUE, // 余分のフィールド追加可能
'entity keys' => array( // ルームIDをエンティティのキー.
'id' => 'rid',
'label' => 'room_number', // コールバック関数が優先
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'bundles' => array(), // bundleはこのエンティティ自身
// 'label callback' => 'room_label', // 指定しないとラベルの取得ができない
'access callback' => 'room_access' , // default:'value user_access'動作しない
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
);
return $services;
}
/**
* Extend the defaults.
*/
class EntityExampleMetadataController extends EntityDefaultMetadataController {
public function entityPropertyInfo() {
$info = parent::entityPropertyInfo();
$properties = &$info[$this->type]['properties'];
$properties['type'] = array(
'label' => t('Room type'),
'schema field' => 'type',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('Room type of the room'),
);
$properties['room_number'] = array(
'label' => t('Room Number'),
'schema field' => 'room_number',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('The number of the room'),
)
return $info;
}
}
function room_access($op, $room = NULL, $account = NULL) {
// 全員アクセス可能にする
return TRUE;
}
| 添付 | サイズ |
|---|---|
| entity_example.zip (1.87 KB) | 1.87 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'controller class' => 'RoomController',
'base table' => 'room',
'uri callback' => 'room_uri',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
),
'static cache' => TRUE,
'bundles' => array( // バンドルの指定
'room'=> array( // バンドル名: room
'label' => 'Room',
'admin' => array(
'path' => 'admin/structure/room/manage', // バンドルの管理URI
'access arguments' => array('administer rooms'),
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Full Room'),
'custom settings' => FALSE,
),
)
);
return $room_info;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// 管理が面にメッセージ表示のみ
$items['admin/structure/room/manage'] = array(
'title' => 'Room Admin',
'description' => 'Manage Room structure',
'page callback' => 'room_info',
'access arguments' => array('administer rooms'),
);
// 個別Room表示
$items['room/%entity_room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
// 新規Room作成
$items['room/add'] = array(
'title' => t('Add Room'),
'page callback' => 'room_add',
'access arguments' => array('create room'),
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* create "add room" form
*/
function room_add() {
$room = (object) array (
'rid' => '',
'type' => 'room',
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
field_attach_form('room', $room, $form, $form_state);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate('room', $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit('room', $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
return entity_get_controller('room')->save($room);
}
function room_info() {
return t('Welcome to the administration page for your rooms!');
}
function room_page_title($room){
return $room->room_number;
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
$return['room']['room'] = array(
'form' => array(
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 1,
),
),
);
return $return;
}
function room_uri( $room ){
return array(
'path' => 'room/' . $room->rid,
);
}
class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* Implements hook_load().
*/
function entity_room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.55 KB) | 2.55 KB |
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'RoomController', // EntityAPIControllerExportableの使用
// 'controller class' => 'EntityAPIController',// <-前回使用したもの: デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
・・・・・・・
);
// Entityの「controller class」のコールバッククラス
class RoomController extends EntityAPIControllerExportable {
public function __construct($entityType) {
parent::__construct($entityType);
}
/**
* Create a room - we first set up the values that are specific
* to our room schema but then also go through the EntityAPIController
* function.
*/
public function create(array $values = array()) {
// Add values that are specific to our Room
$values += array(
'rid' => '',
'is_new' => TRUE,
'type' => '',
'room_number' => '',
'sys_name' => '',
);
$room = parent::create($values);
return $room;
}
}
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
・・・・・
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
'admin ui' => array(
'path' => 'admin/structure/rooms',
'file' => 'rooms.admin.inc',
'controller class' => 'RoomsUIController',
),
);
return $services;
}
/**
* UI controller.
*/
class RoomsUIController extends EntityDefaultUIController {
/**
* Overrides hook_menu() defaults.
*/
public function hook_menu() {
$items = parent::hook_menu();
$items[$this->path]['description'] = t('Manage rooms. including adding
and removing fields and the display of fields.');
return $items;
}
}
/**
* Generates the room editing form.
*/
function room_form($form, &$form_state, $room, $op = 'edit') {
if ($op == 'clone') {
$room->sys_name .= ' (cloned)';
$room->room_number = '';
}
$form['room_number'] = array(
'#title' => t('Room Number'),
'#type' => 'textfield',
'#default_value' => isset($room->room_number)?$room->room_number : "",
'#description' => t('Entry the Room number.'),
'#required' => TRUE,
'#size' => 30,
);
// Machine-readable type name.
$form['sys_name'] = array(
'#type' => 'machine_name',
'#default_value' => isset($room->sys_name) ? $room->sys_name : '',
'#maxlength' => 32,
'#machine_name' => array(
'exists' => 'room_get_sys_names',
'source' => array('label'),
),
'#description' => t('A unique machine-readable name for this model type. It must only contain lowercase letters, numbers, and underscores.'),
);
$form['type'] = array(
'#title' => t('Room Type'),
'#type' => 'textfield',
'#default_value' => isset($room->type) ? $room->type : "",
'#description' => t('Entry the Room type.'),
'#required' => TRUE,
'#size' => 60,
);
$form['actions'] = array('#type' => 'actions');
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save Room'),
'#weight' => 40,
);
return $form;
}
/**
* Form API submit callback for the type form.
*/
function room_form_submit(&$form, &$form_state) {
$room = entity_ui_form_submit_build_entity($form, $form_state);
$room->save();
$form_state['redirect'] = 'admin/structure/rooms';
}
| 添付 | サイズ |
|---|---|
| entity_example_2.zip (3.28 KB) | 3.28 KB |
Roomのテストデータ(dsvフォーマット):
ルームナンバー: room_number
rid,room_number,type 1,1001,シングル 2,1002,シングル 3,1003,シングル 4,2001,ダブル 5,3001,ダブル
/**
* Implement hook_schema()
*/
function entity_example_schema(){
$schema['room']=array(
'description' => 'Rooms',
'fields' => array(
'rid' => array(
'type' => 'serial',
'description' => 'Room Id'
),
'type' => array(
'type' => 'varchar',
'length' => '255',
'description' => 'Room Type'
),
'room_number' => array(
'type' => 'varchar',
'length' => '25',
'description' => 'Room Number'
),
),
'primary key' => array('rid'),
);
return $schema;
}
/**
* Implements hook_entity_info().
*/
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'EntityAPIController',// デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
'fieldable' => TRUE, // 余分のフィールド追加可能
'entity keys' => array( // ルームIDをエンティティのキー.
'id' => 'rid',
'label' => 'room_number', // コールバック関数が優先
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'bundles' => array(), // bundleはこのエンティティ自身
// 'label callback' => 'room_label', // 指定しないとラベルの取得ができない
'access callback' => 'room_access' , // default:'value user_access'動作しない
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
);
return $services;
}
/**
* Extend the defaults.
*/
class EntityExampleMetadataController extends EntityDefaultMetadataController {
public function entityPropertyInfo() {
$info = parent::entityPropertyInfo();
$properties = &$info[$this->type]['properties'];
$properties['type'] = array(
'label' => t('Room type'),
'schema field' => 'type',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('Room type of the room'),
);
$properties['room_number'] = array(
'label' => t('Room Number'),
'schema field' => 'room_number',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('The number of the room'),
)
return $info;
}
}
function room_access($op, $room = NULL, $account = NULL) {
// 全員アクセス可能にする
return TRUE;
}
| 添付 | サイズ |
|---|---|
| entity_example.zip (1.87 KB) | 1.87 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'controller class' => 'RoomController',
'base table' => 'room',
'uri callback' => 'room_uri',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
),
'static cache' => TRUE,
'bundles' => array( // バンドルの指定
'room'=> array( // バンドル名: room
'label' => 'Room',
'admin' => array(
'path' => 'admin/structure/room/manage', // バンドルの管理URI
'access arguments' => array('administer rooms'),
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Full Room'),
'custom settings' => FALSE,
),
)
);
return $room_info;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// 管理が面にメッセージ表示のみ
$items['admin/structure/room/manage'] = array(
'title' => 'Room Admin',
'description' => 'Manage Room structure',
'page callback' => 'room_info',
'access arguments' => array('administer rooms'),
);
// 個別Room表示
$items['room/%entity_room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
// 新規Room作成
$items['room/add'] = array(
'title' => t('Add Room'),
'page callback' => 'room_add',
'access arguments' => array('create room'),
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* create "add room" form
*/
function room_add() {
$room = (object) array (
'rid' => '',
'type' => 'room',
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
field_attach_form('room', $room, $form, $form_state);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate('room', $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit('room', $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
return entity_get_controller('room')->save($room);
}
function room_info() {
return t('Welcome to the administration page for your rooms!');
}
function room_page_title($room){
return $room->room_number;
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
$return['room']['room'] = array(
'form' => array(
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 1,
),
),
);
return $return;
}
function room_uri( $room ){
return array(
'path' => 'room/' . $room->rid,
);
}
class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* Implements hook_load().
*/
function entity_room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.55 KB) | 2.55 KB |
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'RoomController', // EntityAPIControllerExportableの使用
// 'controller class' => 'EntityAPIController',// <-前回使用したもの: デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
・・・・・・・
);
// Entityの「controller class」のコールバッククラス
class RoomController extends EntityAPIControllerExportable {
public function __construct($entityType) {
parent::__construct($entityType);
}
/**
* Create a room - we first set up the values that are specific
* to our room schema but then also go through the EntityAPIController
* function.
*/
public function create(array $values = array()) {
// Add values that are specific to our Room
$values += array(
'rid' => '',
'is_new' => TRUE,
'type' => '',
'room_number' => '',
'sys_name' => '',
);
$room = parent::create($values);
return $room;
}
}
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
・・・・・
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
'admin ui' => array(
'path' => 'admin/structure/rooms',
'file' => 'rooms.admin.inc',
'controller class' => 'RoomsUIController',
),
);
return $services;
}
/**
* UI controller.
*/
class RoomsUIController extends EntityDefaultUIController {
/**
* Overrides hook_menu() defaults.
*/
public function hook_menu() {
$items = parent::hook_menu();
$items[$this->path]['description'] = t('Manage rooms. including adding
and removing fields and the display of fields.');
return $items;
}
}
/**
* Generates the room editing form.
*/
function room_form($form, &$form_state, $room, $op = 'edit') {
if ($op == 'clone') {
$room->sys_name .= ' (cloned)';
$room->room_number = '';
}
$form['room_number'] = array(
'#title' => t('Room Number'),
'#type' => 'textfield',
'#default_value' => isset($room->room_number)?$room->room_number : "",
'#description' => t('Entry the Room number.'),
'#required' => TRUE,
'#size' => 30,
);
// Machine-readable type name.
$form['sys_name'] = array(
'#type' => 'machine_name',
'#default_value' => isset($room->sys_name) ? $room->sys_name : '',
'#maxlength' => 32,
'#machine_name' => array(
'exists' => 'room_get_sys_names',
'source' => array('label'),
),
'#description' => t('A unique machine-readable name for this model type. It must only contain lowercase letters, numbers, and underscores.'),
);
$form['type'] = array(
'#title' => t('Room Type'),
'#type' => 'textfield',
'#default_value' => isset($room->type) ? $room->type : "",
'#description' => t('Entry the Room type.'),
'#required' => TRUE,
'#size' => 60,
);
$form['actions'] = array('#type' => 'actions');
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => t('Save Room'),
'#weight' => 40,
);
return $form;
}
/**
* Form API submit callback for the type form.
*/
function room_form_submit(&$form, &$form_state) {
$room = entity_ui_form_submit_build_entity($form, $form_state);
$room->save();
$form_state['redirect'] = 'admin/structure/rooms';
}
| 添付 | サイズ |
|---|---|
| entity_example_2.zip (3.28 KB) | 3.28 KB |
Roomのテストデータ(dsvフォーマット):
ルームナンバー: room_number
rid,room_number,type 1,1001,シングル 2,1002,シングル 3,1003,シングル 4,2001,ダブル 5,3001,ダブル
/**
* Implement hook_schema()
*/
function entity_example_schema(){
$schema['room']=array(
'description' => 'Rooms',
'fields' => array(
'rid' => array(
'type' => 'serial',
'description' => 'Room Id'
),
'type' => array(
'type' => 'varchar',
'length' => '255',
'description' => 'Room Type'
),
'room_number' => array(
'type' => 'varchar',
'length' => '25',
'description' => 'Room Number'
),
),
'primary key' => array('rid'),
);
return $schema;
}
/**
* Implements hook_entity_info().
*/
/**
* Implements hook_entity_info().
*/
function entity_example_entity_info()
{
$services['room'] = array(
'label' => t('Room'), // エンティティ名
'entity class' => 'Entity', // デフォルトクラスの使用
'controller class' => 'EntityAPIController',// デフォルトクラスの使用
'base table' => 'room', // DB上のテーブル名
'fieldable' => TRUE, // 余分のフィールド追加可能
'entity keys' => array( // ルームIDをエンティティのキー.
'id' => 'rid',
'label' => 'room_number', // コールバック関数が優先
),
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'bundles' => array(), // bundleはこのエンティティ自身
// 'label callback' => 'room_label', // 指定しないとラベルの取得ができない
'access callback' => 'room_access' , // default:'value user_access'動作しない
'module' => 'entity_example',
'metadata controller class' => 'EntityExampleMetadataController',
);
return $services;
}
/**
* Extend the defaults.
*/
class EntityExampleMetadataController extends EntityDefaultMetadataController {
public function entityPropertyInfo() {
$info = parent::entityPropertyInfo();
$properties = &$info[$this->type]['properties'];
$properties['type'] = array(
'label' => t('Room type'),
'schema field' => 'type',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('Room type of the room'),
);
$properties['room_number'] = array(
'label' => t('Room Number'),
'schema field' => 'room_number',
'getter callback' => 'entity_property_getter_method',
'setter callback' => 'entity_property_verbatim_set',
'required' => TRUE,
'description' => t('The number of the room'),
)
return $info;
}
}
function room_access($op, $room = NULL, $account = NULL) {
// 全員アクセス可能にする
return TRUE;
}
| 添付 | サイズ |
|---|---|
| entity_example.zip (1.87 KB) | 1.87 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'controller class' => 'RoomController',
'base table' => 'room',
'uri callback' => 'room_uri',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
),
'static cache' => TRUE,
'bundles' => array( // バンドルの指定
'room'=> array( // バンドル名: room
'label' => 'Room',
'admin' => array(
'path' => 'admin/structure/room/manage', // バンドルの管理URI
'access arguments' => array('administer rooms'),
),
),
),
'view modes' => array(
'full' => array(
'label' => t('Full Room'),
'custom settings' => FALSE,
),
)
);
return $room_info;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// 管理が面にメッセージ表示のみ
$items['admin/structure/room/manage'] = array(
'title' => 'Room Admin',
'description' => 'Manage Room structure',
'page callback' => 'room_info',
'access arguments' => array('administer rooms'),
);
// 個別Room表示
$items['room/%entity_room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
// 新規Room作成
$items['room/add'] = array(
'title' => t('Add Room'),
'page callback' => 'room_add',
'access arguments' => array('create room'),
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* create "add room" form
*/
function room_add() {
$room = (object) array (
'rid' => '',
'type' => 'room',
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
);
field_attach_form('room', $room, $form, $form_state);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate('room', $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit('room', $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
return entity_get_controller('room')->save($room);
}
function room_info() {
return t('Welcome to the administration page for your rooms!');
}
function room_page_title($room){
return $room->room_number;
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
$return['room']['room'] = array(
'form' => array(
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 1,
),
),
);
return $return;
}
function room_uri( $room ){
return array(
'path' => 'room/' . $room->rid,
);
}
class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* Implements hook_load().
*/
function entity_room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.55 KB) | 2.55 KB |
function entity_room_entity_info()
{
$return = array(
'room' => array(
'label' => t('Room'),
'entity class' => 'RoomEntity',
'label callback' => 'entity_class_label', // see RoomEntity class
'uri callback' => 'entity_class_uri', // see RoomEntity class
'controller class' => 'RoomController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'bundle' => 'room_type_sys',
),
'bundle keys' => array(
'bundle' => 'room_type_sys',
),
'bundles' => array(),
'load hook' => 'room_load',
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'module' => 'entity_room',
'access callback' => 'entity_room_access',
),
);
$return['room_type'] = array(
'label' => t('Room Type'),
'entity class' => 'RoomTypeEntity',
'controller class' => 'RoomTypeController',
'base table' => 'room_type',
'fieldable' => FALSE,
'bundle of' => 'room',
'exportable' => TRUE,
'entity keys' => array(
'id' => 'rtid',
'name' => 'room_type_sys',
'label' => 'room_type_label',
),
'module' => 'entity_room',
'admin ui' => array( // Enable the entity API's admin UI.
'path' => 'admin/structure/room-types',
'file' => 'room_type.admin.inc',
'controller class' => 'RoomTypeUIController',
),
'access callback' => 'entity_room_access',
);
return $return;
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (5.08 KB) | 5.08 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* 追加されたバンドル(RoomType)に拡張フィールド操作URIの追加
* Implements hook_entity_info_alter().
*/
function entity_room_entity_info_alter(&$entity_info)
{
foreach (room_types() as $type => $info) {
$entity_info['room']['bundles'][$type] = array(
'label' => $info->room_type_label,
'admin' => array(
'path' => 'admin/structure/room-types/manage/%room_type',
'real path' => 'admin/structure/room-types/manage/' . $type,
'bundle argument' => 4,
),
);
}
}
// room_type_sys でデータの取得
// room_type入力がなければ、全部のRoomTypeを返す
function room_type_load($room_type=null){
return room_types( $room_type ) ;
}
function room_types( $room_type = null ){
$types = entity_load_multiple_by_name( 'room_type', isset($room_type) ? array($room_type) : false ) ;
return isset( $room_type ) ? reset($types) : $types ;
}
| 添付 | サイズ |
|---|---|
| custom_table_2.zip (1.67 KB) | 1.67 KB |
function entity_room_entity_info()
{
$return = array(
'room' => array(
'label' => t('Room'),
'entity class' => 'RoomEntity',
'label callback' => 'entity_class_label', // see RoomEntity class
'uri callback' => 'entity_class_uri', // see RoomEntity class
'controller class' => 'RoomController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'bundle' => 'room_type_sys',
),
'bundle keys' => array(
'bundle' => 'room_type_sys',
),
'bundles' => array(),
'load hook' => 'room_load',
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'module' => 'entity_room',
'access callback' => 'entity_room_access',
),
);
$return['room_type'] = array(
'label' => t('Room Type'),
'entity class' => 'RoomTypeEntity',
'controller class' => 'RoomTypeController',
'base table' => 'room_type',
'fieldable' => FALSE,
'bundle of' => 'room',
'exportable' => TRUE,
'entity keys' => array(
'id' => 'rtid',
'name' => 'room_type_sys',
'label' => 'room_type_label',
),
'module' => 'entity_room',
'admin ui' => array( // Enable the entity API's admin UI.
'path' => 'admin/structure/room-types',
'file' => 'room_type.admin.inc',
'controller class' => 'RoomTypeUIController',
),
'access callback' => 'entity_room_access',
);
return $return;
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (5.08 KB) | 5.08 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* 追加されたバンドル(RoomType)に拡張フィールド操作URIの追加
* Implements hook_entity_info_alter().
*/
function entity_room_entity_info_alter(&$entity_info)
{
foreach (room_types() as $type => $info) {
$entity_info['room']['bundles'][$type] = array(
'label' => $info->room_type_label,
'admin' => array(
'path' => 'admin/structure/room-types/manage/%room_type',
'real path' => 'admin/structure/room-types/manage/' . $type,
'bundle argument' => 4,
),
);
}
}
// room_type_sys でデータの取得
// room_type入力がなければ、全部のRoomTypeを返す
function room_type_load($room_type=null){
return room_types( $room_type ) ;
}
function room_types( $room_type = null ){
$types = entity_load_multiple_by_name( 'room_type', isset($room_type) ? array($room_type) : false ) ;
return isset( $room_type ) ? reset($types) : $types ;
}
| 添付 | サイズ |
|---|---|
| custom_table_2.zip (1.67 KB) | 1.67 KB |
function entity_room_entity_info()
{
$return = array(
'room' => array(
'label' => t('Room'),
'entity class' => 'RoomEntity',
'label callback' => 'entity_class_label', // see RoomEntity class
'uri callback' => 'entity_class_uri', // see RoomEntity class
'controller class' => 'RoomController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'bundle' => 'room_type_sys',
),
'bundle keys' => array(
'bundle' => 'room_type_sys',
),
'bundles' => array(),
'load hook' => 'room_load',
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'module' => 'entity_room',
'access callback' => 'entity_room_access',
),
);
$return['room_type'] = array(
'label' => t('Room Type'),
'entity class' => 'RoomTypeEntity',
'controller class' => 'RoomTypeController',
'base table' => 'room_type',
'fieldable' => FALSE,
'bundle of' => 'room',
'exportable' => TRUE,
'entity keys' => array(
'id' => 'rtid',
'name' => 'room_type_sys',
'label' => 'room_type_label',
),
'module' => 'entity_room',
'admin ui' => array( // Enable the entity API's admin UI.
'path' => 'admin/structure/room-types',
'file' => 'room_type.admin.inc',
'controller class' => 'RoomTypeUIController',
),
'access callback' => 'entity_room_access',
);
return $return;
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (5.08 KB) | 5.08 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* 追加されたバンドル(RoomType)に拡張フィールド操作URIの追加
* Implements hook_entity_info_alter().
*/
function entity_room_entity_info_alter(&$entity_info)
{
foreach (room_types() as $type => $info) {
$entity_info['room']['bundles'][$type] = array(
'label' => $info->room_type_label,
'admin' => array(
'path' => 'admin/structure/room-types/manage/%room_type',
'real path' => 'admin/structure/room-types/manage/' . $type,
'bundle argument' => 4,
),
);
}
}
// room_type_sys でデータの取得
// room_type入力がなければ、全部のRoomTypeを返す
function room_type_load($room_type=null){
return room_types( $room_type ) ;
}
function room_types( $room_type = null ){
$types = entity_load_multiple_by_name( 'room_type', isset($room_type) ? array($room_type) : false ) ;
return isset( $room_type ) ? reset($types) : $types ;
}
| 添付 | サイズ |
|---|---|
| custom_table_2.zip (1.67 KB) | 1.67 KB |
function entity_room_entity_info()
{
$return = array(
'room' => array(
'label' => t('Room'),
'entity class' => 'RoomEntity',
'label callback' => 'entity_class_label', // see RoomEntity class
'uri callback' => 'entity_class_uri', // see RoomEntity class
'controller class' => 'RoomController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'bundle' => 'room_type_sys',
),
'bundle keys' => array(
'bundle' => 'room_type_sys',
),
'bundles' => array(),
'load hook' => 'room_load',
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'module' => 'entity_room',
'access callback' => 'entity_room_access',
),
);
$return['room_type'] = array(
'label' => t('Room Type'),
'entity class' => 'RoomTypeEntity',
'controller class' => 'RoomTypeController',
'base table' => 'room_type',
'fieldable' => FALSE,
'bundle of' => 'room',
'exportable' => TRUE,
'entity keys' => array(
'id' => 'rtid',
'name' => 'room_type_sys',
'label' => 'room_type_label',
),
'module' => 'entity_room',
'admin ui' => array( // Enable the entity API's admin UI.
'path' => 'admin/structure/room-types',
'file' => 'room_type.admin.inc',
'controller class' => 'RoomTypeUIController',
),
'access callback' => 'entity_room_access',
);
return $return;
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (5.08 KB) | 5.08 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* 追加されたバンドル(RoomType)に拡張フィールド操作URIの追加
* Implements hook_entity_info_alter().
*/
function entity_room_entity_info_alter(&$entity_info)
{
foreach (room_types() as $type => $info) {
$entity_info['room']['bundles'][$type] = array(
'label' => $info->room_type_label,
'admin' => array(
'path' => 'admin/structure/room-types/manage/%room_type',
'real path' => 'admin/structure/room-types/manage/' . $type,
'bundle argument' => 4,
),
);
}
}
// room_type_sys でデータの取得
// room_type入力がなければ、全部のRoomTypeを返す
function room_type_load($room_type=null){
return room_types( $room_type ) ;
}
function room_types( $room_type = null ){
$types = entity_load_multiple_by_name( 'room_type', isset($room_type) ? array($room_type) : false ) ;
return isset( $room_type ) ? reset($types) : $types ;
}
| 添付 | サイズ |
|---|---|
| custom_table_2.zip (1.67 KB) | 1.67 KB |
function entity_room_entity_info()
{
$return = array(
'room' => array(
'label' => t('Room'),
'entity class' => 'RoomEntity',
'label callback' => 'entity_class_label', // see RoomEntity class
'uri callback' => 'entity_class_uri', // see RoomEntity class
'controller class' => 'RoomController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'bundle' => 'room_type_sys',
),
'bundle keys' => array(
'bundle' => 'room_type_sys',
),
'bundles' => array(),
'load hook' => 'room_load',
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'module' => 'entity_room',
'access callback' => 'entity_room_access',
),
);
$return['room_type'] = array(
'label' => t('Room Type'),
'entity class' => 'RoomTypeEntity',
'controller class' => 'RoomTypeController',
'base table' => 'room_type',
'fieldable' => FALSE,
'bundle of' => 'room',
'exportable' => TRUE,
'entity keys' => array(
'id' => 'rtid',
'name' => 'room_type_sys',
'label' => 'room_type_label',
),
'module' => 'entity_room',
'admin ui' => array( // Enable the entity API's admin UI.
'path' => 'admin/structure/room-types',
'file' => 'room_type.admin.inc',
'controller class' => 'RoomTypeUIController',
),
'access callback' => 'entity_room_access',
);
return $return;
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (5.08 KB) | 5.08 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* 追加されたバンドル(RoomType)に拡張フィールド操作URIの追加
* Implements hook_entity_info_alter().
*/
function entity_room_entity_info_alter(&$entity_info)
{
foreach (room_types() as $type => $info) {
$entity_info['room']['bundles'][$type] = array(
'label' => $info->room_type_label,
'admin' => array(
'path' => 'admin/structure/room-types/manage/%room_type',
'real path' => 'admin/structure/room-types/manage/' . $type,
'bundle argument' => 4,
),
);
}
}
// room_type_sys でデータの取得
// room_type入力がなければ、全部のRoomTypeを返す
function room_type_load($room_type=null){
return room_types( $room_type ) ;
}
function room_types( $room_type = null ){
$types = entity_load_multiple_by_name( 'room_type', isset($room_type) ? array($room_type) : false ) ;
return isset( $room_type ) ? reset($types) : $types ;
}
| 添付 | サイズ |
|---|---|
| custom_table_2.zip (1.67 KB) | 1.67 KB |
function entity_room_entity_info()
{
$return = array(
'room' => array(
'label' => t('Room'),
'entity class' => 'RoomEntity',
'label callback' => 'entity_class_label', // see RoomEntity class
'uri callback' => 'entity_class_uri', // see RoomEntity class
'controller class' => 'RoomController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'bundle' => 'room_type_sys',
),
'bundle keys' => array(
'bundle' => 'room_type_sys',
),
'bundles' => array(),
'load hook' => 'room_load',
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'module' => 'entity_room',
'access callback' => 'entity_room_access',
),
);
$return['room_type'] = array(
'label' => t('Room Type'),
'entity class' => 'RoomTypeEntity',
'controller class' => 'RoomTypeController',
'base table' => 'room_type',
'fieldable' => FALSE,
'bundle of' => 'room',
'exportable' => TRUE,
'entity keys' => array(
'id' => 'rtid',
'name' => 'room_type_sys',
'label' => 'room_type_label',
),
'module' => 'entity_room',
'admin ui' => array( // Enable the entity API's admin UI.
'path' => 'admin/structure/room-types',
'file' => 'room_type.admin.inc',
'controller class' => 'RoomTypeUIController',
),
'access callback' => 'entity_room_access',
);
return $return;
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (5.08 KB) | 5.08 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* 追加されたバンドル(RoomType)に拡張フィールド操作URIの追加
* Implements hook_entity_info_alter().
*/
function entity_room_entity_info_alter(&$entity_info)
{
foreach (room_types() as $type => $info) {
$entity_info['room']['bundles'][$type] = array(
'label' => $info->room_type_label,
'admin' => array(
'path' => 'admin/structure/room-types/manage/%room_type',
'real path' => 'admin/structure/room-types/manage/' . $type,
'bundle argument' => 4,
),
);
}
}
// room_type_sys でデータの取得
// room_type入力がなければ、全部のRoomTypeを返す
function room_type_load($room_type=null){
return room_types( $room_type ) ;
}
function room_types( $room_type = null ){
$types = entity_load_multiple_by_name( 'room_type', isset($room_type) ? array($room_type) : false ) ;
return isset( $room_type ) ? reset($types) : $types ;
}
| 添付 | サイズ |
|---|---|
| custom_table_2.zip (1.67 KB) | 1.67 KB |
function entity_room_entity_info()
{
$return = array(
'room' => array(
'label' => t('Room'),
'entity class' => 'RoomEntity',
'label callback' => 'entity_class_label', // see RoomEntity class
'uri callback' => 'entity_class_uri', // see RoomEntity class
'controller class' => 'RoomController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'bundle' => 'room_type_sys',
),
'bundle keys' => array(
'bundle' => 'room_type_sys',
),
'bundles' => array(),
'load hook' => 'room_load',
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'module' => 'entity_room',
'access callback' => 'entity_room_access',
),
);
$return['room_type'] = array(
'label' => t('Room Type'),
'entity class' => 'RoomTypeEntity',
'controller class' => 'RoomTypeController',
'base table' => 'room_type',
'fieldable' => FALSE,
'bundle of' => 'room',
'exportable' => TRUE,
'entity keys' => array(
'id' => 'rtid',
'name' => 'room_type_sys',
'label' => 'room_type_label',
),
'module' => 'entity_room',
'admin ui' => array( // Enable the entity API's admin UI.
'path' => 'admin/structure/room-types',
'file' => 'room_type.admin.inc',
'controller class' => 'RoomTypeUIController',
),
'access callback' => 'entity_room_access',
);
return $return;
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (5.08 KB) | 5.08 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* 追加されたバンドル(RoomType)に拡張フィールド操作URIの追加
* Implements hook_entity_info_alter().
*/
function entity_room_entity_info_alter(&$entity_info)
{
foreach (room_types() as $type => $info) {
$entity_info['room']['bundles'][$type] = array(
'label' => $info->room_type_label,
'admin' => array(
'path' => 'admin/structure/room-types/manage/%room_type',
'real path' => 'admin/structure/room-types/manage/' . $type,
'bundle argument' => 4,
),
);
}
}
// room_type_sys でデータの取得
// room_type入力がなければ、全部のRoomTypeを返す
function room_type_load($room_type=null){
return room_types( $room_type ) ;
}
function room_types( $room_type = null ){
$types = entity_load_multiple_by_name( 'room_type', isset($room_type) ? array($room_type) : false ) ;
return isset( $room_type ) ? reset($types) : $types ;
}
| 添付 | サイズ |
|---|---|
| custom_table_2.zip (1.67 KB) | 1.67 KB |
function entity_room_entity_info()
{
$return = array(
'room' => array(
'label' => t('Room'),
'entity class' => 'RoomEntity',
'label callback' => 'entity_class_label', // see RoomEntity class
'uri callback' => 'entity_class_uri', // see RoomEntity class
'controller class' => 'RoomController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'bundle' => 'room_type_sys',
),
'bundle keys' => array(
'bundle' => 'room_type_sys',
),
'bundles' => array(),
'load hook' => 'room_load',
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'module' => 'entity_room',
'access callback' => 'entity_room_access',
),
);
$return['room_type'] = array(
'label' => t('Room Type'),
'entity class' => 'RoomTypeEntity',
'controller class' => 'RoomTypeController',
'base table' => 'room_type',
'fieldable' => FALSE,
'bundle of' => 'room',
'exportable' => TRUE,
'entity keys' => array(
'id' => 'rtid',
'name' => 'room_type_sys',
'label' => 'room_type_label',
),
'module' => 'entity_room',
'admin ui' => array( // Enable the entity API's admin UI.
'path' => 'admin/structure/room-types',
'file' => 'room_type.admin.inc',
'controller class' => 'RoomTypeUIController',
),
'access callback' => 'entity_room_access',
);
return $return;
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (5.08 KB) | 5.08 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* 追加されたバンドル(RoomType)に拡張フィールド操作URIの追加
* Implements hook_entity_info_alter().
*/
function entity_room_entity_info_alter(&$entity_info)
{
foreach (room_types() as $type => $info) {
$entity_info['room']['bundles'][$type] = array(
'label' => $info->room_type_label,
'admin' => array(
'path' => 'admin/structure/room-types/manage/%room_type',
'real path' => 'admin/structure/room-types/manage/' . $type,
'bundle argument' => 4,
),
);
}
}
// room_type_sys でデータの取得
// room_type入力がなければ、全部のRoomTypeを返す
function room_type_load($room_type=null){
return room_types( $room_type ) ;
}
function room_types( $room_type = null ){
$types = entity_load_multiple_by_name( 'room_type', isset($room_type) ? array($room_type) : false ) ;
return isset( $room_type ) ? reset($types) : $types ;
}
| 添付 | サイズ |
|---|---|
| custom_table_2.zip (1.67 KB) | 1.67 KB |
function entity_room_entity_info()
{
$return = array(
'room' => array(
'label' => t('Room'),
'entity class' => 'RoomEntity',
'label callback' => 'entity_class_label', // see RoomEntity class
'uri callback' => 'entity_class_uri', // see RoomEntity class
'controller class' => 'RoomController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'bundle' => 'room_type_sys',
),
'bundle keys' => array(
'bundle' => 'room_type_sys',
),
'bundles' => array(),
'load hook' => 'room_load',
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'module' => 'entity_room',
'access callback' => 'entity_room_access',
),
);
$return['room_type'] = array(
'label' => t('Room Type'),
'entity class' => 'RoomTypeEntity',
'controller class' => 'RoomTypeController',
'base table' => 'room_type',
'fieldable' => FALSE,
'bundle of' => 'room',
'exportable' => TRUE,
'entity keys' => array(
'id' => 'rtid',
'name' => 'room_type_sys',
'label' => 'room_type_label',
),
'module' => 'entity_room',
'admin ui' => array( // Enable the entity API's admin UI.
'path' => 'admin/structure/room-types',
'file' => 'room_type.admin.inc',
'controller class' => 'RoomTypeUIController',
),
'access callback' => 'entity_room_access',
);
return $return;
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (5.08 KB) | 5.08 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* 追加されたバンドル(RoomType)に拡張フィールド操作URIの追加
* Implements hook_entity_info_alter().
*/
function entity_room_entity_info_alter(&$entity_info)
{
foreach (room_types() as $type => $info) {
$entity_info['room']['bundles'][$type] = array(
'label' => $info->room_type_label,
'admin' => array(
'path' => 'admin/structure/room-types/manage/%room_type',
'real path' => 'admin/structure/room-types/manage/' . $type,
'bundle argument' => 4,
),
);
}
}
// room_type_sys でデータの取得
// room_type入力がなければ、全部のRoomTypeを返す
function room_type_load($room_type=null){
return room_types( $room_type ) ;
}
function room_types( $room_type = null ){
$types = entity_load_multiple_by_name( 'room_type', isset($room_type) ? array($room_type) : false ) ;
return isset( $room_type ) ? reset($types) : $types ;
}
| 添付 | サイズ |
|---|---|
| custom_table_2.zip (1.67 KB) | 1.67 KB |
function entity_room_entity_info()
{
$return = array(
'room' => array(
'label' => t('Room'),
'entity class' => 'RoomEntity',
'label callback' => 'entity_class_label', // see RoomEntity class
'uri callback' => 'entity_class_uri', // see RoomEntity class
'controller class' => 'RoomController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'bundle' => 'room_type_sys',
),
'bundle keys' => array(
'bundle' => 'room_type_sys',
),
'bundles' => array(),
'load hook' => 'room_load',
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'module' => 'entity_room',
'access callback' => 'entity_room_access',
),
);
$return['room_type'] = array(
'label' => t('Room Type'),
'entity class' => 'RoomTypeEntity',
'controller class' => 'RoomTypeController',
'base table' => 'room_type',
'fieldable' => FALSE,
'bundle of' => 'room',
'exportable' => TRUE,
'entity keys' => array(
'id' => 'rtid',
'name' => 'room_type_sys',
'label' => 'room_type_label',
),
'module' => 'entity_room',
'admin ui' => array( // Enable the entity API's admin UI.
'path' => 'admin/structure/room-types',
'file' => 'room_type.admin.inc',
'controller class' => 'RoomTypeUIController',
),
'access callback' => 'entity_room_access',
);
return $return;
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (5.08 KB) | 5.08 KB |
/**
* Implements hook_entity_info().
*/
function entity_room_entity_info()
{
$room_info['room'] = array(
'label' => t('Room'),
'entity class' => 'Entity',
'controller class' => 'DrupalDefaultEntityController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'label' => 'room_number',
'bundle' => 'room_type', // DB上にroom_typeフィールドでバンドルを区別
),
'bundles' => array(
'single_room'=> array(
'label' => 'Single Room',
'admin' => array(
'path' => 'admin/structure/single-room/manage',
),
),
'twin_room'=> array(
'label' => 'Twin Room',
'admin' => array(
'path' => 'admin/structure/twin-room/manage',
),
),
),
'access callback' => 'access_room',
'module' => 'entity_room',
);
return $room_info;
}
/**
* Implements hook_field_extra_fields().
* Field管理にRoomのプロパティ項目を追加(編集不可)
*/
function entity_room_field_extra_fields()
{
$return = array();
// For Single Room Bundle
$return['room']['single_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
// For Twin Room Bundle
$return['room']['twin_room'] = array(
'form' => array(
'room_type' => array(
'label' => t('Room Type'),
'description' => t('The type of the room'),
'weight' => 1,
),
'room_number' => array(
'label' => t('Room Number'),
'description' => t('The number of the room'),
'weight' => 2,
),
),
);
return $return;
}
/**
* Implements hook_menu().
*/
function entity_room_menu()
{
// シングル ルーム 管理画面
$items['admin/structure/single-room/manage'] = array(
'title' => t('Single Room Admin'),
'description' => 'Manage Single Room structure',
'page callback' => 'room_info',
'page arguments' => array('Single Room') ,
'access arguments' => array('administer rooms'),
);
$items['single-room/add'] = array(
'title' => t('Add Single Room'),
'page callback' => 'room_add',
'page arguments' => array('single_room'),
'access arguments' => array('create room'),
);
// ツインルーム管理が画面
$items['admin/structure/twin-room/manage'] = array(
'title' => 'Twin Room Admin',
'description' => 'Manage Twin Room structure',
'page callback' => 'room_info' ,
'page arguments' => array('Twin Room'),
'access arguments' => array('administer rooms'),
);
$items['twin-room/add'] = array(
'title' => t('Add Twin Room'),
'page callback' => 'room_add',
'page arguments' => array('twin_room'),
'access arguments' => array('create room'),
);
// Roomの表示
$items['room/%room'] = array(
'title callback' => 'room_page_title',
'title arguments' => array(1),
'page callback' => 'room_page_view',
'page arguments' => array(1),
'access arguments' => array('view rooms'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Implements hook_permission().
*/
function entity_room_permission()
{
return array(
'administer rooms' => array(
'title' => t('Administer rooms'),
'restrict access' => TRUE,
),
'create room' => array(
'title' => t('Create room'),
),
'view rooms' => array(
'title' => t('View Rooms'),
)
);
}
/**
* 全員にRoomエンティティの無条件アクセス権限
*/
function access_room(){
return true ;
}
/**
* create "add room" form
*/
function room_add($type) {
$room = (object) array (
'rid' => '',
'room_type' => $type,
'room_number' => '',
);
return drupal_get_form('room_add_form', $room);
}
function room_add_form($form, &$form_state, $room) {
$form['room_type'] = array(
'#type' => 'textfield',
'#title' => t('Room Type'),
'#default_value' => $room->room_type,
'#disabled' => true,
'#required' => TRUE,
);
$form['room_number'] = array(
'#type' => 'textfield',
'#title' => t('Room Number'),
'#required' => TRUE,
);
field_attach_form('room', $room, $form, $form_state);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Save'),
'#weight' => 10,
);
return $form;
}
function room_add_form_validate($form, &$form_state) {
$room_submisttion = (object) $form_state['values'];
field_attach_form_validate($form_state['values']['room_type'], $room_submisttion, $form, $form_state);
}
function room_add_form_submit($form, &$form_state) {
$room_submission = (object) $form_state['values'];
field_attach_submit($form_state['values']['room_type'], $room_submission, $form, $form_state);
$room = room_save($room_submission);
$form_state['redirect'] = "room/$room->rid";
}
function room_save(&$room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
function room_info($type) {
return t('Welcome to the administration page for your '.$type.'!');
}
function room_page_title($room){
return $room->room_number."(".$room->room_type.")";
}
function room_page_view($room, $view_mode = 'full'){
$room->content = array();
// Build fields content.
field_attach_prepare_view('room', array($room->rid => $room), $view_mode);
entity_prepare_view('room', array($room->rid => $room));
$room->content += field_attach_view('room', $room, $view_mode);
return $room->content;
}
function room_uri( $room ){
return array(
'path' => 'room/'.$room->rid ,
);
}
class RoomController extends EntityAPIController{
//class RoomController extends DrupalDefaultEntityController{
public function __construct($entityType) {
parent::__construct($entityType);
}
// Entityオブジェクト保存
public function save($room) {
drupal_write_record('room', $room);
field_attach_insert('room', $room);
return $room;
}
}
/**
* hook_menuのURL引数のオブジェクト取得
*/
function room_load($rid = NULL, $reset = FALSE){
$rids = (isset ($rid) ? array($rid) : array());
$room = room_load_multiple($rids, $reset);
return $room ? reset ($room) : FALSE;
}
function room_load_multiple($rids = array(), $conditions = array(), $reset = FALSE){
return entity_load('room', $rids, $conditions, $reset);
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (2.84 KB) | 2.84 KB |
/**
* 追加されたバンドル(RoomType)に拡張フィールド操作URIの追加
* Implements hook_entity_info_alter().
*/
function entity_room_entity_info_alter(&$entity_info)
{
foreach (room_types() as $type => $info) {
$entity_info['room']['bundles'][$type] = array(
'label' => $info->room_type_label,
'admin' => array(
'path' => 'admin/structure/room-types/manage/%room_type',
'real path' => 'admin/structure/room-types/manage/' . $type,
'bundle argument' => 4,
),
);
}
}
// room_type_sys でデータの取得
// room_type入力がなければ、全部のRoomTypeを返す
function room_type_load($room_type=null){
return room_types( $room_type ) ;
}
function room_types( $room_type = null ){
$types = entity_load_multiple_by_name( 'room_type', isset($room_type) ? array($room_type) : false ) ;
return isset( $room_type ) ? reset($types) : $types ;
}
| 添付 | サイズ |
|---|---|
| custom_table_2.zip (1.67 KB) | 1.67 KB |
function entity_room_entity_info()
{
$return = array(
'room' => array(
'label' => t('Room'),
'entity class' => 'RoomEntity',
'label callback' => 'entity_class_label', // see RoomEntity class
'uri callback' => 'entity_class_uri', // see RoomEntity class
'controller class' => 'RoomController',
'base table' => 'room',
'fieldable' => TRUE,
'entity keys' => array(
'id' => 'rid',
'bundle' => 'room_type_sys',
),
'bundle keys' => array(
'bundle' => 'room_type_sys',
),
'bundles' => array(),
'load hook' => 'room_load',
'view modes' => array(
'full' => array(
'label' => t('Default'),
'custom settings' => FALSE,
),
),
'module' => 'entity_room',
'access callback' => 'entity_room_access',
),
);
$return['room_type'] = array(
'label' => t('Room Type'),
'entity class' => 'RoomTypeEntity',
'controller class' => 'RoomTypeController',
'base table' => 'room_type',
'fieldable' => FALSE,
'bundle of' => 'room',
'exportable' => TRUE,
'entity keys' => array(
'id' => 'rtid',
'name' => 'room_type_sys',
'label' => 'room_type_label',
),
'module' => 'entity_room',
'admin ui' => array( // Enable the entity API's admin UI.
'path' => 'admin/structure/room-types',
'file' => 'room_type.admin.inc',
'controller class' => 'RoomTypeUIController',
),
'access callback' => 'entity_room_access',
);
return $return;
}
| 添付 | サイズ |
|---|---|
| entity_room.zip (5.08 KB) | 5.08 KB |