Отображение значения сущности в профиле

Главные вкладки

Аватар пользователя menelai menelai 29 мая 2013 в 17:38

Здравствуйте!

Создал некую сущность:


<?php
// $Id$

/**
 * file
 * Examples Entity API.
 */

/**
 * Implements hook_permission().
 */

function entity_example_permission() {
  return array(
    
'administer example entity' =>  array(
      
'title' => t('Administer example entity'),
      
'restrict access' => TRUE,
    ),
  );
}

/**
 * Implements hook_menu().
 */
function entity_example_menu() {
  
$items['entity_example/%entity_example'] = array(
    
'title' => 'Example entity',
    
'title callback' => 'entity_example_page_title',
    
'title arguments' => array(1),
    
'page callback' => 'entity_example_page',
    
'page arguments' => array(1),
    
'access arguments' => array('access content'),
    
'type' => MENU_CALLBACK,
  );
  
$items['entity_example/%entity_example/view'] = array(
    
'title' => 'View',
    
'type' => MENU_DEFAULT_LOCAL_TASK,
  );
  
$items['entity_example/%entity_example/edit'] = array(
    
'title' => 'Edit',
    
'page callback' => 'drupal_get_form',
    
'page arguments' => array('entity_example_form_edit'1),
    
'access arguments' => array('administer example entity'),
    
'type' => MENU_LOCAL_TASK,
    
'weight' => 10,
  );

  

$items['admin/structure/entity_example'] = array(
    
'title' => 'Example entities',
    
'description' => 'Manage example entities on your site.',
    
'access arguments' => array('administer example entity'),
    
'page callback' => 'entity_example_page_admin',
    
'page arguments' => array('list'),
    
'weight' => -10,
  );

  

$items['admin/structure/entity_example/list'] = array(
    
'title' => 'List',
    
'type' => MENU_DEFAULT_LOCAL_TASK,
    
'weight' => -10,
  );

  

$items['admin/structure/entity_example/create'] = array(
    
'title' => 'Add example entity',
    
'page arguments' => array('create'),
    
'access arguments' => array('administer example entity'),
    
'type' => MENU_LOCAL_ACTION,
  );

  return 

$items;
}

/**
 * Implements hook_entity_info().
 */
function entity_example_entity_info() {
  
$return = array(
    
'entity_example' => array(
      
'label' => t('Example entity'),
      
'base table' => 'example_entity',
      
'uri callback' => 'entity_example_uri',
      
'label callback' => 'entity_example_page_title',
      
'fieldable' => TRUE,
      
'entity keys' => array(
        
'id' => 'eeid',
      ),
      
'bundles' => array(
        
'entity_example' => array(
          
'label' => t('Example entity'),
          
'admin' => array(
            
'path' => 'admin/structure/entity_example',
            
'access arguments' => array('administer example entity'),
          ),
        ),
      ),
    ),
  );
  return 
$return;
}

/**
 * Entity uri callback.
 */
function entity_example_uri($entity_example) {
  return array(
    
'path' => 'entity_example/' $entity_example->eeid,
  );
}

/**
 * Implements hook_admin_paths().
 */
function entity_example_admin_paths() {
  
$paths = array(
    
'entity_example/*/edit' => TRUE,
  );
  return 
$paths;
}

function 

entity_example_load($eeid$reset FALSE) {
  
$entity_examples entity_example_load_multiple(array($eeid), array(), $reset);
  return 
reset($entity_examples);
}

function 

entity_example_load_multiple($eeids = array(), $conditions = array(), $reset FALSE) {
  return 
entity_load('entity_example'$eeids$conditions$reset);
}

function 

entity_example_page_title($entity_example) {
  return 
check_plain($entity_example->title)."!";
}

function 

entity_example_page($entity_example) {
  
// The module provides only one view mode.
  
$view_mode 'default';

  

// Remove previously built content, if exists.
  
$entity_example->content = array();

  

// Build fields content.
  
field_attach_prepare_view('entity_example', array($entity_example->eeid => $entity_example), $view_mode);
  
entity_prepare_view('entity_example', array($entity_example->eeid => $entity_example));

  

$build field_attach_view('entity_example'$entity_example$view_mode);
  return 
$build;
}

/**
 * Implements hook_field_extra_fields().
 */
function entity_example_field_extra_fields() {
  
$return = array();
  
$return['entity_example']['entity_example'] = array(
    
'form' => array(
      
'title' => array(
        
'label' => t('Title'),
        
'description' => t('Example entity module title form element'),
        
'weight' => -10,
      ),
      
'perm' => array(
        
'label' => t('Permanent mark'),
        
'weight' => -9,
      ),
      
'dstart' => array(
        
'label' => t('Start date'),
        
'weight' => -8,
      ),
      
'dend' => array(
        
'label' => t('End date'),
        
'weight' => -7,
      ),
      
'weight' => array(
        
'label' => t('Weight'),
        
'weight' => -6,
      ),
    ),
  );

  return 

$return;
}

function 

entity_example_save(&$edit) {
  
field_attach_presave('entity_example'$edit);
  if (!empty(
$edit->eeid)) {
      
drupal_write_record('example_entity'$edit'eeid');
    
field_attach_update('entity_example'$edit);
    
module_invoke_all('entity_update''entity_example'$edit);
      return 
$edit;
  }
  
drupal_write_record('example_entity'$edit);
    
field_attach_insert('entity_example'$edit);
    
module_invoke_all('entity_insert''entity_example'$edit);
  return 
$edit;
}

function 

