l'affichage d'un Drupal point de vue, sans un modèle de page autour d'elle
Je voudrais afficher un Drupal vue sans le modèle de page qui, normalement, entoure - je veux juste la plaine du contenu HTML de la vue de nœuds.
Ce point de vue, serait inclus dans un autre, non-site Drupal.
J'attends d'avoir à faire avec un certain nombre de vues, donc une solution qui me permet de définir rapidement et facilement serait le meilleur - je préférerais ne pas avoir à en créer un .tpl.php fichier à chaque fois que j'ai besoin d'inclure une vue quelque part.
Vous devez vous connecter pour publier un commentaire.
Je cherchais un moyen de tirer les nœuds de données via ajax et est venu avec la solution suivante pour Drupal 6. Après avoir mis en œuvre les modifications ci-dessous, si vous ajoutez ajax=1 dans l'URL (par ex. mysite.com/node/1?ajax=1), vous aurez seulement le contenu et pas de mise en page.
dans le template.php fichier de votre thème:
puis créer page-ajax.tpl.php dans votre répertoire de thème avec ce contenu:
Basé sur la réponse de Ufonion Labs j'ai été en mesure d'éliminer complètement le code HTML de sortie autour de la page contenu dans Drupal 7 par la mise en œuvre de deux
hook_preprocess_page
ethook_preprocess_html
dans mes thèmes template.php comme ceci:Puis j'ai ajouté deux modèles pour mon thème:
html--embed.tpl.php
:et
page--embed.tpl.php
:Maintenant quand j'ouvre une page sur les nœuds, comme http://example.com/node/3, je vois la page complète comme d'habitude, mais lorsque j'ajoute le response_type paramètre, comme http://example.com/node/3?response_type=embed, je seulement obtenir le
<div>
avec le contenu de la page de sorte qu'il peut être intégré dans une autre page.Je sais que cette question a déjà été posée, mais je voulais ajouter ma propre solution qui utilise des éléments de Philadelphie Web Design (PWD) réponse et utilise hook_theme_registry_alter, comme suggéré par Owen. Grâce à cette solution, vous pouvez charger le modèle directement à partir d'un module personnalisé.
Tout d'abord, j'ai ajouté raw.tpl.php vers un nouveau "templates" dossier à l'intérieur de mon module. Le contenu de raw.tpl.php sont identiques à la DDT de l'page-ajax.tpl.php:
Ensuite, j'ai mis en place hook_preprocess_page dans mon module de la même manière que PWD (sauf que j'ai modifié le $_GET paramètre et mis à jour le fichier de modèle de référence:
Enfin, j'ai mis en place hook_theme_registry_alter pour ajouter mon module de "templates" annuaire sur le thème de registre (basé sur http://drupal.org/node/1105922#comment-4265700):
Maintenant, quand je l'ajouter ?raw=1 à l'affichage du chemin d'accès d'URL, il utilisera le modèle spécifié à l'intérieur de mon module.
Pour les autres qui peuvent frapper cette page, si vous êtes juste à travailler avec la norme rappels (pas nécessairement le point de vue), c'est facile. Dans votre fonction de rappel, au lieu de retourner le code de rendre l'intérieur de la page, utilisez la fonction "imprimer" de la fonction.
Par exemple:
Cheers!
Une autre façon de faire que je trouve très pratique, c'est pour ajouter un élément de menu avec une page de rappel de la fonction qui ne retourne pas une chaîne de caractères:
Exemple:
-- Mise à jour
Il serait beaucoup mieux d'utiliser
exit();
au lieu dereturn TRUE;
(voir le commentaire).ctools_page_alter
va supposer que c'est un tableau).Hey, voici encore une autre façon de le faire:
1) Télécharger et installer des points de Vue Bonus Pack (http://drupal.org/project/views_bonus)
2) Créez une Vue sur l'affichage de "Nourrir" et utiliser le style "XML" (ou quelque chose que vous pense correspond mieux à vos besoins).
3) Si vous n'êtes pas satisfait à la norme XML de sortie, vous pouvez la changer en ajustant le modèle de la vue. Vérifier que le "thème" paramètres afin d'obtenir des suggestions de rechange pour les noms de modèle pour ce point de vue spécifique (de sorte que vous aurez toujours le XML par défaut en sortie à gauche pour une utilisation future).
Bonne chance!
//Johan Falk, NodeOne, Suède
Basé sur la réponse de Philadelphie Web Design (merci) et quelques recherches sur google ( http://drupal.org/node/957250 ), voici ce qui a fonctionné pour moi dans Drupal 7 pour obtenir choisi les pages qui s'affichent sans le modèle:
au lieu de phptemplate, en D7, il y a la name_of_your_theme dans le nom de la fonction. Aussi, j'ai dû mettre deux caractères de soulignement __ dans la variable php avec le nom de fichier, mais le nom de fichier du modèle a besoin de deux tirets --
contenu de page--vlozeno.tpl.php :
La sortie, cependant, a toujours eu beaucoup de l'emballage et du thème CSS références. Pas sûr de la façon de sortie totalement unthemed de données...
En supposant que vous êtes dans Drupal 6, la meilleure façon de le faire est de mettre un
phptemplate_views_view_unformatted_VIEWNAME
appel danstemplate.php
(ce qui suppose que votre vue n'est pas formaté - si c'est autre chose, une liste dire, utiliser le thème de la fonction). Thème de l'affichage des résultats dans ce thème de l'appel, puis, au lieu de renvoyer les résultats comme vous le feriez normalement, les imprimer et retournerNULL
. Ceci affichera le code HTML directement.PS - assurez-vous de vider votre cache (dans /admin/settings/performance) pour voir ce travail.
il y a probablement un certain nombre de façons de contourner cela, cependant, le plus "facile" peut être juste le réglage de votre propre thème personnalisé, et d'avoir la page.tpl.php juste être vide, ou du hasard divs
cette méthode n'est tout simplement de permettre à node.tpl.php pour afficher (ou de l'une de drupal la forme de vues, etc...) et serait un moyen facile d'éviter la modification de base, ou d'avoir à modifier le thème de registre pour éviter d'afficher page.tpl.php dans la première place.
modifier: voir les commentaires
ok j'ai joué un peu avec des vues un peu, on dirait qu'il prend le dessus et construit sa propre "node.tpl.php" (dans un sens) pour l'affichage à l'intérieur "page.tpl.php". le premier coup d'œil, mon instinct serait de crochet dans
theme_registry_alter()
.lorsque vous êtes à la recherche à un point de vue page, vous avez accès à des tas d'informations ici, ainsi que la page.tpl.php chemins/fichiers. en tant que tel, je voudrais faire quelque chose comme:
cela devrait vous permettre d'utiliser un "override_page.tpl.php" le modèle de votre thème actuel dans lequel vous pouvez supprimer tout ce que vous voulez (comme ma première réponse ci-dessus).
que peu de choses:
views_ui_list_views
est toujours disponible à vérifier, mais il semble que ça devrait être réglé que si nous sommes à la recherche à vuetheme paths
de lapage
tableau si vous préférez (pour changer l'endroit où drupal va chercher page.tpl.php, au lieu de le renommer en tout)template_preprocess_page()
pourrait être une meilleure idée.J'aime le module Drupal. Mais, voici un autre moyen.
copie page.tpl.php dans votre dossier de thème un nouveau fichier appelé page-VIEWNAME.tpl.php où VIEWNAME est la machine-readible nom de la vue.
Puis modifier page-VIEWNAME.tpl.php pour répondre à.
Il est également http://drupal.org/project/pagearray qui est une solution générale...
Aussi, @Scott Evernden de la solution est un cross site scripting (XSS) trou de sécurité. Ne pas le faire. Lire la documentation sur drupal.org sur la façon de Manipuler du Texte, de façon Sécuritaire http://drupal.org/node/28984
Un moyen simple pour afficher le contenu d'un groupe spécial de type de contenu que vous souhaitez afficher, sans tous les trucs de la
page.tpl.php
:Ajouter l'extrait de code suivant à votre
template.php
fichier:Ajouter un
page-nodetype-examplecontenttype.tpl.php
à votre thème, comme votrepage.tpl.php
mais sans les trucs que vous ne souhaitez pas afficher et avecprint $content
dans le corps.Si je comprends bien votre question, vous voulez avoir des nœuds qui contiennent tout le code HTML d'une page, à partir de DOCTYPE </HTML>. Ce que je voudrais faire est de créer un type de contenu de ces nœuds -- "fullhtml" comme ses lisibles à la machine de nom -- et puis créer un nœud de modèle pour qu'il appelle node-fullhtml.tpl.php. Vous ne pouvez pas simplement vider le nœud du contenu, comme ils l'ont été en HTML aseptisé. node.fullhtml.tpl.php serait littéralement juste ceci:
Alors vous aurez besoin d'un moyen de remplacer la norme page.tpl.php. Je pense ce que vous pourriez faire est au-dessus de votre page.tpl.php vérifier l' $node de type de contenu, et de renflouer si c'est fullhtml. Ou, définir une variable globale dans node-fullhtml.tpl.php que page.tpl.php serait de vérifier pour.
Je ne suis pas un expert Drupal, mais c'est la façon dont je le ferais. Je parle en improvisant, alors attention pour les diables dans les détails.
Je vois que vous avez déjà fait vous-même un module, de sorte que ce ne soit plus l'aider, mais il est assez facile d'obtenir une vue d'exposer un flux rss, ce qui pourrait être un moyen plus facile d'obtenir le contenu, surtout si vous souhaitez l'inclure sur un site différent.
Sur D7, vous pouvez utiliser menu_execute_active_handler
jeroen la réponse de ce qui a été fait pour moi, après avoir joué avec elle. J'ai un site Drupal 7 site.
Tout d'abord assurez-vous de remplacer
MY_THEME
avec votre nom de thème. Oui, c'est évident, mais la plupart des débutants à côté de cela.J'ai effectivement déjà eu une
function MY_THEME_preprocess_page(&$variables) {
. Ne pas recréer la fonction, mais d'ajouter ce code à la fin de la fonction avant de le fermer avec}
.$vars
pas$variables
, j'ai donc eu de mise à jour ainsi. De nouveau évident si vous pensez que le chercher.Ma première répondu m'a permis de n'afficher que le nœud lorsque je l'ai appelé dans un navigateur web. Cependant, le but ultime de ce travail est d'intégrer l'drupal nœud dans une 3e partie du site à l'aide d'une iframe.
Depuis la sortie de Drupal Base de 7,50 iframe est par défaut bloqué afin d'empêcher le détournement de clics
Pour obtenir uniquement le nœud pour réussir à intégrer dans une 3e partie du site vous devez également remplacer le x-frame paramètre par défaut. Tout a commencé à travailler après que j'ai ajouté ce qui suit dans template.php