Düğüm başlığından önce bir alan nasıl gösterilir?


41

D7'de bir teaser görüntülerken, düğümün başlığından önce belirli bir alanı oluşturmak istiyorum.

Etkili ben gitmek istiyorum bu kadar bu .

Ben node.tpl.php güncellenmesi içine baktım ama ayırır fark $titledan $contentben bu yaklaşım konusunda emin değilim bu yüzden. Bazı araştırmalardan sonra, insanların Drupal-6'da bu sorunu aşmak için CCK ve ConTemplate modüllerini kullanmayı önerdiklerini öğrendim ancak daha fazla Drupal-7 çözümü olup olmadığını merak ediyorum.

Baska öneri?


Tüm php tabanlı şablon çözümlerinin yanı sıra, yalnızca CSS ile de uzun bir yol kat edebilirsiniz. Negatif marjlar çok şey yapabilir. Senin jsfiddle örnekte görüneceğini böyle .
marcvangend

Bunu düşünmüştüm ama uzun başlıklar için ne olacak ?
irishbuzz

Kesinlikle haklısın, bu sadece başlığın sabit bir yüksekliğe sahip olması durumunda işe yarar. Her çözüm gibi onun da zayıf noktaları var. Şahsen, (kullandığınız tasarım ve teknolojiden bağımsız olarak) uzun başlıkların editörlerin eğitimi ile engellenmesi gerektiğini düşünüyorum, ancak bunun her zaman bir seçenek olmadığını fark ediyorum.
marcvangend

Yanıtlar:


53

Bu Drupal 7 ile gerçekten oldukça basit.

İle renderve hidesen tek eleman yerleşimini kontrol etmek posibility biliyorum $contentDrupal 6 ihtiyaç vardı gibi tüm öğeleri kendinizi yazdırmak zorunda kalmadan.

Basitleştirilmiş bir düğüm şablonu şuna benzer:

<div>
  <h2><?php print $title; ?></h2>
  <div class="content">
    <?php print render($content); ?>
  </div>
</div>

Küçük bir değişiklik ihtiyaçlarınızı karşılayacaktır:

<div>
  <?php print render($content['field_name_of_image']); ?>
  <h2><?php print $title; ?></h2>
  <div class="content">
    <?php print render($content); ?>
  </div>
</div>

Kullanarak render, bir eleman çıktısı alabilirsiniz. Bu, yalnızca baskı işlerinden ziyade zekicedir; çünkü Drupal, aynı şeyin üzerine iki kez basılmasını önlemek için ne yapıldığını takip eder. Başlığın üzerindeki alanı oluştururken $content, oluşturulduğunda ne yapıldığını da kaldırırsınız .


2
Çok hoş. İdeal bir dünyada, Drupal'a başlık alanını başka bir alan gibi ele almasını söylemek daha iyi olabilir ama en azından Drupal 7'de bunun gibi basit çözümlerimiz var. Kudos @googletorp!
irishbuzz

Kayıt için: Bu, yukarıdaki yorumun ilham verebileceğinin aksine, Drupal6'dan pek farklı değil.
berkes

1
@berkes: Alanları D6'da ayrı ayrı yazdırırsanız, düğüm şablonunu korumanız ve yeni alanlar ekleyebilmeniz için kodu düzenlemeniz gerekir. Bu, alanları eklemeye devam etmek ve kullanıcı arayüzünü sıralamak için kullanmaya devam edebileceğiniz D7'ye kıyasla büyük bir farktır.
googletorp

render gerçekten yeni. Ama onun konsepti değil. Aynı elde etmek için birkaç püf noktaları vardır. Drupal6'da bunun basit, temiz ve güzel olduğunu söylemek istemedim. Sadece bu da mümkün .
berkes

@ googletorp, page.tpl.php dosyasındaki bir alanı yazdırmanın bir yolu var mı?
CocoSkin

9

Display Suite de oldukça havalı.

Display Suite, içeriğinizin bir sürükle ve bırak arayüzü kullanarak nasıl görüntüleneceği üzerinde tam kontrol sahibi olmanızı sağlar. Düğümlerinizi, görünümlerinizi, yorumlarınızı, kullanıcı verilerinizi vb. Düzinelerce şablon dosyasında yolunuzu bulmak zorunda kalmadan istediğiniz şekilde düzenleyin. Daha fazla sürükle ve bırak eğlencesi için önceden tanımlanmış bir düzen listesi (yalnızca D7) kullanılabilir!


Güzel bir modül tamam ama maalesef sadece başlıksız alanlar için kontrol sunuyor, bu yüzden burada yardım yok. Hepinize aynı teşekkürler.
irishbuzz

: Aslında doğru olmadığını, sadece gerekli tüm modülleri yüklemeniz gerekir drupal.org/project/ds , drupal.org/project/nd & drupal.org/project/nd_contrib
Deşifre

@Decipher: Bir görüntü etiketini h2 etiketinin üzerine taşımak için 3 modül kuruluyor mu? Şaka yapıyor olmalısın, doğru :)
berkes

