передать аргумент в модуль

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

Аватар пользователя zlodiak zlodiak 6 октября 2012 в 18:06

помогите пожалуйста разобраться как передавать аргументы в модуль. вот мой модуль:

hellow.info

; $Id$

name = Module  Hello World
description  = My first Drupal 6.x Module
core = 6.x

hellow.module


<?php
    
function hellow_menu(){
        
$items = array();
        
$items['hellow'] = array(
            
'page arguments' => array('argum''node_revision_revert_confirm'4),
            
'title' => t('Hello World - Module'),
            
'page callback' => 'hellow_page',
            
'type' => MENU_CALLBACK,
            
'access arguments' => array('access content'),
        );
        
        return 
$items;
    }
    
    function 
hellow_page($argument1) {
        
$output "Hello World! Arguments parsed was " $argument1;
        
        return 
$output;
    }
?>

после ввода в адресную строку такого адреса, он получает и выводит "jjj"
mysite.ru/hellow/jjj/

но мне хотелось бы передавать аргументы не через адресную строку. возможно ли это? и как?

Комментарии

Аватар пользователя zlodiak zlodiak 6 октября 2012 в 21:42

например нажал ссылку в меню - пошёл по определенному адресу(в запросе никакие аргументы не передаются) - загрузился модуль(например в виде блока), который сделал запрос к БД и вытащил какие-нибудь данные(например количество нод на сайте)

Аватар пользователя sg85 sg85 6 октября 2012 в 22:51

"divined" wrote:
такой метод передачи аргументов называется POST, почитайте

Пользователи от такого способа перехода по меню сперва отравятся, потом застрелятся, потом повесятся.

Если уж хочется, чтоб в адресной строке всегда был один адрес(а так же куча гемороя при эксплуатации) используйте аякс. Но перед использованием, рекомендую загуглить это слово, с вероятностью 99% потом откажетесь от этой идеи.

Аватар пользователя divined divined 6 октября 2012 в 23:30

Чем пост хуже любого другого метода? Вы бы хотя бы прочитали сначала его отличая от ГЕТ метода потом бы говорили.

охо, от аякса отказаться? =))) круто.

сообщение полный бред.

Аватар пользователя sg85 sg85 6 октября 2012 в 23:39

"divined" wrote:
Чем пост хуже любого другого метода?

Минусы от аякса, к которым добавятся проблемы с обновлением страницы, а так же отсутствие плюсов от аякса, в добавок POST можно передать только из формы.
"divined" wrote:
Вы бы хотя бы прочитали сначала его отличая от ГЕТ метода потом бы говорили.

я знаю, что такое пост, гет и т.д.)
"divined" wrote:
охо, от аякса отказаться? =))) круто.

От аякса полностью отказываться никто не предлагает, однако делать весь сайт на аяксе ни к чему хорошему не приведет. Это как с алкоголем, в малых дозах полезно, а вот если питаться одной только водкой...

Аватар пользователя divined divined 6 октября 2012 в 23:47

sg85 wrote:

Минусы от аякса, к которым добавятся проблемы с обновлением страницы, а так же отсутствие плюсов от аякса, в добавок POST можно передать только из формы.

Бред, post можно передать и не из формы
sg85 wrote:

я знаю, что такое пост, гет и т.д.)

Нефига вы не знаете
sg85 wrote:

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

...

Аватар пользователя sg85 sg85 6 октября 2012 в 23:44

Ах да, речь, если что, про это:

"zlodiak" wrote:
например нажал ссылку в меню - пошёл по определенному адресу(в запросе никакие аргументы не передаются) - загрузился модуль(например в виде блока), который сделал запрос к БД и вытащил какие-нибудь данные(например количество нод на сайте)

Аватар пользователя divined divined 6 октября 2012 в 23:54

sg85 wrote:
Ах да, речь, если что, про это:

И что? Если для Вас это такая проблема, не учите свей неопытности других.

Аватар пользователя zlodiak zlodiak 7 октября 2012 в 1:42

ну спасибо за помощь. действительно я сам плохо представляю что хочу

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

думаю, что для большей части моих задач все таки подойдёт гет.

подскажите пожалуйста как через гет передать несколько аргументов. такой код не работает


<?php
    
function hellow_menu(){
        
$items = array();
        
$items['hellow'] = array(
            
'page arguments' => array('argum''node_revision_revert_confirm'4),
            
'title' => t('Hello World - Module'),
            
'page callback' => 'hellow_page',
            
'type' => MENU_CALLBACK,
            
'access arguments' => array('access content'),
        );
        
        return 
$items;
    }
    
    function 
