flag için ikon eklenmiyor
dainty, Sal, 17/02/2009 - 15:52 tarihinde.
editör notu: Soru Flag eklentisinde ikon kullanımı başlıklı ders anlatımından buraya taşınmıştır. Sorular için ders anlatım sayfalarını kullanmak yerine forumda ilgili derse link vereceğiniz yeni bir konu açınız.
---
defalarca denememe rağmen sonuç alamadım:( verdiğiniz kodu tema klasöründeki template.php dosyasına ekliyorum, ekledikten sonraki son hali;
<?php
// $Id:
function phptemplate_preprocess_flag(&$vars) {
$image_file = path_to_theme() . '/flag-' . $vars['flag_bookmarks_css'] . '-' . ($vars['action'] == 'flag' ? 'off' : 'on') . '.png';
if (file_exists($image_file)) {
$vars['link_text'] = "<img src='$image_file' />";
}
}
// $Id:
function phptemplate_preprocess_flag(&$vars) {
$image_file = path_to_theme() . '/flag-' . $vars['flag_bookmarks_css'] . '-' . ($vars['action'] == 'flag' ? 'off' : 'on') . '.png';
if (file_exists($image_file)) {
$vars['link_text'] = "<img src='$image_file' />";
}
}
resimleri ve flag.tpl.php dosyasını da tema dizinine atıyorum ama hiçbir değişiklik olmuyor :( Enazından Favoriye ekleme linkini istediğimiz biryere taşıyamazmıyız? çok kötür biryerde gözden uzakta çıkıyor.
- Yeni yorum ekle
- 550 kez okundu

Konuyu taşırken 6.x olarak seçtim ama hangi versiyonu kullandığından emin değilim. Yukarıdaki kod Drupal 6 için verildi.
Resim dosyalarının isimleri nedir?
İşlemleri yaptıktan sonra önbelleği temizledin mi?
Dosyaların konumları yanlış olabilir mi? Firefox resimleri bulamazsa hiçbirşey göstermez ama ie'de kırmızı bir işaret çıkıyor. O yüzden FF kullanıyorsan bir de IE ile deneyip bunu kontrol edebilirsin.
Doğru tahmin etmişsiniz 6.x kullanıyorum,
Resim dosyalarım; flag-bookmarks-off.png ve flag-bookmarks-on.png
Ön belleği temizledim, hatta bi süre uyuyup kendi önbelleğimide temizledim, ama yine olmadı :)
Dosyalar tema klasörümün içinde, zaten söylediğiniz gibi konum yanlış olsa resim bulunamadg farkediliyor, bende hiçbir değişiklik olmuyor yine eski yazısı çıkmaya devam ediyor. (ie, ff ve crome'da denedim).
Temamın template.php dosyasında hiçbirşey bulunmaması normal mi? sanki bu dosya hiç dikkate alınmıyor gibime geldi.
Benim anlamadığım flag.tpl.php'de aşağıdaki kod bulunuyor
<a href="<?php echo $link_href; ?>" title="<?php echo $link_title; ?>" class="flag <?php echo $action; ?>-action <?php echo $after_flagging ? $last_action : ''; ?>"><?php echo $link_text; ?></a><span class="flag-throbber"> </span>
<?php if ($after_flagging): ?>
<span class="flag-message flag-<?php echo $last_action; ?>-message">
<?php echo $message_text; ?>
</span>
<?php endif; ?>
</span>
önemli olan buradaki
<?php echo $link_title; ?>kodunun karşılığını resim olarak değiştirmek değil mi? bu işlemi kodun tanımlandıgı dosyadan yapmak daha doğru olmaz mı?Bu arada tema klasörüne attığımız flag.tpl.php de bir değişiklik yapmak gerekiyor mu? Şimdiden teşekkürler.
Resim dosyalarında "bookmarks" geçiyor; sanırım flag adı olarak da "Bookmarks" kullandın, değil mi? (büyük-küçük harf duyarlılığı var mı emin değilim).
Çalışma mantığını şöyle açıklamaya çalışayım: tpl.php dosyalarında kullanılan değişkenlerin değerleri daha önceden hesaplanmalıdır. Bu flag linklerini yazdıran
$link_textdeğişkeni için de gereklidir. Bu değişkenin değeri, normalde Flag eklentisi tarafından hangi flag için kullanılacaksa ona uygun bir metin olarak flag.tpl.php dosyasına gönderilir. Bizim burada yapmaya çalıştığımızda, flag eklentisinin çalışmasına müdahale edip flag.tpl.php'ye göndermiş olduğu metin yerine resim koymak. Bu da preprocess (ön işlem) denilen, tema dosyaları çalıştırılmadan önce kullanılan fonksiyonlarla yapılabiliyor. Flag eklentisi için kullanılan preprocess fonksiyonu isephptemplate_preprocess_flag. Eğer bu fonksiyonu kullanmadan doğrudan tpl.php dosyasında değişiklik yapmaya kalkarsan tüm flagler için aynı ikonları kullanmak zorunda kalırsın. Eğer bu senin için bir sorun değilse, dediğin gibi flag.tpl.php dosyasındaki$link_textyerine kendi resim kodunu koyabilirsin. Ama sitende birden fazla flag tanımlıysa ve bunlar için ayrı ikonlar kullanacaksan o zaman preprocess fonksiyonlarını kullanmak durumundasın. Bu arada tema klasörüne attığın flag.tpl.php'de bir değişiklik yapmana gerek yok; o zavallı kendisine Drupal ne gönderirse onu gösteriyor :)template.php dosyasına gelince; içeriği temadan temaya değişebilir. Bir tema var olan şeyleri ne kadar çok değiştirmeye çalışıyorsa template.php dosyası da o kadar büyük olacaktır; çünkü gerekli değişimleri gerçekleştiren tüm fonksiyonlar template.php dosyasında tanımlanıyor.
Detaylı anlatımın için teşekkürler, neredeyse
$link_text'i resim koduyla değiştirecektim, oysa kullanmam gereken birçok flag var:)Evet flag adı bookmarks ve hepsi küçük yazılı, ama hala başaramadım şu olayı, bir de farklı bir temayı aktif edip deneyeceğim. Eğer yine olmazsa, bu linkin konumunu nasıl değiştirebilirim? içerik kısmının en altında çıkıyor (vote up down'un puan sonucu da aynı yerde otomatik olarak cıkıyor), ilgilendiğin için tekrar teşekkürler, sayende drupalci olup cıkacagız:)
Tekrar bakarken birşey farkettim; farklı flagler için farklı tpl.php dosyaları kullanılabiliyormuş. Yani bu durumda preprocess kullanmak yerine her flag için ayrı bir flag tema dosyası kullanabilir ve her tema dosyasında o flag'e özel resim koyabilirsin. Bunu yaparken flag tema dosyalarını şu şekilde isimlendirmen gerekiyor: flag--flag_adi.tpl.php. Örneğin:
flag--favorilerim.tpl.php
flag--sikayet.tpl.php
flag--sectiklerim.tpl.php
vs.
Onur bey, bu konudaki yardımlarınız çok işime yaramıştı hala da yarıyor siz ve diğer ddo'culara yaptığı yardımlardan dolayı minnettarım.
Bu konuyla ilgili ek bir özelliğe ihtiyacım var, php bilmediğim için çözüm üretemiyorum. Her flag'a özel tpl dosyası oluşturup bu dosyadaki
<?php echo $link_text; ?>değişkeni yerine istediğimiz resmi ekleyebileceğimizi öğrenmiştik. Ama sadece tam url ile resim ekleyebildiğim için raporlama dışında kullandığım flaglarda sıkıntı çekiyorum, çünkü flag'ın hem olumlu hem de ters kullanımında aynı resim çıkıyor. Template.php dosyası için oluşturduğunuz fonksiyonda olduğu gibi flag-flagadi-on.png - flag-flagadi-off.png şeklinde 2 ayrı resmi, flag--flagadi.tpl.php içerisinde nasıl kullanabiliriz? Şimdiden teşekkürler..