0

コンテキスト リンク コンテンツにカスタム フォームを作成しました。「block_contents」という名前のスキーマを作成しました。ユーザーがこのリンクをクリックすると、データベースにデータが存在する場合はフォームが編集されるか、新しいエントリが作成されます...ここにスクリーンショットを添付しました。 ここに私のコード:

function custom_links_menu() {
    $menuItems = array();

    $menuItems['node/%node/block_contents'] = array(
        'title' => 'Block Content',
        'description' => 'Block Content',
        'page callback' => 'custom_links_form',
        'access arguments' => array('access content'),
        'type' => MENU_LOCAL_TASK,
        'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE
    );

    return $menuItems;
}

/*
 * implements hook_form()
 */
function custom_links_form() {
    return drupal_get_form(arg(2));
}

function block_contents($form_state) {
        $form['nid'] = array('#type' => 'hidden', '#value' => arg(1));
        $form['intro_title'] = array(
            '#type' => 'textfield',
            '#title' => 'Inro title : ',
        );
        $form['intro_image'] = array(
            '#type' => 'file',
            '#title' => t('Intro Image'),
            '#description' => t('Upload a file, allowed extensions: jpg, jpeg, png, gif'),
        );
        $form['intro_text'] = array(
            '#type' => 'textarea',
            '#title' => 'Intro Text : ',
        );
        $form['left_free_text_1'] = array(
            '#type' => 'textarea',
            '#title' => 'Left Free Text 1 : ',
        );
        $form['use_left_free_text'] = array(
            '#type' => 'checkbox',
            //'#default_value' => 1,
            '#title' => 'Use Left Free Text 1 : ',
        );

    $form['submit'] = array(
        '#type' => 'submit',
        '#value' => 'Submit',
    );
    $form['#attributes']['enctype'] = 'multipart/form-data';

    return $form;
}

/*
 * Implements hook_validate()
 */
function block_contents_validate($form, &$form_state) {
    $file = file_save_upload('intro_image', array(
        'file_validate_is_image' => array(),
        'file_validate_extensions' => array('png gif jpg jpeg'),
    ));


    if ($file) {
        if ($file = file_move($file, 'public://image/')) {
            $fileinfo = pathinfo($file->uri);
            $form_state['values']['intro_image'] = $fileinfo['basename']; //$file->filename;
        } else {
            form_set_error('intro_image', t('Failed to write the uploaded file the site\'s file folder.'));
        }
    } else {
        $form_state['values']['intro_image'] = null;
        //form_set_error('intro_image', t('No file was uploaded.'));
    }
}

/*
 * implements hook_submit()
 */
function block_contents_submit($form, &$form_state) {

        db_insert('block_contents')
        ->fields(array(
            'nid',
            'intro_title',
            'intro_image',
            'intro_text',
            'left_free_text_1',
            'use_left_free_text'
        ))
        ->values($form_state['values'])
        ->execute();
    } 

    drupal_set_message(t('Data saved !!'));
}

このフォームを編集したいのですが、編集中に画像フィールドを管理するにはどうすればよいですか? フォームの編集中にアップロードされた画像が表示されるはずです。また、このフォームを適切に編集するように提案できますか? 何か案が ?

4

1 に答える 1

0

ファイルの代わりに managed_file ウィジェットを使用できます。このようにして、_validate 関数ですべての画像処理ロジックを取り除くことができます。設定されている場合は画像への直接リンクも表示され、削除/置換できます。

フォームの編集に関しては、データをロードする必要があります。

$record = db_select('block_contents', 'bc')
->fields('bc')
->condition('nid', $nid)
->execute()
->fetch();

次に、すべてのフォーム フィールド値に対して、ロードされたデータに「#default_value」を設定できます。

于 2013-04-09T19:21:58.283 に答える