Skip to Content

Haber sayfasını şekillendirmek

hunanka, Cuma, 12/12/2008 - 23:26 tarihinde.

Haber konulu yeni bir içerik yarattım. Views ile sayfada yeniden eskiye sıralanıyorlar. Ancak her haberi

-------------------------------------
- BAŞLIK                            -
-------------------------------------
- Metin ....                        -
- metin ....                        -
- metin... oku>                     -
-                                   -
-------------------------------------

Yukarda anlatmaya çalıştığım gibi ayrı bir kutu içerisinde ve alt alta sıralı olarak göstermek istiyorum bu mümkün müdür? Nasıl Mümkündür? Şimdiden teşekkürler

gdag, Cmt, 13/12/2008 - 08:49 tarihinde.

Sanırım CCK modülü ile yapabilmeniz mümkün. Bunun için ise sitedeki CCK derslerine bakabilirsiniz.

hunanka, Cmt, 13/12/2008 - 13:17 tarihinde.

Bende CCK var ve onunda katkısı ile içerik olarak ekleyebileceğim alanları yarattım. Amacım site izleyicilerinin bunları düzgün ve ayrışmış görüntüleyebilmesidir.
1- Sayfada düzenlemeyi özel şablon yaratmadan yapabilmek mümkün müdür?
2- Değilse sayfaya özel şablon yapımını nasıl yaparız?
3- Varsa özel bir program v.s. mümkün müdür?

hunanka, Cmt, 13/12/2008 - 14:43 tarihinde.

Geceden beri sitede dolaşıyorum. Anladığım kadarıyla sayfa görünümü için belirli etaplar var.
ETAPLAR
1- İçerik yaratılır. (Burası tamam)
2- İçerik views de görüntülenecek hale getirilir. (Burası tamam)
3- İçeriğe ait bir sayfa yaratılacak mümkünse page sayfası kopyası. node-icerik_turunun_adi_buraya.tpl.php (Burası tamam)
4- Sayfanın içerisine yazılacak komutlar çok karışık ancak bunun için deneme yanılma ve kopyala değiştir yöntemlerini uyguluyorum. (Sonuç Yok)
5- Sayfanın başında <dl class="sayfadi">var. Bir içerikte. İlgili temanın CSS dosyasında ise aşağıdaki kodlar mevcut. (Sonuç Yok)

dl.makale  
{
   border: 1px solid #CCCCCC;
   margin: 2px 0px;
   line-height: 18px;
}
dl.makale dt  
{
   display: table;
   width: 100%;
   padding: 0px;
   margin: 0px 0px 0px 0px;
}
dl.makale dt span  
{
    display:block;
    float:left;
    font-weight:bold;
    width:20%;
    padding-left: 5px;
}
 

Ve hala sayfamda böyle bir görüntü var.
sayfa_tasarim.jpg
Ancak bütün uğraşlarıma rağmen sonuç yok...

Bense paintte yaptığım bu görüntüyü yaratmak derdindeyim.
sayfa_tasarim_2.jpg

onur serkan, Cmt, 13/12/2008 - 16:57 tarihinde.

