[Решено] Синтаксис ссылки в php для нуба

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

Аватар пользователя Айдар Айдар 7 ноября 2011 в 13:28

Люди добрые, подскажите, ибо как в php дуб.

В модуле есть ссылка вида:

<?php
$element
[$delta] = array('#markup' => l(t('Contact person by email'), 'email/' $object_type '/' 
$ids[0] . '/' $instance['field_name']));?>

Сформировавшаяся ссылка получается такой: /email/node/nid/field_email_address
Эту ссылку необходимо переделать в файле модуля на такую: /colorbox/form/email_mail_page_form?destination=/email/node/9/field_email_address&width=600&height=300 - все статично, кроме ID ноды.

Пробовал прописать тупо вот так:

<?php
$element
[$delta] = array('#markup' => l(t('Contact person by email'), 'colorbox/form/email_mail_page_form?destination=' 'email/' $object_type '/' $ids[0] . '/' $instance['field_name'] . '&width=500&height=500'));
?>

Но тогда спецсимволы '&', '=' заменяются на вида '%3F' и т.п.

Также не пойму, как в этом коде добавить к ссылке class="colorbox-load"

Спасибо!

Комментарии

Аватар пользователя Айдар Айдар 7 ноября 2011 в 14:04

Не думал, что они отличаются. Drupal 7.9.

Пробовал еще знаки '=', '&' вывести без кавычек и обособить точками, но так вообще эррорит.

Аватар пользователя SergO SergO 7 ноября 2011 в 18:08

Да, без знания PHP тяжело. Спешу вас огорчить, чтобы править код в модулях нужно не знать не только PHP, но ещё и английский язык, иначе как же вы будете документацию читать? ))
Вот, к примеру комментарий (прошу заметить: на странице документации, описывающий функцию построения ссылок), который полностью отвечает на ваш вопрос, как добавить параметры и атрибуты к ссылке:
http://api.drupal.org/api/drupal/includes--common.inc/function/l/7#comme...
Подсказка: к исходному коду (тот, что вы написали - не пойдёт) добавьте третий параметр - массив. С элементами 'attributes' и 'query'. А в них атрибуты и параметры соответственно.
Удачи.

Аватар пользователя Айдар Айдар 7 ноября 2011 в 19:31

И все-таки не могу додумать, что писать после этого:

<?php
l
(t('Contact person by email'), 'colorbox/form/email_mail_page_form', array('query' => 
array(
'destination' => '/email/node/')))
?>

Получилась ссылка /colorbox/form/email_mail_page_form?destination=/email/node/, а вот как дальше задать ей 'nid', какую переменную (ту, что в первой части после array) задать для вывода 'field_email_address' и, главное, что именно прописывать для вывода амперсанда ('&') - не пойму.

Аватар пользователя Айдар Айдар 7 ноября 2011 в 20:10

А 'nid' как бы выцепить? В оригинале он пишется в $path, а в массиве я его по-разному пробовал:
если подцепить его к '/email/node/', то выводится тупо текстом, а далее как начать писать, я не совсем понимаю.

Вероятно, есть еще переменные, кроме 'destination', 'attributes', 'fragment и 'query'.

Аватар пользователя Айдар Айдар 7 ноября 2011 в 20:29

Сделал так:

<?php
l
(t('Contact person by email'), 'colorbox/form/email_mail_page_form', array('query' => 
array(
'destination' => '/email/node/'$ids[0] .'/field_email_address')), 
array(
'attributes' => array('class' => array('colorbox-load'))))
?>

Но почему-то выводится только ссылка, а класс не применяется. Если поменять местами 2 этих массива, то, наоборот - класс применяется, а ссылка - нет.

Аватар пользователя SergO SergO 7 ноября 2011 в 22:50

Эко вы скобок да массивов наворотили! Надо было записывать "в столбик", как в примере, ссылку на который я давал. Тогда бы вы увидели, где ошибка:
ваш вариант:

<?php
l
(t('Contact person by email'), 'colorbox/form/email_mail_page_form'
  array(
'query' => 
          array(
'destination' => '/email/node/'$ids[0] .'/field_email_address')
        ), 
         array(
'attributes' => 
                  array(
'class' => array('colorbox-load'))
              )
  )
?>

правильный вариант (не проверял, на вскидку):

<?php
l
(t('Contact person by email'), 'colorbox/form/email_mail_page_form'
  array(
'query' => 
           array(
'destination' => '/email/node/'$ids[0] .'/field_email_address'), 
        
'attributes' => 
           array(
'class' => 'colorbox-load')
       )
  );
?>

- теперь видите, что в вашем варианте не так? Целых два лишних array выбросил!

Аватар пользователя Айдар Айдар 7 ноября 2011 в 23:26

Теперь вижу, Спасибо! Про лишний array я догадывался и убирал его, но вот вынести еще за одни скобки один из массивов не догадался. Smile

Но все равно больше не буду парить мозг знающим людям, т.к. худшее, что я мог ожидать, произошло - повалились ошибки а-ля Missing argument (аж целых 4). Видимо, на всплывающую страницу формы еще что-то передавать нужно было...

Поэтому придется таки потратить месяцы на азы php.

Еще раз всем огромное Спасибо за помощь!