patterns google php drupal drupal-views

php - google - mostrando una vista de Drupal sin una plantilla de página a su alrededor



view module drupal (15)

Asumiendo que estás en Drupal 6, la forma más fácil de hacer esto es poner una llamada a phptemplate_views_view_unformatted_VIEWNAME en template.php (supone que tu vista no está formateada; si es otra cosa, como una lista, utiliza la función de tema apropiada). Los resultados de la vista del tema en esta llamada de tema entonces, en lugar de devolver los resultados como lo haría normalmente, imprimirlos y devolver NULL . Esto generará el HTML directamente.

PD: asegúrese de borrar su caché (en / admin / settings / performance) para ver este trabajo.

Me gustaría mostrar una vista de Drupal sin la plantilla de página que normalmente la rodea; solo quiero el contenido HTML sin formato de los nodos de la vista.

Esta vista se incluiría en otro sitio que no sea de Drupal.

Espero tener que hacer esto con varias vistas, por lo que una solución que me permita configurarlas de forma rápida y fácil sería la mejor. Preferiría no tener que crear un archivo .tpl.php cada vez que lo necesite. incluir una vista en alguna parte.


Basado en la respuesta de Philadelphia Web Design (gracias) y en Google ( http://drupal.org/node/957250 ), aquí está lo que funcionó para mí en Drupal 7 para obtener las páginas seleccionadas sin la plantilla:

function pixture_reloaded_preprocess_page(&$vars) { if ( isset($_GET[''vlozeno'']) && $_GET[''vlozeno''] == 1 ) { $vars[''theme_hook_suggestions''][] = ''page__vlozeno''; } }

en lugar de phptemplate, en D7 tiene que haber el name_of_your_theme en el nombre de la función. Además, tuve que poner dos guiones bajos __ en la variable php con el nombre del archivo, pero el nombre del archivo de la plantilla real necesita dos guiones:

contenido de la página - vlozeno.tpl.php:

<?php print render($page[''content'']); ?>

La salida, sin embargo, todavía tiene muchas envolturas y referencias de tema CSS. No estoy seguro de cómo generar datos totalmente sin formato ...


Basado en la respuesta de Ufonion Labs, pude eliminar por completo todo el contenido HTML del contenido de la página en Drupal 7 implementando hook_preprocess_page y hook_preprocess_html en my themes template.php, como este:

function MY_THEME_preprocess_page(&$variables) { if (isset($_GET[''response_type'']) && $_GET[''response_type''] == ''embed'') { $variables[''theme_hook_suggestions''][] = ''page__embed''; } } function MY_THEME_preprocess_html(&$variables) { if (isset($_GET[''response_type'']) && $_GET[''response_type''] == ''embed'') { $variables[''theme_hook_suggestions''][] = ''html__embed''; } }

Luego agregué dos plantillas a mi tema: html--embed.tpl.php :

<?php print $page; ?>

y page--embed.tpl.php :

<?php print render($page[''content'']); ?>

Ahora cuando abro una página de nodo, como http://example.com/node/3 , veo la página completa como de costumbre, pero cuando agrego el parámetro response_type, como http://example.com/node/3?response_type=embed , solo obtengo el <div> con el contenido de la página para que se pueda incrustar en otra página.



Estaba buscando una manera de extraer datos de nodo a través de ajax y se me ocurrió la siguiente solución para Drupal 6. Después de implementar los cambios a continuación, si agrega ajax = 1 en la URL (por ejemplo, mysite.com/node/1?ajax= 1), obtendrá solo el contenido y ningún diseño de página.

en el archivo template.php para tu tema:

function phptemplate_preprocess_page(&$vars) { if ( isset($_GET[''ajax'']) && $_GET[''ajax''] == 1 ) { $vars[''template_file''] = ''page-ajax''; } }

luego crea page-ajax.tpl.php en tu directorio de temas con este contenido:

<?php print $content; ?>


Me gusta el módulo Drupal. BUt, aquí hay otra manera.

copie page.tpl.php en su carpeta de temas en un nuevo archivo llamado page-VIEWNAME.tpl.php, donde VIEWNAME es el nombre de la vista que se puede leer en la máquina.

Luego edite la página-VIEWNAME.tpl.php para que se adapte.


Otra forma de hacerlo que me resulta muy útil es agregar un elemento de menú con una función de devolución de llamada de página que no devuelve una cadena:

Ejemplo:

/** * Implementation of hook_menu. */ function test_menu(){ $items[''test''] = array ( /* [...] */ ''page callback'' => ''test_callback'', /* [...] */ ); return $items; } function test_callback() { // echo or print whatever you want // embed views if you want // DO NOT RETURN A STRING return TRUE; }

- Actualización

Sería mucho mejor usar exit(); en lugar de return TRUE; (Ver comentario).


Oye, aquí hay otra forma de hacerlo:

1) Descargue e instale Views Bonus Pack ( http://drupal.org/project/views_bonus ) 2) Cree una vista de visualización "Feed" y use el estilo "XML" (o algo que crea que se ajusta mejor a sus necesidades). 3) Si no está satisfecho con la salida XML estándar, puede cambiarla ajustando la plantilla para la vista. Compruebe la configuración del "tema" para obtener sugerencias de nombres de plantilla alternativos para esta vista específica (por lo que aún tendrá la salida XML predeterminada para usar en el futuro).

¡Buena suerte! // Johan Falk, NodeOne, Suecia


Para otros que pueden acceder a esta página, si solo estás trabajando con devoluciones de llamadas estándar (no necesariamente visitas), esto es fácil. En su función de devolución de llamada, en lugar de devolver el código para procesar dentro de la página, use la función ''imprimir''.

Por ejemplo:

function mymodule_do_ajax($node) { $rval = <<<RVAL <table> <th> <td>Data</td> <td>Data</td> <td>Data</td> </th> <tr> <td>Cool</td> <td>Cool</td> <td>Cool</td> </tr> </table> RVAL; //return $rval; Nope! Will render via the templating engine. print $rval; //Much better. No wrapper. }

¡Aclamaciones!


Probablemente haya varias formas de evitar esto, sin embargo, lo más fácil puede ser simplemente establecer su propio tema personalizado, y tener el page.tpl.php simplemente vacío, o algunos divs aleatorios

// page.tpl.php <div id="page"><?php print $content ?></div>

este método básicamente permitiría mostrar node.tpl.php (o cualquiera de las vistas de formulario de drupal, etc.) y sería una forma fácil de evitar la modificación del núcleo, o tener que modificar el registro del tema para evitar mostrar page.tpl .php en primer lugar.

editar : ver comentarios

ok, jugué un poco con las vistas, parece que toma el control y construye su propio "node.tpl.php" (en cierto sentido) para visualizar dentro de "page.tpl.php". a primera vista, mi intuición sería conectarme a theme_registry_alter() .

cuando mira una página de vistas, tiene acceso a montones de información aquí, así como a las rutas / archivos page.tpl.php. como tal, haría algo como:

function modulejustforalteration_theme_registry_alter(&$variables) { if (isset($variables[''views_ui_list_views'']) ) { // not sure if that''s the best index to test for "views" but i imagine it''ll work // as well as others $variables[''page''][''template''] = ''override_page''; } }

esto debería permitirle utilizar una plantilla "override_page.tpl.php" en su tema actual en la que puede eliminar todo lo que desee (como mi primera respuesta anterior).

unas pocas cosas:

  • como dije, no estoy seguro si views_ui_list_views está siempre disponible para comprobar, pero parece que debería establecerse si estamos viendo una vista
  • puede modificar las theme paths de theme paths de la matriz de page si lo prefiere (para cambiar la ubicación de drupal buscará page.tpl.php, en lugar de cambiar el nombre por completo)
  • no parece haber identificadores para esta vista específica, por lo que este método podría ser un enfoque de "todas las vistas serán eliminadas". si necesita quitar el page.tpl.php solo para una vista específica, quizás enganchar en template_preprocess_page() sea ​​una mejor idea.

Sé que esta pregunta ya ha sido respondida, pero quería agregar mi propia solución que utiliza elementos de la respuesta del diseño web de Filadelfia (PWD) y utiliza hook_theme_registry_alter, como lo sugiere Owen. Con esta solución, puede cargar la plantilla directamente desde un módulo personalizado.

Primero, agregué raw.tpl.php a una carpeta ''templates'' recién creada dentro de mi módulo. El contenido de raw.tpl.php es idéntico al de la página de PWD: ajax.tpl.php:

<?php print $content; ?>

Luego, implementé hook_preprocess_page en mi módulo de la misma manera que PWD (excepto que modifiqué el parámetro $ _GET y actualicé la referencia del archivo de la plantilla:

function MY_MODULE_NAME_preprocess_page(&$vars) { if ( isset($_GET[''raw'']) && $_GET[''raw''] == 1 ) { $vars[''template_file''] = ''raw''; } }

Finalmente, implementé hook_theme_registry_alter para agregar el directorio ''templates'' de mi módulo al registro de temas (basado en http://drupal.org/node/1105922#comment-4265700 ):

function MY_MODULE_NAME_theme_registry_alter(&$theme_registry) { $modulepath = drupal_get_path(''module'',''MY_MODULE_NAME''); array_unshift($theme_registry[''page''][''theme paths''], $modulepath.''/templates''); }

Ahora, cuando agregue? Raw = 1 a la ruta URL de la vista, usará la plantilla especificada dentro de mi módulo.


Si entiendo tu pregunta, quieres tener nodos que contengan todo el HTML de una página, desde DOCTYPE hasta </ ​​HTML>. Lo que haría sería crear un tipo de contenido para esos nodos - "fullhtml" como su nombre legible por máquina - y luego crear una plantilla de nodo para ello llamada node-fullhtml.tpl.php. No puedes simplemente volcar los contenidos del nodo, ya que han sido desinfectados con HTML. node.fullhtml.tpl.php sería literalmente esto:

echo htmlspecialchars_decode($content);

Entonces necesitarás una forma de anular la página estándar.tpl.php. Creo que lo que podrías hacer es estar en la parte superior de tu página. Tpl.php verifica el tipo de contenido de $ node y rescata si es fullhtml. O bien, establezca una variable global en node-fullhtml.tpl.php que buscaría page.tpl.php.

No soy un experto en Drupal, pero así es como lo haría. Estoy hablando mal del brazo, así que ten cuidado con los demonios en los detalles.



Una forma simple de mostrar el contenido de un tipo de contenido especial que desea mostrar sin todo el contenido de la page.tpl.php :
Agregue el siguiente fragmento a su archivo template.php :

function mytheme_preprocess_page(&$vars) { if ($vars[''node''] && arg(2) != ''edit'') { $vars[''template_files''][] = ''page-nodetype-''. $vars[''node'']->type; } }

Agregue un page-nodetype-examplecontenttype.tpl.php a su tema, como su page.tpl.php pero sin las cosas que no desea mostrar y con print $content en el cuerpo.


Veo que ya se ha ido y se ha convertido en un módulo, por lo que puede que ya no ayude, pero es bastante fácil obtener una vista para exponer un feed rss, que podría ser una forma más fácil de acceder al contenido, especialmente si lo desea para incluirlo en un sitio diferente.