hi!我遇到一個比較進階的問題,
就是在custom form的時候,
要用drupal_render($form['taxonomy']['3']);
taxonamy的vid是3,但我有裝Hierarchical Select。
在預設的表單是正常的,可以選主分類,會自動變出次分類,
像是這樣
點下去之後是這樣,會有次分類出來可以選
但是我自定Form之後,這是我的原始碼:
在template.php
<?php
/**
* 編排 CCK 表單的顯示方式
*
*
*/
function phptemplate_lifestyle_node_form($form) {
global $user;
$vars = array('user' => $user, 'form' => $form);
$vars['title'] = drupal_render($form['title']);
$vars['body'] = drupal_render($form['body_filter']);
//以下是有Hierarchical Select功能的taxonamy,vid是3
$vars['location'] = drupal_render($form['taxonomy']['3']);
return _phptemplate_callback('lifestyle_form', $vars);
}
?>
這是lifestyle_form.tpl.php
<?php
drupal_set_message('
' . print_r($form, true) . '
');
?>
<?php print $title; ?>
<?php print $location; ?>
是有出現下拉選單,可是第二層出不來,像這樣。
變這樣之後重新整理,會有這樣的錯誤訊息:
warning: Missing argument 1 for drupal_retrieve_form() in /Applications/MAMP/htdocs/projects/alpha.facepet.com.tw/includes/form.inc on line 179.
warning: call_user_func_array() [function.call-user-func-array]: First argumented is expected to be a valid callback, '' was given in /Applications/MAMP/htdocs/projects/alpha.facepet.com.tw/includes/form.inc on line 218.
warning: uasort() [function.uasort]: The argument should be an array in /Applications/MAMP/htdocs/projects/alpha.facepet.com.tw/includes/common.inc on line 2145.
真難過耶!不知道是什麼問題。
Re:
試試加上
drupal_render($form['id']);
drupal_render($form['token']);
然後 drupal_render 集中到 lifestyle_form.tpl.php 裡會比較好
Re: 自定表單Hierarchical Select的用法疑問
hi, 感謝!
我試過了, 還是一樣耶!
drupal_render集中到lifestyle_form.tpl.php嗎?
好~
請問,
print_r($form)之後的
[#submit] => Array
(
[node_form_submit] => Array
(
)
[_hierarchical_select_submit] => Array
(
[0] =>
)
)
這邊的井號#是什麼意思呢?
目前原始碼改成
<?php
//drupal_set_message('
');
drupal_set_title('提供資料');
?>
<?php print drupal_render($form['title']); ?>
<?php print drupal_render($form['taxonomy']['3']); //location ?>
<?php print drupal_render($form['taxonomy']['4']); //type ?>
<?php print drupal_render($form['body_filter']); ?>
<?php print drupal_render($form['id']); ?>
<?php print drupal_render($form['token']); ?>
<?php print drupal_render($form['submit']); ?>
還是會有一樣問題, 第二層下拉選單不會自己出來 >"<
Re: 自定表單Hierarchical Select的用法疑問
可以了!!謝謝hom的提示!!(真的太感謝, 這邊真棒)
總之, 應該是有些hidden的input沒弄出來, 所以沒用, 現在可以了, 我搞成這樣:
(1)drupal_render都放在tpl.php檔
(2)把hidden的input找出(用print_r)
template.php
<?php
function phptemplate_lifestyle_node_form($form) {
global $user;
$vars = array('user' => $user, 'form' => $form);
return _phptemplate_callback('lifestyle_form', $vars);
}
?>
lifestyle_form.tpl.php
<?php
//drupal_set_message('
');
drupal_set_title('提供資料');
?>
<?php print drupal_render($form['title']); ?>
<?php print drupal_render($form['taxonomy']['3']); //location ?>
<?php print drupal_render($form['taxonomy']['4']); //type ?>
<?php print drupal_render($form['hs_form_build_id']); ?>
<?php print drupal_render($form['form_token']); ?>
<?php print drupal_render($form['form_id']); ?>
<?php print drupal_render($form['body_filter']['body']); ?>
<?php print drupal_render($form['log']); ?>
<?php print drupal_render($form['options']['status']); ?>
<?php print drupal_render($form['options']['promote']); ?>
<?php print drupal_render($form['options']['sticky']); ?>
<?php print drupal_render($form['options']['revision']); ?>
<?php print drupal_render($form['mid']); ?>
<?php print drupal_render($form['type']); ?>
<?php print drupal_render($form['preview']); ?>
<?php print drupal_render($form['submit']); ?>
Re: 自訂表單Hierarchical Select的用法
(2) 把hidden的input找出(用print_r)
如果只是想要把剩下的表單元素輸出
在最後加上 <?php print drupal_render($form); ?> 就會把還沒 render 的元素全部輸出了
Re: 自訂表單Hierarchical Select的用法
原來如此!感謝!
不過因為有些東西不想顯示,似乎可以用像這邊教的方式隱藏,可是感覺有點麻煩,而且要把function寫在tpl.php,讓我覺得好可怕!
所以我還是手動一個一個找出hidden的input了。
但我之後想更詳細調整input的項目的話,似乎就真的要在tpl.php裡面寫function,
這部分我還要再研究看看!目前真的很不熟悉。
Re:
不想顯示 的就先用 drupal_render 跑過
但不要 print 出來
<?php drupal_render($form['xxx']); //不輸出到畫面 ?>
<?php print drupal_render($form); //不包含 $form['xxx'] ?>
或是
<?php $hide = drupal_render($form['xxx']); //不輸出到畫面 隨便丟入一個代表不需要的變數 之後需要修改的時候找起來比較方便 ?>
<?php print drupal_render($form); //不包含 $form['xxx'] ?>
要採用哪一種作法
就要看需要 顯示/隱藏 的表單元素的比例
Re: 自訂表單Hierarchical Select的用法
又上了一課
<?php //把種類拉到最上面 ?>
<?php print drupal_render($form['taxonomy']['4']); //type ?>
<?php print drupal_render($form['taxonomy']['3']); //location ?>
<?php //不要這些 ?>
<?php drupal_render($form['taxonomy']); //分類的外框,很醜 ?>
<?php drupal_render($form['body_filter']['format']); //內文說明,不要 ?>
<?php //剩下的表單依照權重排列 ?>
<?php print drupal_render($form); ?>
Re: 自訂表單Hierarchical Select的用法
給個建議:
如果你沒有把 PHP 跟 HTML 碼混在一起的話,其實只要前後加上 <?php ?> 就可以了,並不需要每行都加。