Запуск модуля из адресной строки

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

Аватар пользователя AndreyV777 AndreyV777 5 апреля 2011 в 15:47

Как сделать так чтобы модуль запускался из адресной строки на выполнение с передачей ему параметров как в php типа ?Переменная='Значение' ...

Комментарии

Аватар пользователя MaNaX MaNaX 5 апреля 2011 в 16:42

в хуке _menu своего модуля ставите путь mymodule/%
кусок из модуля ad.module:

<?php$items["admin/content/ad/groups/%ad_group/edit"] = array(
    'title' => 'Edit group',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('ad_admin_group_form', 4),
    'access arguments' => array('administer advertisements'),
    'weight' => 1,
    'file' => 'ad.admin.inc',
  );?>

и из ad.admin.inc:

<?phpfunction ad_admin_group_form($form_state, $group = NULL) {
  $form['name'] = array(
    '#type' => 'textfield',
    '#title' => t('Group name'),
    '#default_value' => isset($group->name) ? check_plain($group->name) : '',
    '#maxlength' => 64,
    '#required' => TRUE,
    '#description' => t('Specify a name for the ad group.')
  );?>

в 'page arguments' задаешь что будет являтся переменной

Аватар пользователя MaNaX MaNaX 5 апреля 2011 в 16:58
<?php$items["module/%"] = array(
    'title' => 'Бла',
    'page callback' => 'Моя_функция',
    'page arguments' => array(1),
    'access arguments' => array('admin'),
    'weight' => 1,
    'file' => 'module.inc',
  );?>
Аватар пользователя AndreyV777 AndreyV777 5 апреля 2011 в 17:00

То есть я пишу к примеру в hook_menu

<?php$items["/mymodule/%"] = array(
'title' => 'mymodule',
'page callback' => 'mymodule_run',
'page arguments' => ,
'access arguments' => array('administer advertisements'),
'weight' => 1,
);?>

а что писать в 'page arguments'? в пхп я получаю значения переменных через $_GET['Имя Переменной']

Аватар пользователя MaNaX MaNaX 5 апреля 2011 в 17:04

array(1) тк переменная передается второй по счету (первой если с нуля)
а переменные получаеть должен из функции:
mymodule_run($peremenaya){}

Аватар пользователя AndreyV777 AndreyV777 5 апреля 2011 в 17:08

function zapros_menu()
{
$items['zapros/%'] = array(
'title' => 'zapros',
'page callback' => 'zapros_run',
'access arguments' => array('access zapros'),
'type' => MENU_NORMAL_ITEM,
);

return $items;
}

вот как я делаю, пытаюсь вызвать модуль http://Имя сайта/?q=zapros пишет что страница не найдена

Аватар пользователя AndreyV777 AndreyV777 5 апреля 2011 в 17:16

сбросил - аналогично вот код

function zapros_perm() {
return array('access zapros');
}

function zapros_menu()
{
$items['zapros/%'] = array(
'title' => 'zapros',
'page callback' => 'zapros_run',
'page arguments' => array(1),
'access arguments' => array('admin'),
'weight' => 1,
'file' => 'module.inc',

// 'access arguments' => array('access zapros'),
// 'type' => MENU_NORMAL_ITEM,
);

return $items;
}

function zapros_run($perem) {

Аватар пользователя MaNaX MaNaX 5 апреля 2011 в 17:24

'access arguments' => array('access zapros'),

и http://Имя сайта/?q=zapros/бла

function zapros_run($perem) {
return $perem
}

выключи и включи модуль

Аватар пользователя AndreyV777 AndreyV777 5 апреля 2011 в 17:31

то есть для пхп я передавал так ... ?i1=текст1&i2=Текст2 итд ... а тут у нас получается что я в perem передаю просто строку ... там будет все

Аватар пользователя MaNaX MaNaX 5 апреля 2011 в 17:42

а вы изначально знаете ктколько у вас будет переменных
по-моему проще разрезать строку explode('/', $perem)

Аватар пользователя MaNaX MaNaX 5 апреля 2011 в 17:57

RxB wrote:
"MaNaX" wrote:

по-моему проще разрезать строку explode('/', $perem)

Огада
$_REQUEST придумали чиста для прикола и паржать?

зато строка адреса не будет выглятеть так ужастно:
?i1=текст1&i2=Текст2
а в соответствии с общими принципами:
/текст1/Текст2
КРАСИВО ИМХО

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 5 апреля 2011 в 17:58

Оно то красиво и я разделяю данный подход, но:
1. Что делать если не всегда передаются все переменные? Порядок то нарушится
2. Что делать если переменных более 7?

Аватар пользователя AndreyV777 AndreyV777 5 апреля 2011 в 21:20

Еще такой вопрос, а можно сделать так, чтобы запуск модуля не перенаправлял меня на новую страницу ... а просто выполнил функцию (например вывел значение переменной) на текущей странице?

Аватар пользователя AndreyV777 AndreyV777 5 апреля 2011 в 22:06

при запуске моего модуля через адресную строку http://Имя сайта/?q=zapros он выводит новую страницу ... а хотелось бы чтобы оставался на той же, с которой его вызвали по указанной ссылке ... так вообще возможно или нет ... можно конечно решить проблему редиректом назад, но не хотелось бы.

Аватар пользователя AndreyV777 AndreyV777 6 апреля 2011 в 10:47

мне кажется init выполняется не только при запуске из адресной строки, но и просто при загрузке, включения выключения модуля ... разве нет? а нельзя сделать с помощью 'type' => MENU_CALLBACK,
например ... что только один вариант через init????

Аватар пользователя AndreyV777 AndreyV777 6 апреля 2011 в 11:07

Так вроде же понятно написал )
мне надо чтобы новая страница не загружалась при вызове модуля: http://Имя сайта/?q=zapros
а просто выполнялась функция в этом модуле, а браузер отображал ту же страницу.

Аватар пользователя AndreyV777 AndreyV777 6 апреля 2011 в 11:21

"RxB" wrote:

Тогда порядок такой:
1. Идём в API, читаем hook_init()
2. Идём на php.net/manual/ru/index.php и читаем там про условные операторы

1.Я читал
2.там нет про условные операторы.

а нельзя просто пример показать, как это можно сделать?

Аватар пользователя AndreyV777 AndreyV777 6 апреля 2011 в 11:24

"mmc" wrote:
походу ты блябудовый программист.
тебя не устаивает включение модулей обычным способом?

я не программист, тем более не блябудовый ... и никогда не понимаю таких комментариев, если не можешь помочь и объяснить, лучше ничего не пиши. Меня не устраивает включение модулей обычным способом, если я прошу помочь объяснить.

Аватар пользователя AndreyV777 AndreyV777 6 апреля 2011 в 11:33

"RxB" wrote:
лол, это что?
http://ru2.php.net/manual/en/control-structures.if.php[/quote]

спасибо, я прочитал ... но не понял как решить проблему ... все таки однозначно можно сказать, через хук menu можно так сделать или нет? если нет то можно пример через init ... у меня написан модуль через init, он выполняется при любой перезагрузки страницы

Аватар пользователя AndreyV777 AndreyV777 6 апреля 2011 в 11:35

"mmc" wrote:
ок, объясни второй пункт

вкратце )) мне нужно запустить функцию в модуле через ссылку, но так чтобы браузер не переходил по ссылке, а просто выполнял эту функцию ... я уже не знаю как еще объяснить ...

Аватар пользователя AndreyV777 AndreyV777 6 апреля 2011 в 11:37

"RxB" wrote:

Дальше за деньги или перечитывайте вдумчиво топик

спасибо за ответ ... есть еще специалисты которые могут объяснить, а не отсылают читать мануалы.