web-dev-qa-db-ja.com

「ノード作成フォーム」をブロックに追加する方法

ブロックに「ノード作成フォーム」を追加する方法を知りたかっただけ

ソースコードをコピーしてそのコードからブロックを作成すると、-publicのみから投稿できます。私が投稿しているときユーザーとしてタイムアウトと表示され、ページを更新するように指示されます。誰かが私に解決策を与えてください。

だから私はpage.tpl.phpに次のコードを追加しようとしました

$form = node_add('nodetype');
print drupal_render($form);
4
ruban

ブロックからノードを作成するオプションを提供できる2つのモジュールがあります Formblock moduleAdvanced Form Block

3

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; 

}

1
Mahipal Purohit

私は別の質問に答えてこれを投稿しました。これは、カスタムモジュールに配置するものです。あるいは、前述のように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を作成します。

0
user24737

テンプレートファイルでは、以下のコードを使用する必要があります。

if (!function_exists('node_add')) {
  module_load_include('inc', 'node', 'node.pages');
}
0