hellow_page($argument1$argument2) {
$output "Hello World! Arguments parsed was " $argument1 $argument2;
//$output = print_r($arg);
        
        
return $output;
    }
?>

вот адрес с двуми аргументами в гет при настроенных ЧПУ:
mysite.ru/hellow/jjj/kkk

Аватар пользователя divined divined 7 октября 2012 в 2:07

'page arguments' => array(1,2), никогда не использовал эту опцию, но думаю должно быть так, если посмотреть в других модулях.
Или вообще ее убрать.

Аватар пользователя sg85 sg85 7 октября 2012 в 4:46

"divined" wrote:
Бред, post можно передать и не из формы

Приведите наглядный пример
"divined" wrote:
Нефига вы не знаете

Ну так просветите
"divined" wrote:
И что? Если для Вас это такая проблема, не учите свей неопытности других.

Для меня как раз таки нет никаких проблем

"zlodiak" wrote:
подскажите пожалуйста как через гет передать несколько аргументов. такой код не работает

И не должен. Чтоб работать с аргументами путь должен быть вида 'путь/%/%', тогда ваш пункт будет откликаться на 'путь/любое/любое'. Так же не совсем ясно где вы взяли вот это
"zlodiak" wrote:
'page arguments' => array('argum', 'node_revision_revert_confirm', 4),

Аватар пользователя sg85 sg85 7 октября 2012 в 11:39

"divined" wrote:
cURL

Туда же можно отнести, к примеру тот же старый добрый telnet, не подскажете как прикрутить их к главному меню на сайте друпала?
"divined" wrote:
jQuery.post().

Обычный аякс запрос через пост, так что тоже не подходит
"divined" wrote:
Остальное смотрите в нете.

Ага, там есть предложение рисовать форму через JS, вариант, конечно, но немного странный...

Аватар пользователя divined divined 7 октября 2012 в 12:04
Обычный аякс запрос через пост, так что тоже не подходит.

Вы уходите от темы, вы сказали что нельзя передать пост без формы. Я опровергаю ваши доводы. Вы опять несете чушь. Лучше вам прекратить показывать свою неопытность.

Аватар пользователя volocuga@drupal.org volocuga@drupal.org 7 октября 2012 в 13:01

"sg85" wrote:
И не должен. Чтоб работать с аргументами путь должен быть вида 'путь/%/%', тогда ваш пункт будет откликаться на 'путь/любое/любое'. Так же не совсем ясно где вы взяли вот это

Дополню sg85

На самом деле плейсхолдеры в урл тоже не всегда обязательно указывать (хотя желательно). Например у нас задан в хук_меню урл вида "my-url" и есть колбэк вида my_callback($arg1, $arg2, arg3) и не задан "page arguments", то мы можем набрать в строке

"my-url/path/path1/path2" получим в нашем колбэке такое

$arg1 = path
$arg2 = path1
arg3 = path2

и так далее...

Аватар пользователя sg85 sg85 7 октября 2012 в 13:41

"divined" wrote:
Вы уходите от темы, вы сказали что нельзя передать пост без формы.

именно от темы я никуда не ухожу, ибо тема как раз о том как передать Пост без использования аякса и прочих радостей:
"zlodiak" wrote:
например нажал ссылку в меню - пошёл по определенному адресу(в запросе никакие аргументы не передаются)

далее Ваша реплика про способ решения:
"divined" wrote:
такой метод передачи аргументов называется POST, почитайте

что по сути предложение передавать аргументы пунктов меню именно через пост, на что:
"sg85" wrote:
Пользователи от такого способа перехода по меню сперва отравятся, потом застрелятся, потом повесятся.

"divined" wrote:
Чем пост хуже любого другого метода? Вы бы хотя бы прочитали сначала его отличая от ГЕТ метода потом бы говорили.

Как видно, про аякс тут ни слова, только про метод Пост.

Ну и напоследок попробую рассказать чем же пост хуже:

  • Навигация браузера летит к чертям(задолбает с вопросом о повторной отправке данных)
  • Невозможность индексации страницы поисковыми системами
  • Невозможность добавить страницу в избранное(хотя это, наверное, тоже относится к первому пункту)
  • Некоторые сложности при отладке/доработке/etc и т.д., ибо url адрес с ошибки Вам передать будет невозможно, ввиду его отсутствия
  • Плюсов при этом никаких
  • Прочие радости url без аргументов

С аяксом примерно та же песня, за исключением того, что навигация браузера летит к чертям немного по другой причине и кроме минусов этот способ имеет и полезные плюсы.

