вызов функции / передача парамс

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

Аватар пользователя Vertex Vertex 17 декабря 2006 в 13:06

мне нужно вызвать свою функцию
как лучше это сделать?
буду пробовать так:
- создать пэйдж с пхп кодом
- в месте вызова сделать форму с action=\page_name

или есть "более-другие-конвенциональные" методы...

п.с. просто мне нужны доп.манипуляции над БД

спасибо за помощь и терпение к друпал-новисам

п.с.2 мне здесь уже реально помогли пару раз - спасибо люди добрые Smile
и да прибудет с вами сила друпала

Комментарии

Аватар пользователя rapitosov@drupal.org rapitosov@drupal.org 17 декабря 2006 в 14:53

Функции регистрируются через hook_menu, подробнее читайте http://api.drupal.org/api/HEAD/file/developer/examples/page_example.module
---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы

Аватар пользователя Vertex Vertex 17 декабря 2006 в 15:24

если какой-то url из url aliases, как его описать, чтобы получал парам?
например:
- show_something - это url alias
при вызове передаю nid, т.е. show_something/25
как его для этого в aliases описать - ? show_something/%1 никак...
merci d'avance

Аватар пользователя rgb rgb 17 декабря 2006 в 15:46

Можно так попробовать: создаёте страницу (page), и в тело ей прописываете необходимый вызов ф-ции. И не забудьте поставить содержимому страницы тип "PHP".

Вот пример: добавляю страницу и назначаю ей алиас "my_page". Далее, в тело страницы пишу:

<?php
$arg = arg(1);
my_page_func($arg);

function my_page_func($arg = NULL) {
// ...
// real code
// ...
}
?>

Как вариант, код ф-ции можно вынести куда-то (например, просто в themes/THEME_NAME/template.php, но следует учитывать тогда, что страница становится привязанной к определённой теме!).

Этот вариант не требует написания отдельного модуля, но я б рекомендовал его только для каких-то простых случаев. Если надо что-то более-менее серьёзное, то лучше воспользоваться советом rapitosov-а и написать нормальный модуль.

Аватар пользователя Vertex Vertex 17 декабря 2006 в 16:15

с передачей параметров
url alias: some_alias | node/142
my_url/some_alias - в теле которого

<?php
$arg = arg(1);
my_page_func($arg);

function my_page_func($arg = NULL) {
  // ...
  // real code
  // ...
echo $arg;
}
?>

выводит свой nid т.е. 142
вызов my_url/some_alias/33 - валит страницу - пустая
а мне бы передать странице параметры... парочку, хотябы...
Smile да хоть один, потом разберусь...

Аватар пользователя rapitosov@drupal.org rapitosov@drupal.org 17 декабря 2006 в 17:06

Параметры передаются следующим образом:
http://example.org/arg(0)/arg(1)/arg(2)/..

Друпал ищет определение пути справа-налево, то есть при использовании пути http://example.org/0/1/2
сначала будет произведен поиск http://example.org/0/1/2, если этот путь не определен
будет произведен поиск http://example.org/0/1 и так далее.

Вам нужно добавить путь http://example.org/0, и не указывать явно никаких путей глубже этого адреса. Тогда Вы сможете извлекать все параметры командами arg(1), arg(2) и тд.

---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы

Аватар пользователя Vertex Vertex 17 декабря 2006 в 17:33

а как правильно определить (записать алиас)
чтобы работало с параметрами

у меня так:

| alias | system
| deletebranch | node/142

я вызываю deletebranch
нужно вызывать deletebranch/133 (например)
или deletebranch/133/143 (например)

как прописать сам алиас в таблице чтобы работало с параметрами

спасибо огромное

Аватар пользователя rapitosov@drupal.org rapitosov@drupal.org 17 декабря 2006 в 17:43

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

---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы

Аватар пользователя Vertex Vertex 17 декабря 2006 в 17:50

простите дурака ...
перепробовал все возможные вырианты (на мой взгляд)
с именем алиаса - не работает с параметрами
так работает: node/142/133/144 и парамс ловятся
так нет: deletebranch/133/144
(где node/142 = deletebranch в талице алиасов)
... досадно мне конечно... но мне "вешалка" - надо чтоб работало...
/me panic Sad

Аватар пользователя rgb rgb 17 декабря 2006 в 18:00

Quote:
Ещё раз, внимательно, прочитайте последний абзац моего предыдущего сообщения. Там содержится ответ именно на этот вопрос.

Да дело в том, что так действительно не работает (не идёт замена "node_alias/PARA" на "node/NID/PARA"), по крайней мере, у меня не получилось это реализовать Smile

Дело всё в том, что выборка из БД идёт по запросу "SELECT dst FROM {url_alias} WHERE src = '%s'", где "%s" - это URL и если там есть "node_alias/PARA", то в таблице не будет найдена строка для "node_alias" Sad

2All: народ, мы ж забыли такую штуку как custom_url_rewrite()! Можно и её использовать, например, для преобразования того самого "node_alias/PARA" в "node/NID/PARA"!

Понятно, что это уже хаки чистейшей воды пошли (и хардкод и всё такое, но есть и такой способ!).

Аватар пользователя rapitosov@drupal.org rapitosov@drupal.org 18 декабря 2006 в 1:51

Проверил, действительно такой приём не работает c алязами. Только с путями, зарегистрированными через hook_menu().
---
http://drupal5.ru - информация для друпателей
качественные ответы только на качественные вопросы

Аватар пользователя rgb rgb 17 декабря 2006 в 17:46

Vertex wrote:
вызов my_url/some_alias/33 - валит страницу - пустая

Извините, не совсем понял сразу задачу. Дело в том, что я предложил способо, работающий без алиасов (т.е. сслыки, типа "node/NID/PARA1" будут работать хорошо, а ссылки вида "node_alias/PARA1" - нет).

Что б решить задачу, можно и для страниц с параметрами ввести алиасы (т.е. писать не "node_alias/PARA1", а добавить алиас для "node/NID/PARA1" (он, кстати, может быть вида "node_alias/PARA1"!)). Если это не приемлемо, тогда - не использовать алиас в строке, где параметр задан. Ну а если и это не подходит, тогда, наверное, только модуль.

Аватар пользователя SiR SiR 19 декабря 2006 в 17:40

Что мешает использовать стандатную функцию $_GET
Она в Друпале тоже работает Smile
И если нет желания писать собственный модуль - вперед разбирать url стандартными функциями php

Аватар пользователя Vertex Vertex 20 декабря 2006 в 10:42

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