@berkes - Bir web sayfasını görüntülemek için Drupal'ı kurmak, doğru mu? Demek istediğim, bu modüllerin kurulu olduğu çok şey yapabilir, tıpkı Drupal'da olduğu gibi, çok fazla şey yapabilirsiniz, ancak bunu aynı zamanda önemli bir görevi çözmek için de kullanabilirsiniz.
Decipher

@Decipher: Elbette, genel modüller kurmak sitenize yeni fırsatlar getiriyor. Ancak, bir dizi görüntüyü görüntülemek için görünümler, görünüm galerisi, cck, dosya geçmişi ve görüntü alanı yüklemek kötü bir tavsiyedir. Görüntülerin, cck'nin ve diğerlerinin yalnızca bu görüntü listesinden daha fazlası için kullanılıp kullanılmayacağı iyi bir tavsiye olacaktır. Ancak OP bundan hiç bahsetmedi.
berkes

8

Başlık modülüne bir göz atın - http://drupal.org/project/title . Senaryonuz için yararlı olabilir. Bir nedenden dolayı muhtemelen sizinkilere benzer bir şekilde kurdum / etkinleştirdim ve başlık alanının nasıl yerleştirileceği konusunda esneklik sağladı.

O zamandan beri devre dışı bıraktım (ve Display Suite kullanıyorum), bu yüzden hatırlamam biraz kabataslak olabilir.


5

Bu çok çirkin bir çözüm ve birisinin daha şık bir şeyler bulacağına eminim, ama sıkışıp kaldığınızda ve hiç kimse ...

Tamamen page.tpl.phpyazdırmayı kaldırmak için kullanabilirsiniz $titleve makine adı $ new_title veya buna benzer bir adla Başlık adında yeni bir özel alan ekleyebilirsiniz. Sonra düğüm düzenlemeyle ilgili, orijinal başlık kutusu gizlemek ve düğüm Kaydet kullanımı Bilgisayarlı Alan veya kopyalamak için bazı özel php üzerinde $new_titleetmek $title.

Bütün bunlardan sonra $ new_title'ın sayfa başlığındaki gibi görünmesini sağlamak için bazı css'leri yazın ve istediğiniz alanları herhangi bir sırayla, sadece alanları yönet ekranına sürükleyip bırakarak yerleştirebilmelisiniz. Kopyaladığınız $new_titleiçin $title, tarayıcı çubuğundaki sayfa başlığı hala çalışmalı ve eksik düğüm başlıkları hakkında hiçbir şey şikayet etmemelidir.

Dediğim gibi, bir kesmek - işe yarar. Daha fazla bilgiye ihtiyacınız olursa haberim olsun


1
Öneri Frederik için teşekkürler. Sizin de belirttiğiniz gibi ideal olmaktan uzak, ancak birkaç olası çözümden birine benziyor. Bu yaklaşımı alırken auto_nodetitle modülünün kullanılması gerektiğini önererek çözümünüzü ekleyeceğim . Şimdilik soruyu açık bırakacağım çünkü gerçekten daha iyi bir yol olduğunu umuyorum ve bir ödül kazanabilirim. Çabalarınız için +1 de aynı şekilde.
irishbuzz

4

page.tpl.php (garland)

...
      <div id="center"><div id="squeeze"><div class="right-corner"><div class="left-corner">
          <?php print $breadcrumb; ?>
          <?php if ($mission): print '<div id="mission">'. $mission .'</div>'; endif; ?>

          /*
           * Print custom block or var
           */
          <?php if ($custom_block): print '<div id="custom-block" class="clear-block">'. $custom_block .'</div>'; endif; ?>

          <?php if ($tabs): print '<div id="tabs-wrapper" class="clear-block">'; endif; ?>
          <?php if ($title): print '<h2'. ($tabs ? ' class="with-tabs"' : '') .'>'. $title .'</h2>'; endif; ?>
          <?php if ($tabs): print '<ul class="tabs primary">'. $tabs .'</ul></div>'; endif; ?>
          <?php if ($tabs2): print '<ul class="tabs secondary">'. $tabs2 .'</ul>'; endif; ?>
          <?php if ($show_messages && $messages): print $messages; endif; ?>
          <?php print $help; ?>
          <div class="clear-block">
            <?php print $content ?>
          </div>
          <?php print $feed_icons ?>
          <div id="footer"><?php print $footer_message . $footer ?></div>
      </div></div></div></div> <!-- /.left-corner, /.right-corner, /#squeeze, /#center -->
...

template.php

/**
 * Override or insert variables into the page template.
 */
function phptemplate_preprocess_page(&$variables) {
  $node = $variables['node'];
  if($node->type == MY_NODE_TYPE) {
    $variables['custom_block'] = 'bla bla bla';
  }
}

Burada olanları takip ettiğimden emin değilim, çünkü ilk kod pasajı yeni olanın ne olduğuna dair çok az gösterge veriyor. Gerekli değişiklikleri benzer olsa da Garland yerine Zen temasını kullanıyorum. İkinci kod parçacığında bir hook_preprocess_page () çağırıyor musunuz? Daha somut bir örnekle genişletebilir misiniz?
irishbuzz

