etrafında bir sayfa şablonu olmadan bir Drupal görünümü görüntüleniyor

14 Cevap php

Ben normalde çevreleyen sayfa şablonu olmadan Drupal görünümünü görüntülemek için istiyorum - Ben görünümün düğümlerin sadece düz HTML içerik istiyorum.

Bu bakış başka, dışı Drupal sitesinde yer olacaktır.

Ben manzaralı bir dizi ile bunu yapmak zorunda bekliyoruz, bu yüzden beni hızla ve kolayca bu ayarlamanızı sağlayan bir çözüm iyi olurdu -. Ben bir oluşturmak zorunda değil tercih ediyorum ben gerek her zaman dosya tpl.php bir yerde bir görünüm bulunmaktadır.

14 Cevap

Ben ajax düğüm veri çekmek için bir yol arıyor ve Drupal 6 için aşağıdaki çözüm ile geldi. Eğer URL ajax = 1 eklerseniz, aşağıdaki değişiklikleri uygularken sonra (örn. mysite.com/node/1? Ajax = 1), sadece içeriği ve sayfa düzeni alırsınız.

temanız için template.php dosyasında:

function phptemplate_preprocess_page(&$vars) {

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

}

sonra bu içerik ile tema dizininde sayfa ajax.tpl.php oluşturun:

<?php print $content; ?>

Ben tamamen template.php gibi benim temalar hem hook_preprocess_page ve hook_preprocess_html uygulayarak Drupal 7 sayfa içeriğine çevresindeki tüm HTML çıktısını kaldırmak başardı Ufonion Labs cevap dayalı Bu:

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';
  }
}

Sonra benim tema için iki şablon eklendi: html--embed.tpl.php:

<?php print $page; ?>

ve page--embed.tpl.php:

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

Ben gibi bir düğüm sayfasını açtığımda http://example.com/node/3, ben her zamanki gibi tam sayfa görmek, ama ben gibi response_type parametresini, eklediğinizde http://example.com/node/3?response_type=embed, I {[(2) başka bir sayfasında gömülü böylece]} sayfa içeriği ile <div> olsun.

Ben bu soru zaten cevap olmuştur biliyorum, ama ben Philadelphia Web Design (PWD) cevap elemanları kullanır ve Owen tarafından önerildiği gibi, hook_theme_registry_alter kullanan benim kendi çözüm eklemek istedim. Bu çözümü kullanarak, özel bir modül doğrudan şablon yükleyebilirsiniz.

Birincisi, benim modül içinde yeni oluşturulan 'şablonlar' klasörüne raw.tpl.php ekledi. Raw.tpl.php içeriği PWD sayfa ajax.tpl.php ile aynıdır:

<?php print $content; ?>

