Как правильно сделать ссылку

Вс, 02/07/2017 - 20:21

Всем привет
как правильно сделать кнопку на выполнение кода в модуле, например

<?php
$fg=db_delete('field_data_field_test');
$fg->execute();

без создания блока, формы, другой страницы, просто кнопка?
Или только form submit?

0 Спасибо

Комментарии

Аватар пользователя bumble
3 недели 1 день назад bumble #
Olegars написал:
как правильно

и

Olegars написал:
без создания блока, формы, другой страницы

взаимоисключающие понятия.

Кнопка - элемент формы. Соответственно, без формы работать ей некуда.

Вы, лучше, опишите что сделать пытаетесь. Подход у Вас похоже не правильный к задаче.

0 Спасибо
Аватар пользователя Olegars
3 недели 1 день назад Olegars #

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

0 Спасибо
Аватар пользователя bumble
3 недели 1 день назад bumble #

Делайте AJAX-ссылку.

0 Спасибо
Аватар пользователя Olegars
3 недели 1 день назад Olegars #

а примера не найдется?

0 Спасибо
Аватар пользователя bumble
3 недели 1 день назад bumble #

Здесь пример реализации кнопки вызова модератора (из этого проекта).

0 Спасибо
Аватар пользователя Olegars
2 недели 6 дней назад Olegars #

не пойму где туплю, так срабатывает

$items['node/10'] = array(
    'page callback' => 'generate',
    'page arguments' => array(1),
    'access callback'  => TRUE,
  );
return $items;
  }

а так нет
$items['node/%']

0 Спасибо
Аватар пользователя bumble
2 недели 6 дней назад bumble #

Путь 'node/%' определяется в стандартном модуле node ( 'node/%node' ).

Вам нужно правильнее продумать архитектуру.

0 Спасибо
Аватар пользователя Olegars
2 недели 6 дней назад Olegars #

мне и нужно что бы колбек сработал в существующей странице когда на нее заходишь
то-есть, заходишь на страницу, например /node/100
срабатывает

 $items['node/%'] = array(
    'page callback'     => 'dru_claim_node',
    'file'              => 'dru_claim.pages.inc',
    'page arguments'    => array(2, 3, 4),
    'access arguments'  => array('create claim'),
    'delivery callback' => 'ajax_deliver',
    'type'              => MENU_CALLBACK,
);
0 Спасибо
Аватар пользователя ХулиGUN
2 недели 6 дней назад ХулиGUN #

1. Что мешает просто на странице вызвать аякс запрос с параметром nid $.get('unique_url/<?php echo $node->nid; ?>')
2. Вы определитесь сперва, что вам нужно - аякс урл или совершать какие нить действия при посещении ноды пользователем?

0 Спасибо
Аватар пользователя Olegars
2 недели 5 дней назад Olegars #
Не используйте матерные или агрессивные слова написал:
Что мешает просто на странице вызвать аякс запрос с параметром nid

Ни что не мешает, я и спрашиваю "как правильно сделать кнопку (ссылку) на выполнение кода в модуле" так как не знаю как это сделать.
А нужно мне вот что: на странице определенного типа, скажем "Заказы" нужно показать кнопку(ссылку), типа как Subscribe, что бы при нажатии на нее выполнился код, при этом пользователь остался на текущей странице.
Ваш вариант не подходит, нужно из модуля все это сделать, из шаблона как то не то.
P.S. Ваш ник цензура не пропускает....

0 Спасибо
Аватар пользователя fairrandir
2 недели 5 дней назад fairrandir #
<?php
/*
 * Implements hook_menu().
 */
function custom_forum_integration_menu() {
  
$items = array();

  $items['recommended.json'] = array(
    
'title' => t('Recommended clinics'),
    
'description' => 'Provides recommended clinics json data',
    
'page callback' => 'custom_forum_integration_recommended_json',
    
'access callback' => TRUE,
    
'type' => MENU_CALLBACK,
  );

  return $items;
}

function custom_forum_integration_recommended_json() {
  
$output = array();

  if ($cache cache_get('custom_forum_integration_recommended_json')) {
    
$output $cache->data;
  }

  if (empty($output)) {
    
// some logic
    
cache_set('custom_forum_integration_recommended_json'$result'cache'time() + (24 60 60));
  }

  return drupal_json_output($output);
}
?>

Всё очень просто. Определяете hook_menu, указываете callback-функцию, в ней фигачите свою логику. Два момента:
1. access callback - обязательно укажите, особенно, если планируете db_delete делать.
2. На кнопку/ссылку ставите свой js-код - по клику послать POST на данный урл и таки всё пучком будет.

P.S. Всё для примера, но попытайтесь заставить работать это всё дело самостоятельно.

0 Спасибо
Аватар пользователя Olegars
2 недели 5 дней назад Olegars #

это все понятно, я так и пытаюсь сделать, не понятен вот этот момент:
$items['recommended.json']
эта строка определяет страницу, на которой все это хозяйство сработает, правильно?
Вот мне нужно что бы сработало на определенных страницах, типа $items['заказ/%'].

0 Спасибо
Аватар пользователя ХулиGUN
2 недели 5 дней назад ХулиGUN #
Olegars написал:
P.S. Ваш ник цензура не пропускает....

Я знаю)))

Olegars написал:
Ваш вариант не подходит, нужно из модуля все это сделать, из шаблона как то не то.

Olegars написал:
нужно показать кнопку(ссылку)

Кнопку тоже модулем рисовать собираетесь?
Я показал Вам пример, что необязательно использовать в своём модуле роут node/% вот и всё.

Olegars написал:
эта строка определяет страницу, на которой все это хозяйство сработает, правильно?

Эта срока определяет роут, обращаясь к которому, сработает логика из калбека. Всё.
Вы не верно понимаете написанные вами же конструкции и механику request/response в общем.
Если уж совсем всё хотите из модуля сделать без правки шаблонов, то вашему модулю не хватает ещё, например hook_node_view() в котором описать вашу кнопку и drupal_add_js, чтоб подключить отправку аякс запроса по собитю клика по вашей кнопке

0 Спасибо
Аватар пользователя Olegars
2 недели 5 дней назад Olegars #

ну ладно, до кнопки я еще не дошел,
"Эта срока определяет роут, обращаясь к которому, сработает логика из калбека"
ват на этом моменте туплю... не срабатывает калбек когда обращаюсь к роуту.
вот так работает
$items['node/100']
вот так нет
$items['node/%']

0 Спасибо
Аватар пользователя ХулиGUN
2 недели 5 дней назад ХулиGUN #
Olegars написал:
ват на этом моменте туплю... не срабатывает калбек когда обращаюсь к роуту.

вот так работает

$items['node/100']

вот так нет

$items['node/%']

Уже писали

bumble написал:
Путь 'node/%' определяется в стандартном модуле node ( 'node/%node' ).

0 Спасибо
Аватар пользователя Olegars
2 недели 5 дней назад Olegars #

а как тогда сделать шаблон для $items['node/ххх']?
никак логику не пойму

0 Спасибо
Аватар пользователя ХулиGUN
2 недели 5 дней назад ХулиGUN #
Olegars написал:
а как тогда сделать шаблон для $items['node/ххх']?

Накой? Вам сказали же, что этот адрес ЗАНЯТ!!! Чем не устраивает $items['abracadabra/%']?
Либо учите мат.часть, либо заканчивайте прикидываться дурачком

0 Спасибо