ブロックに「ノード作成フォーム」を追加する方法を知りたかっただけ
ソースコードをコピーしてそのコードからブロックを作成すると、-publicのみから投稿できます。私が投稿しているときユーザーとしてタイムアウトと表示され、ページを更新するように指示されます。誰かが私に解決策を与えてください。
だから私はpage.tpl.phpに次のコードを追加しようとしました
$form = node_add('nodetype');
print drupal_render($form);
ブロックからノードを作成するオプションを提供できる2つのモジュールがあります Formblock module 、 Advanced Form Block
function mymodulename_block_info(){
$blocks['mymodulename_node_form'] = array( 'info' => t('Post a Node'), 'cache' => DRUPAL_NO_CACHE, ); return $blocks;
}
/ ** hook_block_view()を実装します* /
関数mymodulename_block_view($ delta = ''){
switch ($delta) { case 'mymodulename_node_form': $block['content'] = drupal_get_form('mymodulename_node_form'); //$block['content'] = block_contents($delta); break; } return $block;
}
私は別の質問に答えてこれを投稿しました。これは、カスタムモジュールに配置するものです。あるいは、前述のようにAdvanced Form Blockモジュールを試すこともできます(私はまだ行っていません)。これは現在でもサポートされています。
AJAX関連の何か(500エラーなど)を使用するとき、または単にエラーなしでパネルの「ブロック」タブを開こうとするとき(たとえば、いくつかのエンティティ変換関数)、次のモジュールを試すことをお勧めします。代わりにDrupal 7にコードを記述します(ただし、目的に応じて一部のパラメーターを追加する必要がある場合もあります)。
function custom_example_block_info() {
$blocks['example_node_form'] = array(
'info' => t('What an example'),
);
return $blocks;
}
function custom_example_block_view($delta = ''){
$block = array();
switch ($delta) {
case 'example_node_form':
global $user;
//Note: 'type' is your node content type and 'language' must be included
$node = (object) array('uid' => $user->uid, 'name' => (isset($user->name) ? $user->name : ''), 'type' => 'example', 'language' => LANGUAGE_NONE);
$form_state['build_info']['args'] = array($node);
form_load_include($form_state, 'inc', 'node', 'node.pages');
$block['content'] = drupal_build_form('example_node_form', $form_state);
break;
}
return $block;
}
重要な違いは、drupal_get_formが$ form_stateを読み込めないため、フォームが処理されるたびにインクルードファイルが読み込まれるようにするために、関数form_load_include(&$ form_state、$ type、$ module、$ name = NULL)を使用することと、関数drupal_build_form($ form_id 、&$ form_state)$ form_stateを渡すためにdrupal_get_formの代わりに。上記の行は$ form_stateを作成します。
テンプレートファイルでは、以下のコードを使用する必要があります。
if (!function_exists('node_add')) {
module_load_include('inc', 'node', 'node.pages');
}