entity_example_page_admin($tab '') {
  switch (
$tab) {
    case 
'create':
      
$build['entity_example_create'] = drupal_get_form('entity_example_form_edit');
      break;
    default:
      
$build['entity_example_list'] = drupal_get_form('entity_example_form_list');
  }
  return 
$build;
}

function 

entity_example_form_list() {
  
$header = array(
    
'title' => array('data' => t('Title'), 'field' => 'ee.title'),
    
'dstart' => array('data' => t('Start'), 'field' => 'dstart''sort' => 'asc'),
    
'dend' => array('data' => t('End'), 'field' => 'dend'),
    
'weight' => t('Weight'),
    
'perm' => array('data' => t('Permanent'), 'field' => 'ee.perm'),
    
'operations' => array('data' => t('Operations')),
  );
  
$query db_select('example_entity''ee');
  
$count_query = clone $query;
  
$count_query->addExpression('COUNT(ee.eeid)');

  

$query $query->extend('PagerDefault')->extend('TableSort');
  
$query
    
->fields('ee', array('eeid''title''dstart''dend''perm''weight'))
    ->
limit(20)
    ->
orderByHeader($header)
    ->
setCountQuery($count_query);
  
$result $query->execute();

  

$destination drupal_get_destination();

  

$options = array();
  foreach (
$result as $row) {
    
$options[$row->eeid] = array(
      
'title' => array('data' => array(
        
'#type' => 'link',
        
'#title' => $row->title,
        
'#href' => "entity_example/$row->eeid",
      )),
      
'dstart' => $row->dstart,
      
'dend' => $row->dend,
      
'perm' =>  array('data' => ($row->perm t('Yes') : t('No')), 'align' => 'center'),
      
'weight' => $row->weight,
      
'operations' => array('data' => array(
        
'#type' => 'link',
        
'#title' => t('edit'),
        
'#href' => "entity_example/$row->eeid/edit",
        
'#options' => array('query' => $destination),
      )),
    );
  }

  

$form['entity_examples'] = array(
    
'#type' => 'tableselect',
    
'#header' => $header,
    
'#options' => $options,
    
'#empty' => t('No entities available.'),
  );
  
$form['pager']['#markup'] = theme('pager');

  return 

$form;
}

function 

entity_example_form_edit($form, &$form_state$edit NULL) {
  if (!isset(
$edit)) {
    
$edit = (object) array(
      
'title' => '',
      
'perm' => 0,
      
'dstart' => date('Ymd'),
      
'dend' => date('Ymd'),
      
'weight' => 0,
    );
  }
  
$form['perm'] = array(
    
'#type' => 'checkbox',
    
'#title' => t('Permanent'),
    
'#default_value' => $edit->perm,
  );
  
$form['title'] = array(
    
'#type' => 'textfield',
    
'#title' => t('Title'),
    
'#default_value' => $edit->title,
    
'#required' => TRUE,
  );
  
$form['dstart'] = array(
    
'#type' => 'date',
    
'#default_value' => _entity_example_to_array($edit->dstart),
    
'#title' => t('Start date'),
  );
  
$form['dend'] = array(
    
'#type' => 'date',
    
'#default_value' => _entity_example_to_array($edit->dend),
    
'#title' => t('End date'),
  );
  
$form['weight'] = array(
    
'#type' => 'weight',
    
'#default_value' => $edit->weight,
    
'#title' => t('Weight'),
  );

  

// Attach fields from Field module.
  
field_attach_form('entity_example', (object) $edit$form$form_state);

  

// Store ID if any.
  
if (!empty($edit->eeid)) {
    
$form['eeid'] = array(
      
'#type' => 'value',
      
'#value' => $edit->eeid,
    );
  }
  
$form['actions'] = array('#type' => 'actions');
  
$form['actions']['submit'] = array(
    
'#type' => 'submit',
    
'#value' => t('Save'),
    
'#weight' => 5,
  );

  return 

$form;
}

function 

entity_example_form_edit_validate($form, &$form_state) {
  
// Check dates.
  
$dstart _entity_example_from_array($form_state['values']['dstart']);
  
$dend _entity_example_from_array($form_state['values']['dend']);
  if (
$dstart $dend) {
    
form_set_error('dend't('End date must be later than start date.'));
  }
  
// Attach validation from Field module.
  
field_attach_form_validate('entity_example', (object) $form_state['values'], $form$form_state);
}

function 

entity_example_form_edit_submit($form, &$form_state) {
  
$edit = (object) $form_state['values'];
  
// Attach submit handlers from Field module.
  
field_attach_submit('entity_example'$edit$form$form_state);
  
// Save own data.
  
$edit->dstart _entity_example_from_array($edit->dstart);
  
$edit->dend _entity_example_from_array($edit->dend);
  
entity_example_save($edit);
  
$form_state['redirect'] = "entity_example/$edit->eeid";
}

function 

_entity_example_to_array($date) {
  
$r $matches = array();
  
preg_match('/(\d{4})(\d{2})(\d{2})/'$date$matches);
  
$r['year'] = (int) $matches[1];
  
$r['month'] = (int) $matches[2];
  
$r['day'] = (int) $matches[3];
  return 
$r;
}

function 

_entity_example_from_array($array) {
  return 
$array['year'] * 10000 $array['month'] * 100 $array['day'];
}
?>

Она из примера работы с сущностями.

На неё ссылается профиль пользователя (на самом деле любая другая сущность), выбор делается в селекте. Как мне отобразить в профиле выбранное значение этой сущности?

Комментарии

Аватар пользователя menelai menelai 29 мая 2013 в 18:08

Список вузов. В профиле выбирается один из списка.
И в автоматической форме просмотра надо показать выбранный.
Конкретно, надо показать поле title