проблема с выводом cck imagefield через drupal_render( );

Главные вкладки

Аватар пользователя alter.ego alter.ego 19 июля 2009 в 23:39

возникла проблема с темизацией страницы добавления материала /node/add/*

есть материал с полем cck imagefield, для вывода которого использую drupal_render( );

function JournalSochi_theme() {
return array('excursion_node_form' => array('arguments' => array('form' => NULL)));
}

function JournalSochi_excursion_node_form($form){
$content = '';
$content .= '

';
$content .= '

';
$content .= '

'.t('add photo').' '.drupal_render($form['field_excursion_photo']).'

';
$content .= '

'.drupal_render($form['buttons']['submit']).'

';

return $content;
}

?>

поле выводится но ведет себя крайне не адекватно, при попытке залить файл - либо показывает сообщение что файл больше лимита, хотя это не так, либо делает чтото странное. при попытке добавить еще одно изображение - пропадает целиком.

видео на YouTube: http://www.youtube.com/watch?v=TmHUrkAvVnA

Комментарии

Аватар пользователя alter.ego alter.ego 20 июля 2009 в 10:05

"glu2006" wrote:
Для работы с формами существуют хуки такие как hook_form_alter и его производные

мне не нужно изменять структуру формы, параметры элементов и тд. мне просто нужно разместить поля определенным образом, не думаю что к этой задаче можно хоть както прислонить hook_form_alter(), если я не прав и у вас есть предложение как с помощью него вывести imagefield поле чтобы оно нормально функционировало, пишите - буду признателен, а api свала туксу и сами читать умеем. здесь же был задан конкретныв вопрос, прошу давать конкретные ответы...

Аватар пользователя glu2006 glu2006 20 июля 2009 в 10:36

1-е Любая страница добавления материала и есть форма, поэтому к ней применим hook_form_alter со всеми вытекающими оттуда последствиями и drupal_render там не нужен соовсем.
2-е если Вам необходимо просто поменять порядок вывода полей, то для этого в настройках типа материала есть вкладка управление полями, на которой Вы их можете расставить как душе угодно.

Аватар пользователя alter.ego alter.ego 20 июля 2009 в 11:01

было бы интересно узнать как соорудить такое:

Подача-объявления.jpg - upload images with Picamatic

без использования drupal_render( ); , а темболее через вкладку управления полями Wink

Еще раз повторюсь, я задал конкретный вопрос - вывод imagefield через drupal_render();, по этому прошу давать конкретные ответы, если же вы предлагаете другой способ реализации, то прилагайте куски с примерами

Аватар пользователя glu2006 glu2006 20 июля 2009 в 11:43

http://www.rest-ua.com/node/2393 или зарегистрируйтесь и попробуйте добавить жилье сами Wink обыкновенный модуль content_profile свой тип материала c ССК полями и все.
Если необходима форма как у Вас, то можно попробовать переопределить форму регистрации и ее submit, либо пишется своя форма, при написании своей проще использовать drupal_get_form вместо drupal_render.

Аватар пользователя gorr gorr 20 июля 2009 в 11:19

Там яваскрипт привязан к полю имеджфилд для аяксовой загрузки картинки, Вы нарушаете стандартный вывод полей этого модуля, вот он неправильно и отрабатывает. Сравните стандартный вывод и тот, что у Вас получается, загляните в скрипт, там небось делегируется событие какому нибудь родителю, который Вы вырезали или что-то в таком духе.

Аватар пользователя gorr gorr 20 июля 2009 в 11:38

Ага, глянул, как там сделано. А сделано там с помощью ahah, и для того, чтобы он правильно отрабатывал нужен врэппер(wrapper), который указывается при создании формы, например edit-field-foto-0-ahah-wrapper, как я и предполагал...

Аватар пользователя alter.ego alter.ego 20 июля 2009 в 12:28

обертки оно создает само:

<div id="edit-field-free-photo-0-ahah-wrapper">
  <span id="thmr_60" class="thmr_call"></span>
  <div class="form-item" id="edit-field-free-photo-0-wrapper">
    <span id="thmr_51" class="thmr_call"><span id="thmr_52" class="thmr_call"></span></span>
    <div class="filefield-element clear-block">
      <div class="widget-edit">
        <span id="thmr_59" class="thmr_call"><input type="hidden" name="field_free_photo[0][fid]" id="edit-field-free-photo-0-fid" value="0"> <input type="hidden" name="field_free_photo[0][list]" id="edit-field-free-photo-0-list" value="1"> <span id="thmr_57" class="thmr_call"></span></span>
        <div class="form-item" id="edit-field-free-photo-0-upload-wrapper">
          <div class="filefield-upload clear-block">
            <input type="file" name="files[field_free_photo_0]" accept="jpg,jpeg" class="form-file" id="edit-field-free-photo-0-upload" size="22"> <span id="thmr_53" class="thmr_call"><span id="thmr_54" class="thmr_call"><input type="submit" name="op" id="edit-field-free-photo-0-filefield-upload" value="Upload" class="form-submit"></span></span>
          </div>
          <div class="description">
            Maximum Filesize: <em>2 MB</em><br>
            Allowed Extensions: <em>jpg jpeg</em><br>
            Images larger than 640x480 pixels will be scaled
                                        </div>
                                </div>
                        </div>
                </div>
        </div>
</div>

перед drupal_render($form['image_field']); добавил:

<?php
$content .= drupal_render($form['form_build_id']);
$content .= drupal_render($form['form_token']);
$content .= drupal_render($form['form_id']);
?>

перестало исчезать при попытке добавить поле, но картинки все еще не загружаются, выводит ерор "The selected file could not be uploaded. The file is not a known image format." в независимости от файла.

Аватар пользователя gorr gorr 20 июля 2009 в 12:38

А саму форму открыл, а то в коде твоем не видно, а ahah обращается к свойству form элемента?
Вобщем сравнивать что было до изменений и что стало после...и проверить работает ли загрузка без изменений.