Конвертировал модуль 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 прочитал, может бошка не варит уже.
Комментарии
$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. даже если это и не критично, это полезно, т.к ты будешь сразу видеть, где у тебя форма, а где функция какая-то
Спасибо большое за отклик. Впринципе еще поломал голову, проблему решил, правда совсем не головой, а просто переустановкой друпала с нуля, и соответственно залитием этого модуля. И форма появилась. В дальнейшем аналогичные проблемы с неработоспособностью модуля после доработки решал включением и выключением модуля. (Кстати, чтобы в дальнейшем знать, надо каждый раз после изменения модуля его переустанавливать?) Возможно так оно и надо было делать, просто с друпалом работаю буквально неделю. Разбираюсь потихоньку, когда столько много проблем, намного быстрее разобираешься в коде.
За замечание отдельное спасибо, удобно двольно, во всяком случае для себя, особенно когда код большой (:
Еще заменил в функции:
<?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