aftamat4ik

Рейтинг
55
Регистрация
05.01.2012
Интересы
php + Drupal
программист недосамоучка

vandamme, Да да, так то оно так. про функцию arg(n) знаю. Но, вся проблема в том, что

site.ru/node/1?ajaxrequest- обращение фактически к странице site.ru/node/1(на которой может быть материал с текстом)

а site.ru/node/1/ajaxrequest - обращение к странице site.ru/node/1/ajaxrequest(на которой ничего нет или даже 404)

Не самому же делать вывод материала) Нет можно конечно через хук hook_menu сделать страничку, потом на ней возвращать статью способом:


if((arg(1)=="node") && is_numeric(arg(2))){
$node = node_load(arg(2));//загружаем материал
print render($node->title);//название материала
print render ($node->body['und'][0]['safe_value']);//текст материала
drupal_exit();
exit();
}

НО. А как же быть с такосономией, категориями там, например? Опять же модуль views - ндао писать с ним взаимодействие какое - то, ведь вдруг пользователь указал что на странице не больше 10 материалов, а модуль выводит все и сразу?)) Нее, это совсем бардак выходит. Вот если б узнать почему такие простые и элегантные строчки(выше в посте) не работают... И как их заставить работать - это бы прям как гора с плеч)

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


function mymodule_page_alter(&$page) {
if (isset($_GET['ajaxrequest'])) {
echo render($page['content']);
drupal_exit();
}
}

Хотя тут: http://drupal.org/node/1259412 написано что он работает.

вот строка оттуда url: $(this).attr('href') + '?ajaxrequest',

Я вообще не понимаю как отправить в друпал гет запрос. По моему личному мнению - это не возможно из за строки в .htacess

RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

то есть гет вообще не возможен, так как запрос вида site.ru/node/1?ajaxrequest

будет преобразован в вид:

site.ru/index.php?q=/node/1?ajaxrequest

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

Кто подскажет как заставить указанный выше хук работать? Благодарю)

Здравствуйте. Хотелось бы узнать как вывести в Drupal 7 полный текст материала(node). То есть мы имеем сторонний модль. В нем надо вывести описания и заголовки всех материалов. Как это сделать я и сам пойму, вы главное помогите мне просто получить материал.

Код

$node = node_load($vid);

echo $node->$content;

Почему-то не пашет.

И как по Урлу найти ид ноды. То есть если имеется материал по адресу /node/1 - как найти его ид? или 1 - и есть его ид?

спасибо)

bsyomov, Да да в курсе я что друпал сложная CMS, но уже что-то понимаю, метод проб и ошибок) Да и форум - живое общение все-же лучше тупой зубрежки, разве нет?

К слову еще один вопрос - Как передать в шаблон(tamplate) скажем GET запрос из скрипта. В общем имеется скрипт на jquery, как его подключать к друпалу прочитал тут: http://azbukaweb.ru/managing-javascript-in-drupal7

предположим в скрипте есть такой код(jquery):


$.ajax({
url: урл какой?,
type: "GET",
data: {sometext:txt}
}).done(
//действия
);

Вопрос - на какую страницу отправлять запрос? на index.php? Если бы движек я писал, или хотя-бы перепиливал, то на индекс.пхп бы сделал прием запроса, но как вы уже говорили друпал - сложная штука. Далее КАК получить переданную GET запросом переменную sometext внутри темы? В частности внутри функции template_preprocess_html(&$vars).

Будет ли работать такое:


//js
$.ajax({
url: "/index.php",
type: "GET",
data: {sometext:txt}
}).done(
//действия
);

//php
function templatename_preprocess_html(&$vars){
if($vars['page']['sometext']){
// требуемые действия...
}
}

что-то мне подсказывает что вышеуказанная зарисовка пахать не будет. Гугл рою как бульдозер - однако пока результат нулевой. Скажите как заставить друпал получить значение из скрипта внутрь функции templatename_preprocess_html, и не плохо было бы узнать как получить результат выполнения в $.ajax().done();

Кто делал похожее, подскажите куда копать хотя - бы. Буду очень признателен.

Alangasar, Во! Давно бы так !)) Спасибо за простой и понятный ответ. ато все апи читай, да апи читай))

В нескольких темах по Drupal фигурировала мысль: "не тем путём идёт развитие".

Верно, читал. Однако мое мнение по этому поводу совершенно иное - Drupal идет вперед слишком быстро. Например в 8 версии имеется идея отказа от поддержки эксплорера 6, из за почти полного перехода к html5. По идее я только ЗА эти изменения. Да и 7 версия мне нравится, хоть и не так удобна, и гораздо более запутана. Шаблоны для этого друпала я клепать не умею, зато умею менять дизайн стандартных шаблонов - мне этого хватает, все что угодно сверстаю.

