php код на страницу друпала

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

Аватар пользователя trolt trolt 11 октября 2008 в 0:36

Привет.
Новичек. Вопрос:
Меню, по ссылке, в содержании должны открываться последовательно 4 страницы с формами
собирающие у пользователя информацию, с кнопками "далее". После
чего писать собранную информацию в БД.

Код на php реализующий эти 4 страницы с формочками уже есть. Надо натянуть на друпал.
Куда смореть?? Оформлять этот код как модуль?

Комментарии

Аватар пользователя Nikit Nikit 11 октября 2008 в 8:54

Quote:
я не писал(а).

добавлю: не обязательно вебформ, если уже готов сам скрипт (может свои какие причиндалы), но посмотреть перед переводом в модуль, всё таки стоит, может то же самое делает...

Аватар пользователя trolt trolt 11 октября 2008 в 18:55

Спасибо большое за ответы.
Подскажите еще раз:
Буду писать свой модуль. Но только не пойму куда смотреть?
в how-to обычно рассматривается модуль типа block.
Мне же как я понимаю нужен модуль типа node.
Укажите на примерчик хоть небольшой.

Аватар пользователя trolt trolt 11 октября 2008 в 21:22

взял код по этой ссылке: http://drupal.ru/node/9561

<?php

function testform_menu() {
  global $user;
  $items = array();

  $items['testform'] = array(
        'title'            => t('Тест формы'),
        'access arguments' => array('access content'),
        'type'             => MENU_CALLBACK,
        'callback'         => 'testform_page');

  return $items;
}

function _test_form() {
  $form['name'] = array(
    '#type' => 'textfield',
    '#title' => t('Name'),
    '#size' => 30,
    '#maxlength' => 64,
    '#description' => t('test test'),
  );
  $form['submit'] = array('#type' => 'submit', '#value' => t('Save'));
  return $form;
}

function testform_page() {
    return drupal_get_form('_test_form');
}
?>

Не работает, пишет нет доступа, открываю
hostname.ru/?q=testform

Почему так по разному выглядят модули, block модуль сильно по другому выглядел.

Аватар пользователя Nikit Nikit 12 октября 2008 в 5:04

смотри на 'access arguments' => array('access content'),
это определяет доступ.

Нет такого понятия, block-модуль, как правило в модулях определяется всё.
И чтобы не спотыкаться о камни, советую почитать книжку Pro drupal development и так далее.

Аватар пользователя trolt trolt 12 октября 2008 в 14:23

Спасибо.
Просветление потихоньку наступает. Книжку читаю.

Подскажите. В модуле пишу
'#title' => 'Тест',

Ну и текст по русски не отображается. Просто пусто вместо текста.

Надо писать:
'#title' => t('Test'),
и писать po файл для своего модуля??
или есть путь по проще7

Аватар пользователя Nikit Nikit 12 октября 2008 в 14:29

Да, именно.
Хотя, если вы не собираетесь распространять модуль (или не будет нужна мультязычность), можете использовать редакторы, понимающие utf-8, например notepad++. Там сразу пишете без t()...

Аватар пользователя trolt trolt 12 октября 2008 в 16:35

Спасибо. Smile

Я уж тут совсем обнаглею.
Я пока не понимаю, как мне на одной и той же странице, показать следующую форму.

Т.е. есть первая форма, есть кнопка "Далее", вот по "Далее", нужно чтобы показывалась
следующая форма.

Я пока буду искать сам. Но если кто подскажет - буду рад.

Аватар пользователя trolt trolt 12 октября 2008 в 23:55

Немного разобрался.

Но тут другой вопрос.
Как дебажить модули???
У меня есть сейчас 3 тестовых модуля у которых hook_menu - один и тот же.
При этом 1 - работает.
2 - доступ запрещен.
3 - не работает, страница не найдена.

глазами мне тяжело понять, почему не работает.

Аватар пользователя andypost@drupal.org andypost@drupal.org 13 октября 2008 в 0:35

Для начала посмотрите на hook_menu^api для 6й версии, код который вы привели - это гибрид между 5ть и 6ть
title, description в 6ке не подлежат переводу - они автоматически системой меню пропускаются через t^api

type тоже
MENU_NORMAL_ITEM - будет в меню
MENU_CALLBACK - не будет в меню
подробнее hook_menu^api

<?php
/**
* Implementation of hook_menu().
*/
function privatemsg_menu() {
$items['messages/new'] = array(
'title' => 'Create',
'page callback' => 'drupal_get_form',
'page arguments' => array('privatemsg_new'),
'access arguments' => array('write privatemsg'),
'type' => MENU_LOCAL_TASK,
'weight' => -7,
);
?>

Аватар пользователя trolt trolt 13 октября 2008 в 19:39

Победил Smile

Подскажите а как можно писать текст между формами???
Например:

 $form['First_radios'] = array(
                '#type'        => 'radios',
                '#title'       => "First radio",
                '#options'     => array(t('First choice'), t('Second choice')),
        );

        $form['Second_radios'] = array(
                '#type'        => 'radios',
                '#title'       => "Second radio",
                '#options'     => array(t('First choice'), t('Second choice')),
        );

Вот хочу например написать один параграф текста между First_radios и Second_radios.
Желательно чтоб его можно было форматировать(выбрать цвет, шрифт и т.п.)
Как?

Спасибо.

Аватар пользователя andypost@drupal.org andypost@drupal.org 13 октября 2008 в 20:26

Для этого есть '#type' => 'markup'
он еще и работает по умолчанию

Например
<?php
$form['delimeter'] = array('#value' => variable_get('mydelimeter','');
?>
причем mydelimeter можно делать настраиваемым в админской части, через создание формы настроек для модуля