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 回答