Для работы с AJAX у Drupal тоже есть соответствующее API (http://api.drupal.org/api/drupal/inc...c/group/ajax/7). Пишите модуль и пользуйтесь, для своих нужд.

Благодарю.

---------- Добавлено 28.08.2012 в 11:49 ----------

В Drupal 7 появился новый AJAX Framework, который позволяет абстрагироваться от написания Javascript кода.

Нафига? Не привычнее когда js код отдельно, php - отдельно. Зачем делать реализацию js(еще и не факт что прямую) кода через php? Неужели вы знаете хоть одного веб девелопера, не знающего скрипты? Странные все таки эти создатели друпала...

____________________________

Любите музыку - тогда добро пожаловать: http://www.aftamat4ik.ru

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

Согласен. Однако требуется чтобы данная методика - навигация аякс, работала с Любыми(или почти любыми) друпал темами. Я бы написал модуль, но Как в модуле переопределить стандартную функцию вывода темы я не в курсе. И вообще оно возможно?О_0 что-то мне подсказывает что нет - ибо доступ к функциям ядра CMS из стороннего модуля - почитай кощунство. ДА и ООП не используется - не применимо наследование как понятие. Хотя если вы знаете как заставить Drupal заставить игнорировать встроенную функцию theme и обращаться к функции, определенной в модуле - было бы интересно узнать)

хм) А в чем соль то собственно? Вроде бы Drupal - опенсорцная CMS - а значит можно модифицировать ее так - как мне требуется. Я на джумле и не аткое проворачивал - выпилил как-то стандартный Com_content полностью(вплоть до выбора типа пункта меню) и заменил его на com_k2. Вроде работает отлично. Почему-бы и друпал так не перепилить, ведь лицензия это допускает. И не надо бояться копать внутренности. Там все раскомментировано)

Все, сам требуемое нашел :). Функция называется:

function theme($hook, $variables = array());

Файл - /includes/theme.inc

cтрока(у меня в нотепаде) - 751.

Имейте ввиду - это Drupal 7

В конце функции есть строка, возвращающая результат:

return $output;

Так вот с этим $output можно играться, например так:

$pos = strpos("<body>",$output);

$output=substr($pos,$output);
$output=$output."<p>1231313131231231</p></body></html>";

Тогда на главной и любой другой странице друпал покажет только текст 1231313131231231

А следовательно - Переменная $output - это и есть итоговый вид страницы сайта.

Скорее всего, вы по незнанию Drupal неправильно ставите задачу. Вам совершенно не нужно это самое место. =) Если вам нужно изменить вывод чего-либо, это можно сделать в слое темизации, с помощью различных preprocess или шаблонов...

Нет. Точнее я не хочу так делать. Да я знаю что так можно - но в текущий момент - не нежно.

Давайте попытаюсь разъяснить вам в чем основной "прикол" моей задачи.

Прикол в Ajax. Нет не в формах, к которым все уже 1тыс раз обращались а полностью в аякс подгрузке нодов - статей, при этом ссылка должна указывать на нединамическую(реальную) копию страницы Но при клике на нее ссылка посредством js кода преобразуется в хеш.

То есть имеется ссылка site.ru/node/animals - она указывает на страницу которая загрузится при клике на ссылку, если у юзера не включен js, если же js включен - ссылка переделается в вид site.ru/#/node/animals с помошью яваскрипта, а на сервер будет отправлен запрос, например такого вида:

POST: load:/node/animals

на сервере на странице index.php будет принят параметр $_POST['load'] и в ответ передан только блок, в котором находится статья,а не вся страница(трафик экономицо). Этот блок посредством js же, будет вставлен в слой где статьи обычно выводятся(сначала очистим слой, а потом добавим новый текст).

________________

По ходу теперь все кажется вам еще запутаннее. Ну не умею я объяснять)

---------- Добавлено 27.08.2012 в 11:58 ----------

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

К стати если поиграться с переменной $output - эти теги можно закрыть. Легко хД

АА все все все)) Понял спасибо большое)) В общем если интересно написал так:


RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^audio/(.+\.mp3)$ urlencode.php?file=$1 [L]
RewriteCond $1 !^(index\.php|images|robots\.txt|public)
RewriteCond %{REQUEST_URI} !\.(/|\.css|\.js|\.jpg|\.gif|\.png)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L,QSA]

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

Всего: 143