İkinci kodda 'custom_block' adlı yeni bir değişken tanımladık. 'Custom_block' baskı yaptığımız ilk kodun bir bölümüne bakın. <? php if ($ custom_block): yazdır '<div id = "custom-block" sınıf = "clear-block">'. $ custom_block. '</div>'; endif; ?> sadece bu değişkeni oluşturmak için kurallar tanımlayın. Yani? :)
dobeerman

4

Bu, asıl gönderideki Teaser sorusu için geçerli değildir, ancak bununla karşılaşan ve sadece tam görünümünde olmasını isteyenler için, kodsuz bir seçenek: alanı bir satırda görüntüleme (görünümleri kullanarak, örneğin) ve bu bloğu içerik bloğunuzun yukarısına ancak aynı bölgeye yerleştirin.


Hala drupal bir n00b, ne demek istediğini açıklayabilir misin?
Kenny Wyland

3

Template.php dosyasında ön işleme işlevlerini kullanmanız gerektiğini düşünüyorum.

/**
 * Override or insert variables into the page template.
 */
function THEMENAME_process_page(&$variables) {
  // look for $variables['page_title'] if i remember
}

Ve ek olarak

/**
 * Override or insert variables into the node template.
 */
function THEMENAME_preprocess_node(&$variables) {
  //
}

değişkenleri dök ve istediğini yap. ekleme / kaldırma / güncelleme.


1
Bu işlevler, başlık ve diğer düğüm alanlarının çıktı sırasını değiştirmez. Bunun için şablon dosyasını değiştirmelisiniz.
kiamlaluno

Görüyorum. Başlığa bir alan değeri eklemek istediğinizi düşündüm.
dobeerman

3

Display Suite'i ve "Block to Region" ekstra özelliğini kullanarak kodsuz çözümle çözdüm . Esnekliği için bu çözümü çok seviyorum.

Temel olarak, "Bölge Bloke Et" kısımlarını etkinleştir, Display Suite'te "Tam Metin İçeriği" ekranını etkinleştir. (tam düğmeli ekranda başlığın üstünde içerik görüntülemek istediğinizi varsayarsak, benzer şekilde Varsayılan dışında herhangi bir başka görüntüleme modunda da kullanabilirsiniz ). Şimdi, "Tam Metin İçeriği" nin "Ekranı yönet" bölümünde, ekranın altında "Bölgeleri Engelle" sekmesi görünmelidir. Buraya yeni bir blok adı girin, istediğiniz alanları kaydedin ve bu bloğa sürükleyip bırakın. Son olarak, yeni oluşturulan bloğu Bloklar ekranında düğüm başlığının üstünde bir yere taşıyın.

Aynı yaklaşımın videosunu burada görebilirsiniz: http://www.youtube.com/watch?v=y4wyjxyhbNA , elbette en sonunda bloğun başlığının üstüne (sol kenar çubuğuna değil) yerleştirmeniz gerekir.


2

Aşağıdaki zen şablonları için kod benim için çalışıyor.

<?php
// this goes in template.php
// check if node type page and then add to $vars array
// declaring $vars['foo'] gives you a $foo variable to use in page.tpl.php

function YOURTHEMENAME_preprocess_page(&$vars, $hook) {
    if (isset($vars['node'])) :
        if($vars['node']->type == 'page'):       
            $node = node_load($vars['node']->nid);
            $output = field_view_field('node', $node, 'field_image', array('label' => 'hidden'));       
            $vars['my_image_field'] = $output;               
        endif;
    endif;
}
?>

Sonunda, alanınızı kolayca page.tpl.php;

<?php
if ($my_image_field):
   print render($my_image_field);
endif;
?>

page.tpl.php ile ilgili olarak, Business Responsive Theme ile ilgili tanımsız bir değişken uyarısı alıyordum ancak şartı kaldırdığımda iyi çalışıyor. Başka bir deyişle, <? Php if ($ my_image_field) değiştirdim: print render ($ my_image_field); endif; ?> - <? php print render ($ my_image_field); ?> Tüm sayfalarım boyunca herhangi bir uyarı verilmez.
Amy Niebel,

2

İnşa etmek için zaten bir tema kullanmış olacağınızı biliyorum ve şimdi başlıkları üstüne alanlar eklemeye çalışıyorsunuz.

Drupal 7'de tema geliştiren tüm geliştiricilere Önerilerim kullanmak olacaktır: Omega theme + Context ve Delta modülleri. Bu, düzeniniz için çok güçlü bir temel sağlar.

Bölgeler, Bloklar ve Alanların düzenlenmesi ve esnekliği.


1

Paneller modülü ile yapabilirsiniz


Burada eski cevap, ama bu bir bayrak yakaladı. Panellerin bu durumda nasıl kullanılabileceğini biraz daha açıklamak daha iyi olur.
mpdonadio

Paneller, sadece bir alanı farklı bir pozisyonda hareket ettirmek için büyük bir yük.
Akko
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.