И еще, коли уж делать аяксом, то в идеале именно через ГЕТ метод, в этом случае можно обойти проблему с индексацией и отключенной явой в браузере.

Навигацию в чистом аяксе видел всего 1 раз в мобильной версии сайта толи Мегафона толи МТС, скорее всего первое, что бы подключить всего одну услугу пришлось раз 10 перелогиниваться и каждый раз вбивать капчу, больше желания заходить туда с телефона у меня нет...

Аватар пользователя divined divined 7 октября 2012 в 15:24

Во-первых во вопросе не было не слова об индексации, добавление в избранное, удобства навигации.
Во-вторых, большую часть этого решает ajax history.
В-третьих, вопрос был о передачи параметров без аргументов в адресе, разве мой ответ был неверным?
И наконец, где вы в вопросе увидели "о передачи ПОСТ без аякс"?

Quote:

именно от темы я никуда не ухожу, ибо тема как раз о том как передать Пост без использования аякса и прочих радостей:

Аватар пользователя sg85 sg85 8 октября 2012 в 8:26

"divined" wrote:
Во-первых во вопросе не было не слова об индексации, добавление в избранное, удобства навигации.

За то Вы задали вопрос о недостатках пост метода, собственно то и был ответ на Ваш вопрос.

"divined" wrote:
Во-вторых, большую часть этого решает ajax history.

Опять же аякс

"divined" wrote:
В-третьих, вопрос был о передачи параметров без аргументов в адресе, разве мой ответ был неверным?

Технически это возможно, однако:
"sg85" wrote:
Пользователи от такого способа перехода по меню сперва отравятся, потом застрелятся, потом повесятся.
Если уж хочется, чтоб в адресной строке всегда был один адрес(а так же куча гемороя при эксплуатации) используйте аякс. Но перед использованием, рекомендую загуглить это слово, с вероятностью 99% потом откажетесь от этой идеи.

"divined" wrote:
И наконец, где вы в вопросе увидели "о передачи ПОСТ без аякс"?

Тут:
"divined" wrote:
такой метод передачи аргументов называется POST, почитайте

Аватар пользователя divined divined 8 октября 2012 в 10:45

А причем тут это? Нигде не привязан, но если с помощью него можно это сделать, разве это не решение?

Вот есть заказчики, которые кровь износа хотят чтобы не было никаких буковок и циферек в адресе, и что с ними делать? Вот и приходится решать подобными методами.

Вы бы не решили подобным образом если заказчик платит вам 600 т.р. и его не волнуют никакие индексации и прочее, т.к. его брендовые запросы превышают любой СЕО трафик?

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

Аватар пользователя sg85 sg85 8 октября 2012 в 10:50

"divined" wrote:
А причем тут это? Нигде не привязан, но если с помощью него можно это сделать, разве это не решение?

С его помощью можно сделать абсолютно тоже самое независимо от способа передачи данных.

"divined" wrote:
Вот есть заказчики, которые кровь износа хотят чтобы не было никаких буковок и циферек в адресе, и что с ними делать? Вот и приходится решать подобными методами.

Пока видел такой прикол всего однажды
"sg85" wrote:
Навигацию в чистом аяксе видел всего 1 раз в мобильной версии сайта толи Мегафона толи МТС, скорее всего первое, что бы подключить всего одну услугу пришлось раз 10 перелогиниваться и каждый раз вбивать капчу, больше желания заходить туда с телефона у меня нет...

"divined" wrote:
Вы бы не решили подобным образом если заказчик платит вам 600 т.р. и его не волнуют никакие индексации и прочее, т.к. его брендовые запросы превышают любой СЕО трафик?

Именно через ПОСТ нет. Ибо считаю, что делать меню через него это извращение

Аватар пользователя divined divined 8 октября 2012 в 14:08

Через ПОСТ делать легче если у вас туева хуча параметров, легче ведь обработать массив, чем строку не определенной длины?

Аватар пользователя volocuga@drupal.org volocuga@drupal.org 8 октября 2012 в 14:24

"divined" wrote:
легче ведь обработать массив, чем строку не определенной длины?

Что мешает сделать explode строки? Для GET в Друпал есть даже <?php drupal_get_query_parameters() ?>

Аватар пользователя sg85 sg85 8 октября 2012 в 14:26

"<a href="mailto:volocuga@drupal.org">volocuga@drupal.org</a>" wrote:
Что мешает сделать explode строки? Для GET в Друпал есть даже <?phpdrupal_get_query_parameters()?>

Ограничения размера url, но это смотря что передавать.