Yapmaya çalıştığınız şey tamamen css ile alakalı birşey. Css konusunda temel bilginiz varsa, Firebug'dan yararlanarak ilgili class ve id'leri tespit edip stlye.css dosyasında istediğiniz görünümü verecek stil kodlarını eklemek yeterli olacaktır. Örneğin bu sitedeki Views ile oluşturulan eklentiler sayfasında eklenti tanıtımlarını çerçeveletmek istesem şunu yapmam gerekirdi:
.view-id-eklentiler .node {border: 1px solid #000000}
Peki ne yazmam gerektiğini nerden biliyorum? Ezbere bilmiyorum tabii ki, yaptığım şey Firebug ile görünümünü değiştirmek istediğim yeri tespit etmek. Hepsi bu.

hunanka, Cmt, 13/12/2008 - 17:56 tarihinde.

Bu seferde olmadı, başlığa ilişkin punto ayarını buldum, düzelttim. Kontrol ettim. Sitedeki tüm karakterlerin puntosu değişti. Gene olmadı. Çizgiyi de eklemeye çalıştım ama olmadı. Ben nerden başlamalıyım, bu sayfa tasarımına A dan Z ye sayfa tasarımı diye bir Ders mi ekleseniz?

onur serkan, Cmt, 13/12/2008 - 19:01 tarihinde.

A'dan Z'ye sayfa tasarımı için destek vermenin yeri burası değil, çünkü bu çok çok geniş bir kapsama sahip. Sadece CSS, sadece HTML, sadece PHP üzerine dersler sunan siteler var sonuçta. Siz bence en iyisi önce bir css konusunda temel bilgi edinin. Burada bununla ilgili güzel bir başlangıç kaynağı var örneğin: http://www.fatihhayrioglu.com/kitap/

Özel olarak buradaki soruya gelirsek, yaptığınız css değişikliklerini yazarsanız hatanın nerede olduğunu söyleyebilirim.

hunanka, Pzt, 15/12/2008 - 15:53 tarihinde.

Tavsiyen için teşekkür ederim. Kitap çok güzel bişeye benziyor. Ama benim tam olarak çözemediğim konu şudur.

1- CSS ve şablon PHP sayfa arasındaki iletişim nedir?
2- Drupalde İçerik ve içeriği oluşturan elemanların kodlarını nasıl bulurum. Drupal üzerinde böyle bi yer mevcut mudur?
3-Bu içerik elemanlarını gösterecek sayfayı, içeriğin adıyla oluşturdukdan sonra, CSS de bu isme bişeyler atamamız lazım mıdır?
4- Bu içerik elemanlarını gösterecek sayfayı, içeriğin adıyla oluşturdukdan sonra, PHP sayfayı drupalin tanıması için bir ayar yapmalımıyız?
5- Kısacası Drupal, CSS ve PHp şablon sayfası arasındaki iletişim nasıl sağlanmaktadır.
Çok teşekkürler.

onur serkan, Pzt, 15/12/2008 - 16:55 tarihinde.

Sonda başlayayım bu sefer, çünkü genel bir cevap olacak:

Drupal bir sayfayı görüntülerken tema klasöründe belirli kurallara göre isimlendirilmiş tpl.php dosyaları arar. Bu kurallar ve örnekler için buraya bakabilirsin. Örneğin node.tpl.php bunlardan biridir ve Drupal bir düğümü özet veya tam sayfa olarak gösterirken kullanılır. Diyelim ki node.tpl.php'nin içinde sadece şu kodlar olsun:

  <div class="content clear-block">
    <?php print $content ?>
  </div>

Bu html ve php karışımı bir koddur. Html kısmı tamamen keyfidir. İstersek div'leri kaldırabilir veya css class ve id değerlerini değiştirebiliriz. Php kısmında ise bir değişkenin ($content ) değeri yazdırılmakta. Bu değişken Drupal'in bu node.tpl.php dosyasına aktardığı bir değişken olmalı. Yani burada kafamıza göre bir değişken yazamayız. Peki node.tpl.php dosyasında Drupal hangi değişkenleri tanıyor? İşte bu sorunun cevabı da Drupal API dokümantasyonunda mevcut; örneğin API dokümantasyonunda node.tpl.php sayfasında şu değişkenler kullanılabiliyormuş:

Available variables:

  • $title: the (sanitized) title of the node.
  • $content: Node body or teaser depending on $teaser flag.
  • $picture: The authors picture of the node output from theme_user_picture().
  • $date: Formatted creation date (use $created to reformat with format_date()).
  • $links: Themed links like "Read more", "Add new comment", etc. output from theme_links().
  • $name: Themed username of node author output from theme_user().
  • $node_url: Direct url of the current node.
  • $terms: the themed list of taxonomy term links output from theme_links().
  • $submitted: themed submission information output from theme_node_submitted().

Other variables:

  • $node: Full node object. Contains data that may not be safe.
  • $type: Node type, i.e. story, page, blog, etc.
  • $comment_count: Number of comments attached to the node.
  • $uid: User ID of the node author.
  • $created: Time the node was published formatted in Unix timestamp.
  • $zebra: Outputs either "even" or "odd". Useful for zebra striping in teaser listings.
  • $id: Position of the node. Increments each time it's output.

Node status variables:

  • $teaser: Flag for the teaser state.
  • $page: Flag for the full page state.
  • $promote: Flag for front page promotion state.
  • $sticky: Flags for sticky post setting.
  • $status: Flag for published status.
  • $comment: State of comment settings for the node.
  • $readmore: Flags true if the teaser content of the node cannot hold the main body content.
  • $is_front: Flags true when presented in the front page.
  • $logged_in: Flags true when the current user is a logged-in member.
  • $is_admin: Flags true when the current user is an administrator.

Tabii ki her tpl.php dosyasında bu değişkenler yok. Bu yüzden hangi dosya ile ilgileniyorsak API dokümantasyonundan ona bakmalıyız. Bir de sonradan yüklediğimiz eklentiler bu dokümantasyonda belirtilenlere ek olarak başka değişkenler sunabilirler (örneğin CCK alanlarına ait değişkenleri gibi). Bu durumda ilgili eklentinin proje sayfasında bununla ilgili bir dokümantasyon olup olmadığına bakmak gerekir. node.tpl.php için özel olarak Contemplate eklentisinden de faydalanabiliyoruz. Bu eklenti CCK'da dahil olmak üzere node.tpl.php'de kullanılabilecek tüm değişkenleri örnek değerleriyle birlikte sunuyor. Yine geliştiricilerin kullanabilecekleri bir eklenti olan Devel'den de benzer şekillerde faydalanmak mümkün.

Neyse, kodda kalmıştık. Drupal node.tpl.php'yi çağırdığı anda bu dosyanın içeriği hazırlanarak çağırılan konumda yazdırılır. Ekranda gösterilirken css stilleri de html elemanlarına uygulanır. Bunun için Drupal yazdırdığı elemanlara için herhangi bir stil tanımı yapılıp yapılmadığını style.css vb. dosyalardan kontrol eder. Buradaki örnek için bakacak olursak, eğer style.css dosyasında content class'ı ve/veya clear-block için stil kodu kullanılmışsa bunları bu div'e uygular. Ve biz de ekranda içeriği css ile biçimlendirilmiş bir şekilde görürüz.

Php, drupal, css vb. arasındaki ilişki kısaca bu şekilde. Sanırım tüm soruların için bir cevap oldu bu. Yine de eksik kalan yerler varsa onları da açıklamaya çalışırım.

hunanka, Pzt, 15/12/2008 - 17:25 tarihinde.

Çok teşekkürler şimdi yazıyı tek tek inceliyorum. Sayende sonuca ulaşacağım sanırım.

hunanka, Pzt, 15/12/2008 - 20:52 tarihinde.

Onur Bey verdiğiniz bilgiler için çok teşkkürler, baya ilerleme kaydettim sayenizde. Artık kodlardan anlamasamda neyin nerde olduğunu ve nasıl denemeler yapmam gerektiğini biliyorum. Sonunda geldiğim nokta aşağıdaki gibidir. Ancak bi kaç küçük sorunum kaldı.

CSS de

/*-------------------------------------*/
dl.haber
{
   border: 1px solid #CCCCCC;
   margin: 2px 0px;
   line-height: 18px;

}
dl.haber dt  
{
   display: table;
   width: 100%;
   padding: 0px;
   margin: 0px 0px 0px 0px;
}
dl.haber dt span  
{
    display:block;
    float:left;
    font-weight:bold;
    width:20%;
    padding-left: 5px;
}
/*------------------------------------*/

PHP sayfası yarattım adı: node-haber.tpl.php
<?php if($teaser): ?>
<dl class="haber">
<dt><span>Haber Başlığı</span>: <?=l($node->title, "node/".$node->nid)?></dt>
<dt><span>Haber Tarihi</span>: <?php print $node->field_tarih[0]['view'] ?></dt>
<dt><span>Haber Metni</span>:<dt><?php print $node->content['body']['#value'] ?></dt>
<dt><?=$links?></dt>
</dl>
<?php elseif($page): ?>
<dl class="haber">
<dt><span>Haber Başlığı</span>: <?=l($node->title, "node/".$node->nid)?></dt>
<dt><span>Haber Tarihi</span>: <?php print $node->field_tarih[0]['view'] ?></dt>
<dt><span>Haber Metni</span>:<dt><?php print $node->content['body']['#value'] ?></dt>
<dt><?=$links?></dt>
</dl>
<?php endif; ?>

Bütün bunların sonunda yarattığım haber sayfası şu şekilde oldu.
Tüm haberlerin sayfası:
Haber_1.jpg

Tek haber sayfası:
Haber_2.jpg
Bu şekilde oldu.
Şimdi benim anlamadığım ben nerde hata yaptım?
1- Tarih iki nokta dan sonra ve koyu olmadan yazılmalıydı,
2- Haber minik sutunlar halinde çıkıyor. Aslında düz metin olarak koyu olmadan çıkmalıydı.
Şimdiden çok teşekkürler

onur serkan, Pzt, 15/12/2008 - 20:53 tarihinde.

<dt><span>Haber Metni</span>:<dt><?php print $node->content['body']['#value'] ?></dt>
Bu satırda dt etiketini iki defa açmış, bir kez kapatmışsınız. Bunu düzeltince başka bir sorun kalmaması lazım.

hunanka, Pzt, 15/12/2008 - 20:55 tarihinde.

gerekli düzeltmeyi yaptım ama malesef herhangi bir değişiklik olmadı

onur serkan, Sal, 16/12/2008 - 00:09 tarihinde.

Değişikliği yaptıktan sonra önbelleği silmek gerekebilir.

hunanka, Sal, 16/12/2008 - 12:56 tarihinde.

Onur Bey, Her şey için teşekkürler...
Sayenizde bu işte tamam. :) Kodlarda dediğiniz değişikliği yaptım.
Ancak sorunların kaynağını buldum.
1- Metnin sutunlar halinde yazılması orjinal metinden geçerken kalan verilermiş. Metindeki şekilleri temizle yapınca FCK ile düzeldi.
2- Tarihin iki noktanın önüne geçmesinin nedenini bulamadım. Date olarak yarattığım bir alandı. text olarak yapınca kodlar düzgün olarak çalıştı.
Herşey için teşekkürler...
Son görünüm budur...
Haber_3.jpg
Yeni sorunlarda görüşmek üzere... :)