возникла проблема с темизацией страницы добавления материала /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 .= '
'.t('add photo').' | '.drupal_render($form['field_excursion_photo']).' |
';
$content .= '
';
return $content;
}
?>
поле выводится но ведет себя крайне не адекватно, при попытке залить файл - либо показывает сообщение что файл больше лимита, хотя это не так, либо делает чтото странное. при попытке добавить еще одно изображение - пропадает целиком.
видео на YouTube: http://www.youtube.com/watch?v=TmHUrkAvVnA
Комментарии
function theme_excursion_node_form($form){
....
}
?
2 sas@drupal.org :
в чем суть ответа? excursion это $node->type; для каждого типа ноды - своя страница редактирования.
Для работы с формами существуют хуки такие как hook_form_alter и его производные
Подробнее:
http://api.drupal.org/api/form
http://api.drupal.org/api/function/hook_form_alter/6
мне не нужно изменять структуру формы, параметры элементов и тд. мне просто нужно разместить поля определенным образом, не думаю что к этой задаче можно хоть както прислонить hook_form_alter(), если я не прав и у вас есть предложение как с помощью него вывести imagefield поле чтобы оно нормально функционировало, пишите - буду признателен, а api свала туксу и сами читать умеем. здесь же был задан конкретныв вопрос, прошу давать конкретные ответы...
1-е Любая страница добавления материала и есть форма, поэтому к ней применим hook_form_alter со всеми вытекающими оттуда последствиями и drupal_render там не нужен соовсем.
2-е если Вам необходимо просто поменять порядок вывода полей, то для этого в настройках типа материала есть вкладка управление полями, на которой Вы их можете расставить как душе угодно.
было бы интересно узнать как соорудить такое:
без использования drupal_render( ); , а темболее через вкладку управления полями
Еще раз повторюсь, я задал конкретный вопрос - вывод imagefield через drupal_render();, по этому прошу давать конкретные ответы, если же вы предлагаете другой способ реализации, то прилагайте куски с примерами
http://www.rest-ua.com/node/2393 или зарегистрируйтесь и попробуйте добавить жилье сами обыкновенный модуль content_profile свой тип материала c ССК полями и все.
Если необходима форма как у Вас, то можно попробовать переопределить форму регистрации и ее submit, либо пишется своя форма, при написании своей проще использовать drupal_get_form вместо drupal_render.
Там яваскрипт привязан к полю имеджфилд для аяксовой загрузки картинки, Вы нарушаете стандартный вывод полей этого модуля, вот он неправильно и отрабатывает. Сравните стандартный вывод и тот, что у Вас получается, загляните в скрипт, там небось делегируется событие какому нибудь родителю, который Вы вырезали или что-то в таком духе.
Ага, глянул, как там сделано. А сделано там с помощью ahah, и для того, чтобы он правильно отрабатывал нужен врэппер(wrapper), который указывается при создании формы, например edit-field-foto-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." в независимости от файла.
А саму форму открыл, а то в коде твоем не видно, а ahah обращается к свойству form элемента?
Вобщем сравнивать что было до изменений и что стало после...и проверить работает ли загрузка без изменений.