特定のコンテンツ タイプのコンテンツ作成フォームをカスタマイズする方法を教えてください。この例では、製品の CCK タイプがありますが、製品を作成するたびに、名前、価格、画像、寸法の 4 つのフィールドを使用します。
コンテンツ作成フォームをスリムにして、これらのオプションだけを表示する方法はありますか? これはContemplateが行うことですか?
特定のコンテンツ タイプのコンテンツ作成フォームをカスタマイズする方法を教えてください。この例では、製品の CCK タイプがありますが、製品を作成するたびに、名前、価格、画像、寸法の 4 つのフィールドを使用します。
コンテンツ作成フォームをスリムにして、これらのオプションだけを表示する方法はありますか? これはContemplateが行うことですか?
hook_form_alterフックを使用する必要があります。
Drupal 6 では、これを使用して、ノードの編集/追加フォームで無関係なもののほとんどを非表示にします。
function mymodule_form_alter(&$form, $form_state, $form_id) {
// hide extraneous options in the node form for nodetype nodes
if($form_id == 'nodetype_node_form') {
$form['path']['#access'] = FALSE;
$form['menu']['#access'] = FALSE;
$form['author']['#access'] = FALSE;
$form['options']['#access'] = FALSE;
$form['comment_settings']['#access'] = FALSE;
$form['revision_information']['#access'] = FALSE;
}
}
Contemplate は、ノード フォームではなく、ノード ビューのスタイルを設定するためのものです。node-nodetype.tpl.phpファイルを使用する方がはるかに優れています。
これに関する素晴らしいリソースを見つけました:
http://www.lullabot.com/articles/modifying-forms-5-and-6
Eaton や ceejayoz によってカバーされていないことの 1 つは、テーマ レイヤーのフィールドを非表示にすることです。
モジュールを作成し、form_alter と nodeapi を使用します。
以下は、モジュールが必要とするコンポーネントの基本的な考え方です。
私のproduct.installファイルには次のものがあります:
function product_install() {
db_query("CREATE TABLE {product} (
nid int(10) unsigned NOT NULL default '0',
primary key (nid),
price DECIMAL(7, 2) UNSIGNED NOT NULL DEFAULT 0.00
) TYPE=MyISAM /*!40100 DEFAULT CHARACTER SET utf8 */;"
);
}
function product_uninstall() {
db_query("DROP TABLE {product}");
}
次に、product.module ファイルには以下が含まれます。
function product_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
if($node->type != 'product') {
return;
}
switch($op) {
case 'load':
return _product_load($node);
case 'insert':
_product_insert($node);
break;
case 'delete':
_product_delete($node);
break;
case 'update':
_product_delete($node);
_product_insert($node);
break;
case 'view':
//display your product
$node->content['price'] = array(
'#value' => theme('transact_node_status', $node),
'#weight' => 5,
);
break;
}
}
function product_form_alter(&$form, $form_state, $form_id) {
if($form_id == 'product_node_form'){
$form['price'] = array(
'#type' => 'textfield',
'#title' => t('Price'),
'#default_value' => $form['#node']->price,
);
}
return $form;
}
function _product_load($node) {
$result = db_query("SELECT * FROM {product} WHERE nid = %d", $node->nid);
$arr = db_fetch_array($result);
unset($arr['nid']);
return $arr;
}
function _product_insert($node) {
db_query("INSERT INTO {product} (nid, price) VALUES(%d, %d)", $node->nid, $node->price);
}
function _product_delete($node) {
db_query("DELETE FROM {product} WHERE nid = %d", $node->nid);
}