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 идет вперед слишком быстро. Например в 8 версии имеется идея отказа от поддержки эксплорера 6, из за почти полного перехода к html5. По идее я только ЗА эти изменения. Да и 7 версия мне нравится, хоть и не так удобна, и гораздо более запутана. Шаблоны для этого друпала я клепать не умею, зато умею менять дизайн стандартных шаблонов - мне этого хватает, все что угодно сверстаю.
Благодарю.---------- Добавлено 28.08.2012 в 11:49 ----------
Нафига? Не привычнее когда 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 - это и есть итоговый вид страницы сайта.
Нет. Точнее я не хочу так делать. Да я знаю что так можно - но в текущий момент - не нежно.
Давайте попытаюсь разъяснить вам в чем основной "прикол" моей задачи.
Прикол в 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 ----------
К стати если поиграться с переменной $output - эти теги можно закрыть. Легко хД
АА все все все)) Понял спасибо большое)) В общем если интересно написал так:
RewriteEngine onRewriteCond %{REQUEST_FILENAME} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^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} !-fRewriteCond %{REQUEST_FILENAME} !-dRewriteRule ^(.*)$ index.php?/$1 [L,QSA]
Всем огромное спасибо!!