建立內容後跳轉到指定 URL

我突然在需要使用的時候發現我竟然沒有寫下:

<?php
/**
 * hook_form_alter()
 */
function hook_form_alter(&$form, &$form_state)
{
 
// callback
 
$form['actions']['submit']['#submit'][] = 'custom_checkin_redirect';
}
/**
 * callback
 */
function custom_checkin_redirect($form, &$form_state)
{
 
$form_state['redirect'] = 'check-in'; // any url works here
}
?>

Rules 沒有我想要的欄位可以 compare

Rules 原生的 node 欄位只有很少的幾個
例如 created, updated 之類的
但我想比較的是 cck 的欄位呀
一個 checkbox 有沒有選到
一個 node reference 是否為空
一個字符欄位有否包含某些字等等

其實只要先加一個 'entity has field' 的 condition
選你想要比較的欄位
再到 data compare 便會出現你需要的欄位了

又或者更直接的方法是加一個 content is type
選擇你需要的 content type, 但如此的話便必需要是單一 content type 了

話說回來,要在 rules 和 hooks 之間選擇才是真正的困難
相關討論: http://www.drupaler.co.uk/blog/rules-versus-hooks-or-abstraction-shock

Programmically add custom role filter to views 3.x

<?php
  $user_view
= views_get_view('user');
  if (!
$user_view || !$user_view->access('block')) {
    return;
  }
 
$user_view->add_item('block', 'filter', 'users_roles', 'rid',
    array(
'value' => array('type' => 'int', 'value' => 6, 'operator' => '=')));
?>

因為懶,deploy features懶,懶得使用 DB API
直接拿現成的 views 自己加

24至25小時前註冊使用者:

<?php
 
//after 24 hours
 
$user_view->add_item('block', 'filter', 'users', 'created',
    array(
'value' => array('type' => 'date', 'value' => date('U', strtotime('-24 hours'))), 'operator' => '<='));
 
//before 25 hours
 
$user_view->add_item('block', 'filter', 'users', 'created',
    array(
'value' => array('type' => 'date', 'value' => date('U', strtotime('-25 hours'))), 'operator' => '>'));

?>

Drupal7.x send HTML email

<?php
function mymodule_mail_alter(&$message) {
 
// if ($message['id'] == 'modulename_messagekey') {

 
if ($message['id'] == 'mymodule_messageKey') {
   
$message['headers']['MIME-Version'] = '1.0';
   
$message['headers']['Content-Type'] = 'text/html; charset=UTF-8; format=flowed';
  }
}
?>

費話少講

Drupal7.x javascript function after ajax - ajax invoke

初探 Drupal 中使用 ajax 之後
使想在 AJAX complete 之後執行一些自定義的 javascript

例如ajax form submit 之後 slideUp form
submit 之後需要修改某些內容

使用的是 ajax callback 的command, 加上 ajax_command_invoke
Form array:

<?php
  $form
['actions']['submit']['#ajax'] = array(
   
'callback' => 'example_callback',
   
'wrapper' => 'field-wrapper',
   
'method' => 'append',
   
'effect' => 'slide',
  );
?>

callback:

<?php
function example_callback($form, $form_state) {
 
$commands = array();
 
$commands[] = ajax_command_prepend(NULL, theme('status_messages'));
 
$commands[] = ajax_command_invoke('.field-form', 'slideUp', array(2000));
  return array(
'#type' => 'ajax', '#commands' => $commands);
}
?>

ajax_command_invoke 可以對 selector 執行一個函數
第三個參數是一個 array, 是傳給函數的參數

ref:
http://api.drupal.org/api/drupal/includes%21ajax.inc/group/ajax/7
http://api.drupal.org/api/drupal/includes%21ajax.inc/function/ajax_comma...

Pages

Google