2012-03-19 3 views
0

Я ищу для создания выражения Math в представлении в Drupal 7 с использованием текущей даты в качестве переменной. Я не нашел простой токен или способ ссылки на текущую дату в математическом выражении в представлениях.Текущий токен в Drupal View

Кто-нибудь знает об эффективном способе этого?

ответ

0

Я просто искал это. Это то, что я просто бросил вместе.

<?php 
/** 
* Implements hook_views_api() 
*/ 
function mymodule_views_api() { 
    return array("version" => "3.0"); 
} 

/** 
* Implements hook_views_data_alter() 
*/ 
function mymodule_views_data_alter(&$data) { 
    $data['views']['nothing_token'] = array(
    'title' => t('Custom text with token replacement'), 
    'help' => t('Provide custom text or link with token replacement.'), 
    'field' => array(
     'handler' => 'views_handler_field_custom_token', 
    ), 
); 
} 

class views_handler_field_custom_token extends views_handler_field_custom { 
    function query() { 
    // do nothing -- to override the parent query. 
    } 

    function render($values) { 
    global $user; 

    $data = array(
     'user' => $user, 
     'view' => $this->view, 
    ); 
    // Return the text, so the code never thinks the value is empty. 
    return token_replace($this->options['alter']['text'], $data); 
    } 
} 

Тогда на ваш взгляд, нужно добавить «Global: произвольный текст с символической замены» поля и использовать [текущую дату-: необработанный] в текстовом поле. Затем вы можете добавить математическое выражение, используя это поле. Возможно, вы сможете расширить класс views_handler_field_math, чтобы сделать то же самое, но не пробовали.

0

Мне нравится подход Джонатана к разрешению токенов в пользовательских текстовых полях. Не работает для меня, хотя функция render() не является тем, что выводило значение для меня. Вместо этого мне пришлось использовать функцию render_text. Это работало для меня в классе. Это немного менее разрушительно для поведения основных взглядов.

class views_handler_field_custom_token extends views_handler_field_custom { 
    function render($values) { 
    global $user; 

    $data = array(
     'user' => $user, 
     'view' => $this->view, 
    ); 
    // Return the text, so the code never thinks the value is empty. 
    return token_replace(parent::render($values), $data); 
    } 

    function render_text($alter) { 
    global $user; 

    $data = array(
     'user' => $user, 
     'view' => $this->view, 
    ); 

    return token_replace(parent::render_text($alter), $data); 
    } 

} 
Смежные вопросы