Вывод формы

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

Аватар пользователя foxman333 foxman333 27 марта 2009 в 14:42

Конвертировал модуль Drupal 5.x в Drupal 6.х с помощью Coder. Впринципе никаких проблем не возникало, было пару моментов в которых были проблемы, но все они были решены, Coder ошибок больше не выдавал. Модуль успешно установился на Drupal 6.х, но к сожалению не заработал так как должен работать. Install файл все свои функции выполнил полностью (создал необходимые 4 таблицы и добавил в них инфу). А сам модуль заработал только частично: (Пока писал, еще продвинулся, только не понял что сделал). Уже 3 дня бьюсь над ним. Немогу уже, помогите чем смогите, потихоньку мозг отключается!

В данный момент не работает форма, ругается друпал, говорит мол нехватает ему аргумета для drupal_get_form() на странице http://192.168.0.20/drupal610/good/access:

<?php
warning
Missing argument 1 for drupal_get_form() in Z:/home/192.168.0.20/www/drupal610/includes/form.inc on line 69.
warning
call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback'' was given in Z:/home/192.168.0.20/www/drupal610/includes/form.inc on line 366.
?>

Это код менюшки, с которой попадаю на эту страницу

<?php
$items
['good/access'] = array(
      
'title'    => 'Good access',
      
'page callback' => 'drupal_get_form',
      
'page arguments' => array('good_access'),
      
'access callback'   => user_access('good_access'),
    );
?>

А это сама функция good_access:

<?php
function good_access() {
  
$setup db_query("SELECT * FROM {good_setup}");
  
$set db_fetch_object($setup);

  if (isset(

$_POST['kod'])) {
    
$kod db_query("SELECT * FROM {good_kod} where `kod`='"md5(mysql_real_escape_string($_POST['kod'])) ."'");
    
$check db_fetch_object($kod);
    
$ip=ip_address();
    if (
$check!='') {
      if (
$check->stat==0) {
        
db_query("UPDATE `good_kod` SET
        `stat` = '1',
        `data` = '"
date('U') ."' where `id`="$check->id);
      }
      
$stat=1;
      
$_SESSION['acc']=mysql_real_escape_string($_POST['kod']);
      
drupal_set_message(t('kod ok!'));
    }
    else {
      
$stat=0;
      
form_set_error('info't('kod false!'));
    }

    

$r=db_query("INSERT INTO `good_stat_enter` (`kod` , `status` , `data` , `ip` )
                    VALUES ('"
mysql_real_escape_string($_POST['kod']) ."', '"$stat ."', '"date('U') ."', '"$ip ."')");
    
header('location: ?q=good/access');
    exit;
  }

  

$n=num($set->num);

  

$res=$set->text ."<br /><font size=1><i>"$set->text2;

  

$form['photos'] = array(
    
'#prefix' => '<div class="date_widget">',
    
'#suffix' => '</div>',
    
'#value' => $res,
  );
  
$form['kod'] = array(
    
'#type' => 'textfield',
    
'#title' => t('good kod'),
    
'#required' => TRUE,
    
'#default_value' => '',
    
'#weight' => 1,
  );
  
$form['submit'] = array(
    
'#type' => 'submit',
    
'#value' => t('set kod'),
    
'#weight' => 2,
  );
  return 
$form;
}
?>

Весь http://api.drupal.ru прочитал, может бошка не варит уже.

Комментарии

Аватар пользователя wanders.32 wanders.32 27 марта 2009 в 17:32

$form['photos'] = array(
'#prefix' => '

',
'#suffix' => '

',
'#value' => $res,
);
вероятно или из-за этого ругается, хотя не факт, это я так понимаю он тебе див нарисует просто, да?
у тебя походу форма не передается. попробуй следующее:

<?php
$items
['good/access'] = array(
      
'title'    => 'Good access',
      
'page callback' => 'good_access_draw',
      
'access callback'   => user_access('good_access'),
    );
?>

меню

<?php
function good_access_draw(){
return 
drupal_get_form('good_access_form');
}

это старый способ)) так ты хотя бы можешь точно понятьвозвращается тебе формаили нет (если пустая страница значит нет).
?>

замечание: не могу с уверенностью сказать, но формы вобще называются бла-бла_название формы_form. даже если это и не критично, это полезно, т.к ты будешь сразу видеть, где у тебя форма, а где функция какая-то

Аватар пользователя foxman333 foxman333 27 марта 2009 в 20:32

Спасибо большое за отклик. Впринципе еще поломал голову, проблему решил, правда совсем не головой, а просто переустановкой друпала с нуля, и соответственно залитием этого модуля. И форма появилась. В дальнейшем аналогичные проблемы с неработоспособностью модуля после доработки решал включением и выключением модуля. (Кстати, чтобы в дальнейшем знать, надо каждый раз после изменения модуля его переустанавливать?) Возможно так оно и надо было делать, просто с друпалом работаю буквально неделю. Разбираюсь потихоньку, когда столько много проблем, намного быстрее разобираешься в коде.

За замечание отдельное спасибо, удобно двольно, во всяком случае для себя, особенно когда код большой (:

Еще заменил в функции:

<?php
mysql_real_escape_string
($_POST['kod']) -->  db_escape_string($_POST['kod'])
?>

А по поводу этой штуки:

<?php
  $form
['photos'] = array(
    
'#prefix' => '<div class="date_widget">',
    
'#suffix' => '</div>',
    
'#value' => $res,
  );
?>

Да она просто див выводит, внутрь которого пихает из переменной $res