[РЕШЕНО] Программная обработка imagefield полей

Пт, 17/07/2009 - 18:26

Пытаюсь в form_submit сделать создание нод, в которых есть imagefield поле.

<?php
$file 
file_save_upload('photo');
$node = new stdClass;
$node->type 'photo';
$node->title $file->filename;
$node->field_photo[] = (array)$file;
$node->field_gallery[] = array('nid' => $gallery);
node_save($node);
?>

Код работает, но никакие валидаторы и обработчики imagefield не запускаются.
У меня есть 2 мысли, как эту проблему можно решить:

  1. Получить форму создания такой ноды и программно ее обработать.
  2. Найти какой-нибудь imagefield/filefield/cck api, через который можно запустить обработку загруженного файла, валидацию

По 1-му варианту не знаю как создать такую форму. Из страницы node/add/photo вытащил form_id photo_node_form, но drupal_get_form не принимает этот id.
По второму ищу, но пока ничего не нашел.

Подытожив, задействовал и п.1, и п.2.

<?php
    $node 
= new stdClass;
    
$node->type 'photo';
    
    
$tmp_form_state = array();
    
$tmp_form = array('#node' => $node);
    
    
$field content_fields('field_photo''photo');
    
module_load_include('inc''content''includes/content.node_form');
    
$element content_field_form($tmp_form$tmp_form_state$field);
    
$photo_fid filefield_save_upload($element['field_photo'][0]);
    
    
module_load_include('inc''node''node.pages');
    
$photo_state = array();
    
$photo_state['values'] = array(
        
'body' => 'description',
        
'title' => 'title',
        
'op' => t('Save'),
    );
    
$photo_state['values']['field_gallery'][0]['nid'] = $gallery->nid;
    
$photo_state['values']['field_photo'][0]['fid'] = $photo_fid;
    
drupal_execute('photo_node_form'$photo_state, (object)$node);?>

Возможно код местами избыточный, но для меня работает.
Основную работу по сохранению картинки выполняет filefield_save_upload (валидация файла, резайз, загрузка в нужную папку)

0 Спасибо

Комментарии

Аватар пользователя penexe
7 лет 10 months назад penexe #

а какие обработчики должны запуститься?
imagecache обрабатывает изображения в момент обращения к файлу

0 Спасибо
Аватар пользователя vectoroc
7 лет 10 months назад vectoroc #

проверка расширения, может быть проверка размера картинки

0 Спасибо
Аватар пользователя penexe
7 лет 10 months назад penexe #

ну node_submit($node);
перед сохранением

0 Спасибо
Аватар пользователя vectoroc
7 лет 10 months назад vectoroc #

node_submit не вызывает нужные обработчики

0 Спасибо