Drupal: Как вернуть только контент, а не весь макет? - PullRequest
1 голос
/ 22 сентября 2009

Я использую модуль Thickbox в Drupal. Тип, который я использую, - это запрос AJAX через Thickbox, и я передаю URL, чтобы получить только «контент».

Как я могу показать только возвращенный контент без основных ссылок и других вещей, таких как боковая панель в drupal? В данный момент Thickbox также возвращает основные ссылки.

Это URL, который я передаю: http://cec5/bhutan/?q=en/ceccr/subscribe/59&destination=og

Мне нужно только получить «возвращенный контент» из функции return_me. Например, мой код:

<?php
function cec_mypage_menu($may_cache) {
    $items = array();
    $items[] = array(
        'path' => 'cec_mypage',
        'title' => t('CEC My Page'),
        'access' => TRUE,
        'callback' => 'return_me',
        'type' => MENU_CALLBACK,
    );
    return $items;
}

function return_me() {
    return 'Only return this text and nothing more. No primary links, other layouts and stuff.<br />';
}
?>

Как я могу это сделать?

Заранее спасибо.

Ура, Mark

Ответы [ 6 ]

3 голосов
/ 22 сентября 2009

попробуйте использовать echo / print.

Для запросов Ajax у меня та же проблема, и я просто печатаю содержимое, а не возвращаю его.

function return_me() {
    print 'Only return this text and nothing more. No primary links, other layouts and stuff.<br />';
}
2 голосов
/ 08 сентября 2014

Полагаю, вам это нужно для использования AJAX.

Вот что я делаю, чтобы выполнить задачу:

/**
 * Implements hook_page_delivery_callback_alter().
 */
function YOUR_MODULE_page_delivery_callback_alter(&$callback) 
{
    // If is ajax simply echo the result. Otherwise pass to the default function.
    if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' &&
       in_array($callback, array('boost_deliver_html_page', 'drupal_deliver_html_page')))
        $callback = 'YOUR_MODULE_ajax_deliver';
}

/**
 * Print the content if we have an ajax request
 */
function YOUR_MODULE_ajax_deliver($result) 
{
    if (is_array($result))
        $result = json_encode($result); // or render() dependending on what you need.

    echo $result;
    return;
}
0 голосов
/ 08 сентября 2014

По умолчанию функции menu_hook возвращают содержимое в слой темы drupal, который будет тематическим. Если вы хотите остановить этот процесс и просто вернуть выходные данные функций, вы можете отобразить содержимое, а затем остановить процесс drupal.

echo '<p>what I want to print</p>';
die();

Если вы пытаетесь вернуть какой-либо контент с помощью вызова ajax, желательно вернуть контент в форме json:

  drupal_json_output($data);
  drupal_exit();

Тогда в вашем javascript используйте $ .getJson или что-то подобное, чтобы проанализировать json и поместить его на страницу, где вы хотите.

Кроме того, если вам необходимо прикрепить поведение Javascript для drupal после добавления контента, обязательно вызовите «Drupal.attachBehaviors» после размещения контента.

0 голосов
/ 30 апреля 2011

спасибо!

для Drupal 7 я должен был изменить:

(...)

function ajax_node_get_node($nid) {
     $n = node_load($nid, NULL, FALSE);
     print drupal_render(node_view($n,'full'));
    }

    function ajax_node_get_node_teaser($nid) {
     $n = node_load($nid, NULL, FALSE);
     print drupal_render(node_view($n, 'teaser'));
    }

/ * http://api.drupal.org/api/drupal/modules--node--node.module/function/node_view / *

/ * Мне пришлось создать каталог «ajax-node» sites / all / modules / mymodule, поместить предыдущий скрипт в ajax-node.module и создать файл ajax-node.info (см. Ниже), прежде чем включать модуль в админ панель.

ajax-node.info:

description = "A module to fetch a node for ajax purposes."
core = "7.x"
version = "7.x-1.0 alpha"
package = "AJAX"

* /

Затем вы можете получить доступ к содержимому с помощью http: / example / q = ajax-node / get / node / 59

0 голосов
/ 25 сентября 2009

Чтобы сделать нечто подобное, я создал небольшой модуль:

<?php
/**
 * Implementation of hook_menu().
 */
function ajax_node_menu() {
  $items['ajax-node/get/node'] = array(
    'page callback' => 'ajax_node_get_node',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK,

    );

  $items['ajax-node/get/node-teaser'] = array(
    'page callback' => 'ajax_node_get_node_teaser',
    'access arguments' => array('access content'),  
    );

  return $items;
}

function ajax_node_get_node($nid) {
 $n = node_load($nid, NULL, FALSE);
 print node_view($n);
}

function ajax_node_get_node_teaser($nid) {
 $n = node_load($nid, NULL, FALSE);
 print node_view($n, TRUE);
}

?>

URL для контента будет примерно таким: http://www.example.com/q=en/ajax-node/get/node/59

0 голосов
/ 22 сентября 2009

Я думаю, что это сработает, если вы сделаете печать, а затем умрете (), чтобы Drupal не смог добавить что-либо еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...