Получить значение из js

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

Аватар пользователя abutan abutan 27 мая 2015 в 1:09

Здравствуйте всем.
У меня такая задача - есть два блока с анонсами новостей, на главной и на странице новостей. По клику на "подробней" клиент должен попадать на страницу новостей, где будет загружен текст той новости по которой он кликнул, ну или, если он уже в новостях, то соответственно новость должна загрузиться.
Сделал соответствующую вьюху, вывел в ней поле nid страницы и перезаписал ее результат в такой вид:
p class = "node-load" data-href = "[nid]">Подробнее

Комментарии

Аватар пользователя sas@drupal.org sas@drupal.org 27 мая 2015 в 11:44

Логично Вы попробуйте вызвать на своем сайте страницу - href = '/sites/all/modules/my_module/my_module.module';

href нужна страница типа /node/6 + селектор контейнера откуда брать текст новости, для упрощения сразу менять
$.post на $(container).load();
см. http://api.jquery.com/load/

Аватар пользователя gun_dose gun_dose 27 мая 2015 в 15:36

зачем городить такой огород, если можно просто вызвать вьюсом ссылку на ноду и переписать её текст, как "Подробнее"?

Аватар пользователя abutan abutan 27 мая 2015 в 21:41

Спасибо за подсказку. Я понял в чем проблема.
Но вот не могу понять как правильно сделать. Мне же надо получить значение в свой модуль, чтобы подставлять его в функцию node_load для загрузки нужной новости.
Как это правильно сделать?

Аватар пользователя sg85 sg85 27 мая 2015 в 21:59

Ничего непонятно, сделали бы обычную ссылку, по необходимости добавили бы к ней класс, далее на этот класс навесили событие click, при котором бы грузился контент через jQuery load, как результат - аякс для обычных пользователей и переход для роботов, или стоит задача не пускать роботов? так там еще проще, есть robots.txt

Аватар пользователя gun_dose gun_dose 28 мая 2015 в 9:12

если цеплять друпаловскую node_load, то нужно делать нормальный модуль с поддержкой друпаловского ajax api. Как вариант, поискать в репозитории, вполне вероятно, что кто-то уже сделал.

Аватар пользователя sas@drupal.org sas@drupal.org 28 мая 2015 в 11:01

"sg85" wrote:
Ничего непонятно, сделали бы обычную ссылку, по необходимости добавили бы к ней класс, далее на этот класс навесили событие click,

По логике он так и сделал, только по другому реализовал

Аватар пользователя abutan abutan 31 мая 2015 в 23:57

Здравствуйте.
Куда получать результат post запроса я понял. Создал через hook_menu страницу для этого. В callback функции написал
if ($_POST['nid']) {
$nid = $_POST['nid'];
$node= node_load($nid);
$node_array = node_view($node);
$content = render($node_array);

В js файле переписал post запрос
$.post(
href,
{nid: nid},
function(data){
$('.block-exnews').html(data);
});

Оно вроде бы заработало, но как то очень ущербно (какой писатель, такой и результат).
Во первых переход на другую страницу, что прописан у меня в js функции не дает выполниться $('.block-exnews').html(data) . Оно начинает выполняться, но по окончании загрузки страницы выводится контент, что у меня прописан по умолчанию. А там у меня стоит выборка из бд nid последней новости и через node_load вывод новости с этим nid.

Ну я решил для начала настроить работу хотя без перехода с другой страницы, т.е. находясь уже на нужной мне странице. Убрал из js строчки отвечающие за перенаправление.
Как бы заработало, но как я сказал очень ущербно. В нужный блок загружается не только нужный материал, а вся страница целиком, вместе с шапкой, меню, подвалом.
Подскажите пожалуйста как правильно написать, чтобы post запрос выполнялся после того как страница загрузится полностью.
И что мне нужно изменить в коде, чтобы загружалась не вся страница полностью, а только сама статья с заголовком.
Заранее благодарен.

Аватар пользователя abutan abutan 10 ноября 2015 в 11:50

Здравствуйте уважаемые форумчане.
Я по прежнему прошу помощи.
Суть такова. По клику на элемент мне нужно в другом блоке получить содержание ноды. В атрибуте data-href элемента содержится nid необходимой ноды.
Я изменил свой модуль. В функцию формирующую контент блока я добавил аргумент module_block_content($click_nid = NULL) дальше идет выборка из бд по типу, языку, времени и добавлено
if(!is_null($click_nid)){$query -> condition('nid', $click_nid);} ну и через node_load вывожу материал.

В js функции получаю этот самый nid и отправляю его постом $.post(href, {nid: nid}, function(data){
console.log(nid);}); return false;

Ну естественно страница для приема результатов post создана через hook_menu. В колбэке беру из post пришедшее значение (оно приходит, в консоли пишется результат) и пытаюсь перезапустить функцию выводящую контент блока только уже с ненулевым аргументом, при помощи ajax. То есть я пишу $click_nid = $_POST['nid'];
$commands[] = ajax_command_html('#selector', .module_block_content($click_nid));

Ну и конечно возвращаю массив команд в конце.
Ничего не происходит.
Вот и прошу подсказать где же я делаю не так. Или логика должна быть не такой?
Заранее благодарен.