Sonra, ben $ _GET parametre değiştirilmiş ve şablon dosya başvurusu güncellenen dışında o (PWD olarak aynı şekilde benim modülünde hook_preprocess_page uygulanmaktadır:

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

Son olarak, ben tema kayıt defterine benim modülün 'şablonlar' dizin eklemek için hook_theme_registry_alter hayata dayalı (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');
}

Şimdi, ben eklemek alıyorsunuz? Ham = 1 görünümün URL yolu, benim modül içinde belirtilen şablon kullanır.

Hey, burada henüz bunu yapmanın başka bir yolu var:

1) Download and install Views Bonus Pack (http://drupal.org/project/views_bonus) 2) Create a Views display "Feed" and use style "XML" (or something you think fits your needs better). 3) If you're not satisfied with the standard XML output, you can change it by adjusting the template for the view. Check the "theme" settings to get suggestions for alternative template names for this specific view (so you'll still have the default XML output left for future use).

Good luck! //Johan Falk, NodeOne, Sweden

, Başka bir şey ise, bir liste demek - Drupal 6 konum varsayarak, bunu yapmak için en kolay yolu, bir phptemplate_views_view_unformatted_VIEWNAME çağrısı template.php (sizin bakış biçimlenmediği varsayar koymaktır ) uygun tema işlevini kullanın. Bu tema çağrısında tema görünüm sonra sonuçlar, yerine normalde, bunları yazdırmak ve dönecekti gibi sonuçlar dönen NULL. Bu irade çıkışı doğrudan HTML.

PS - Bu işi görmek için önbelleği (en / admin / ayarlar / performans) temizlemek için emin olun.

Ben çok kullanışlı buluyorum ki bunu yapmak için başka bir yolu dizesi vermez bir sayfa geri arama fonksiyonu ile bir menü öğesi eklemek için:

Örnek:

/**
 * 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;
}    

- Güncelleme

Bu (Yorum bakınız) exit(); yerine return TRUE; kullanımı çok daha iyi olurdu.

Bu etrafında bir kaç yolu, muhtemelen vardır, ancak "kolay" sadece kendi özel tema ayarı ve page.tpl.php sadece boş olması ya da bazı rasgele divs sahip olabilir

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

Bu yöntem temelde sadece göstermek (veya vb Drupal form görünümleri herhangi ..) ve çekirdek değiştirerek önlemek için kolay bir yol olurdu, ya da page.tpl görüntülenmesini önlemek için tema defterini değiştirmek zorunda node.tpl.php sağlayacak . ilk etapta php.

edit: yorumları görmek

ok i devraldı ve "page.tpl.php" gösterilmesi için (bir anlamda) o kendi "node.tpl.php" kuruyor gibi görünüyor, manzaralı etrafında biraz oynadı. ilk bakışta, benim hislerime theme_registry_alter() kanca olacaktır.

Bir görünümler sayfasında bakıyoruz, buradan bilgi yığınları erişim yanı sıra page.tpl.php yolları / dosyaları var. gibi ben böyle bir şey yapardı:

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';        
  }
}

Bu size (yukarıda benim ilk cevap olarak) istediğiniz her şeyi kaldırabilirsiniz hangi geçerli tema bir "override_page.tpl.php" şablonu kullanmak için izin vermelidir.

bir kaç şey:

  • i emin değil, dediğim gibi eğer views_ui_list_views her zaman karşı denetlemek için kullanılabilir, ancak ayarlanması gerekir gibi bir görünüm bakıyoruz eğer bu sesler
  • (yerine tümüyle yeniden adlandırma, drupal page.tpl.php için bakacağız nereye konumunu değiştirmek için) tercih eğer theme paths page dizisinin değiştirebilir
  • Orada bu özel görünüm için herhangi tanımlayıcılar görünmüyor, bu nedenle bu yöntem "tüm görünümler elimden olacak" bir yaklaşım olabilir. belki içine çengel, yalnızca belirli bir görünüm için page.tpl.php şerit gerekiyorsa template_preprocess_page() daha iyi bir fikir olabilir.

Ben Drupal modülü gibi. Ama burada başka bir yoludur.

ViewName görünümünün makine-Okunması adıdır sayfa VIEWNAME.tpl.php, adında yeni bir dosya için tema klasöründe kopya page.tpl.php.

Ardından düzenleme sayfa VIEWNAME.tpl.php uygun.

Sadece standart geriçağırımlarının (ille Görüntülendi) ile çalışıyorsanız, bu sayfayı isabet diğerleri için, bu kolaydır. Geri arama işlevi, yerine sayfa içinde işlemek için kod dönen, 'baskı' işlevini kullanın.

Örneğin:

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.
}

Şerefe!

Philadelphia Web Tasarım (teşekkürler) bir cevap ve bazı googling dayalı (http://drupal.org/node/957250) burada şablonun olmadan görüntülenen Drupal 7 seçilmiş almak sayfaları benim için çalıştı budur:

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

yerine phptemplate arasında, D7 işlevin adına name_of_your_theme olması zorunludur. Ayrıca, dosya adı ile php değişken iki çizgi __ koymak zorunda kaldı, ama gerçek şablon dosya adı iki tire ihtiyacı -

Sayfanın içeriği - vlozeno.tpl.php:

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

Çıktı, ancak yine sarma ve temanın CSS başvuruları bir sürü var. Emin değil nasıl çıktı tamamen unthemed verileri için ...

A simple way to display content of a special content-type you wish to display without all the stuff of the page.tpl.php:
Add the following snippet to your template.php file:

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

Lütfen page.tpl.php gibi ama görüntülemek istemediğiniz şeyler olmadan ve print $content vücutta ile, tema için page-nodetype-examplecontenttype.tpl.php Ekle.

Ben sorunuzu anlamak, DOCTYPE'ta gelen bir sayfa için tüm HTML içeren düğümleri istiyorum. Onun makinede okunabilir adı olarak "fullhtml" - - ve sonra düğüm-fullhtml.tpl.php denilen bir düğüm şablon oluşturmak Ne yapardın o düğümleri için bir içerik türünü oluşturmaktır. Onlar HTML-dezenfekte oldum gibi sadece düğümün içeriğini dökümü olamaz. node.fullhtml.tpl.php anlamıyla sadece bu olacaktır:

echo htmlspecialchars_decode($content);

Sonra standart page.tpl.php geçersiz kılmak için bir yol gerekir. I think ne yapabileceğini $ düğümün içerik türünü kontrol ve fullhtml eğer kurtarmak sizin page.tpl.php en üst kısmındadır. Veya page.tpl.php kontrol edeceğini düğüm-fullhtml.tpl.php küresel değişkeni ayarlayın.

Ben Drupal uzman değilim, ama ben bunu yapmak istiyorum nasıl. Ben manşet kapalı konuşuyor, bu yüzden ayrıntıları şeytanlar için seyredeceğim.

Ben zaten gitmiş ve kendinize bir modül yapmış görmek, bu yüzden artık yardımcı olabilir, ama siz istiyorsanız, özellikle içeriğine almanın daha kolay bir yolu olabilir, bir rss feed, ortaya çıkarmak için bir görünüm elde etmek oldukça kolaydır Farklı bir sitede bunu dahil etmek.

Genel çözümdür http://drupal.org/project/pagearray da orada hangi ...

Ayrıca, @ Scott Evernden çözümü bir cross site scripting (XSS) güvenlik açığı olduğunu. Bunu yapmayın. Güvenli Moda Metin Kolu hakkında drupal.org ilgili belgeleri okuyun http://drupal.org/node/28984