Помогите с hook_form_alter, скрыть поле от вывода

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

Аватар пользователя AntonB AntonB 9 апреля 2010 в 5:17

Доброго дня.

Прошу помощи по hook_form_alter для Drupal 6. С Twitter Module. Сам к сожалению в PHP не силен.

Как скрыть это поле, которое выводится в "режиме зарегистрированного пользователя" для заполнения при отправке сообщения на сайт?

Именно скрыть, чтобы далее передавало, то что требуется для дальнейшего постинга в твиттер. Я пробывал ставить type=hidden на поля, но после этого постинг не проходит. Код выкидывать кусками тоже не помогло. Больше не знаю, что делать. Поле это одно совсем не в тему снизу болтается, при том, что галка и значения в нем уже есть по умолчанию из настроек модуля.

Это из twitter.module:

<?php
/**
 * Implementation of hook_form_alter().
 */
function twitter_form_alter(&$form$form_state$form_id) {
  
// Alter any node forms.
  
if (isset($form['#node']) && $form['#node']->type .'_node_form' == $form_id) {
    
// If we haven't enabled Twitter posting on this node type, nothing to do
    // here.
    
$type $form['#node']->type;
    
$allowed_types variable_get('twitter_types', array('story' => 'story''blog' => 'blog'));
    if (empty(
$allowed_types[$type])) {
      return;
    }

    

module_load_include('inc''twitter');

    

$twitter_form twitter_form();
    if (!
$twitter_form) {
      return;
    }
    
$form['twitter'] = array(
      
'#type' => 'fieldset',
      
'#title' => t('Post to twitter.com'),
      
'#collapsible' => TRUE,
      
'#collapsed' => FALSE,
      
'#tree' => TRUE,
    );
    
$form['twitter']['post'] = array(
      
'#type' => 'checkbox',
      
'#title' => t('Announce this post on Twitter'),
      
'#default_value' => (empty($form['nid']['#value'])),
      
'#id' => 'twitter-toggle',
    );
    
$form['twitter'] += $twitter_form;
    
$form['twitter']['status']['#default_value'] = variable_get('twitter_default_format''New post: !title !tinyurl');
    
$form['twitter']['status']['#description'] = t('The given text will be posted to twitter.com. You can use !url, !url-alias, !tinyurl, !title and !user as replacement text.');
  }
}
?>

Возможно ли это сделать путем изменения php кода без установки каких-нибудь дополнительных модулей?

Комментарии

Аватар пользователя wolfXXXL wolfXXXL 9 апреля 2010 в 12:16

"AntonB" wrote:
Я пробывал ставить type=hidden на поля, но после этого постинг не проходит.

Это происходит скорей всего по тому что у поля уже стоит тип и Вы возможно поставили ещё раз не убрав старый.
Не имел дело с этим модулем, но судя по приведенному коду - тип поля формируется в функции twitter_form();
Нужно посмотреть где она вызывается чтоб её изменения не вызвали изменения ещё где-то и переопределить там тип поля на '#type' => 'hidden' или заменить функцию на такую-же сформированную для данного поля.
А если не ходите лесть в код, поставьте этому полю стиль display: none; (хоть честно говоря не очень красивое решение)

Аватар пользователя ygerasimov@drupal.org ygerasimov@drup... 9 апреля 2010 в 13:54

можно скрыть обрамив в блок

$form['twitter'] = array(
 '#type' => 'fieldset',
 '#title' => t('Post to twitter.com'),
 '#collapsible' => TRUE,
 '#collapsed' => FALSE,
 '#tree' => TRUE,
 '#prefix' => '<div style="display:none;">',
 '#suffix' => '</div>',
);
Аватар пользователя AntonB AntonB 9 апреля 2010 в 14:51

Ygerasimov, спасибо вам большое, самый простой способ оказался с #prefix и #suffix, поле полностью скрылось, оно конечно есть, но я его больше не вижу).

Uho, тоже работает вариант, спасибо за ваш ответ, но остается поле "отправить в твиттер и checkbox с Анонса"

Аватар пользователя Uho Uho 9 апреля 2010 в 15:49

"AntonB" wrote:
Uho, тоже работает вариант, спасибо за ваш ответ, но остается поле "отправить в твиттер и checkbox с Анонса"

я почему то подумал, что надо только поле ввода скрыть...
так же можно и для чекбокса

Аватар пользователя AntonB AntonB 9 апреля 2010 в 16:43

Uho, если так же сделать для чекбокса, то там останется еще рамка "ОТПРАВИТЬ В TWITTER" это type=fieldset

Я ее и хотел скрыть, чтобы все остальное за ней скрылось следом, тк она основная.
Как это сделать не знаю на php, получилось через #prefix и #suffix с display:none, что Ygerasimov подсказал.

Аватар пользователя Siegfrid@drupal.org Siegfrid@drupal.org 9 апреля 2010 в 20:58

в функции темы надо было просто грохнуть это поле с помощью unset... Ставится devel, смотрится, кто генерит этот вывод, далее в своей теме кажись через template.php пишется функция в которой мочите эту вашу форму...