Posted by bluebee on June 26, 2008 at 11:00am
Selamlar,
Sitemizdeki yazarların adlarına tıklayınca profil bilgileri yerine, girdikleri yazıların çıkmasını nasıl sağlarız? Bir modül vardır diye tahmin ediyorum.
Selamlar,
Sitemizdeki yazarların adlarına tıklayınca profil bilgileri yerine, girdikleri yazıların çıkmasını nasıl sağlarız? Bir modül vardır diye tahmin ediyorum.
Comments
ya da
ya da web sayfalarına nasıl yönlendirebiliriz?
modül var mı bilmiyorum
modül var mı bilmiyorum ama sonuçta smarty kullanıyor.
linki gönderilen yeri bulup istediğiniz gibi değiştirebilirsiniz sanırım.
theme_username
5.x için bu fonksiyonun orjinalini burada bulabilirsin. sonuçta ihtiyacın olan kendi temanda bunun üzerine yazmak. yani tema ismin aaaaa ise tema dizininde template.php dosyana şöyle bir fonksiyon ekleyebilirsin:
<?php
function aaaaa_username($object) {
if ($object->uid && $object->name) {
// Shorten the name when it is too long or it will break many tables.
if (drupal_strlen($object->name) > 20) {
$name = drupal_substr($object->name, 0, 15) .'...';
}
else {
$name = $object->name;
}
// if (user_access('access user profiles')) {
// $output = l($name, 'user/'. $object->uid, array('title' => t('View user profile.')));
$output = l($name, 'tracker/'. $object->uid, array('title' => t('View posts by this user.'))); // değişiklik
// }
// else {
// $output = check_plain($name);
// }
}
else if ($object->name) {
// Sometimes modules display content composed by people who are
// not registered members of the site (e.g. mailing list or news
// aggregator modules). This clause enables modules to display
// the true author of the content.
if ($object->homepage) {
$output = l($object->name, $object->homepage);
}
else {
$output = check_plain($object->name);
}
$output .= ' ('. t('not verified') .')';
}
else {
$output = variable_get('anonymous', t('Anonymous'));
}
return $output;
}
?>
görüldüğü üzere sadece bir satırı değiştirmek yetiyor. bir de herkesin yazıları görmesini isteniyorsa access control yapan if'e de ihtiyaç kalmıyor. sitende olan bitene göre (mesela anonim kullanıcılar yazamıyor ve else if'deki gibi eklentiler yoksa) şu kadarı bile yeter:
<?php
function aaaaa_username($object) {
// Shorten the name when it is too long or it will break many tables.
if (drupal_strlen($object->name) > 20) {
$name = drupal_substr($object->name, 0, 15) .'...';
}
else {
$name = $object->name;
}
$output = l($name, 'tracker/'. $object->uid, array('title' => t('View posts by this user.'))); // değişiklik
return $output;
}
?>
Tabii tracker yerine yazılar için bir view filan varsa url'yi ona göre değiştirmek lazım.
anlaşıldı
pembeci teşekkür ederim. şu an karışık gibi görünse de hafta sonu çözerim diye tahmin ediyorum. bir views yapmıştım zaten dediğin gibi konuyla ilgili. aslında sitemizin yazarları belli. her kullanıcı için gerekli değil yazdıklarına ulaşmak. belirli (şimdilik) 3 kişinin adına basınca gelmesi yeterli. yani örneğin user/99'u oluşturduğum views url sine yönlendirmem yetecek. tam tersini de denedim öte yandan. yani oluşturduğum views'ın url'sini user/99 yaptım, yemedi :) buna yakın bir tavsiyen var mı?
senin ihtiyacın daha basitmiş
benim yukarıda açıkladığım drupal'in herhangi bir yerindeki kullanıcı isimlerini (theme_username kullanılarak ekrana yazdırılan) değiştirmek için. mesela yandaki recently joined kutusundaki isimler de böyle yazdırılıyor, yazılardaki yorumlardaki, admin listelerindeki isimler de. eklentilerin çoğu da şayet drupal kod mantığına göre yazılmışlarsa bu fonksiyonu kullanıyor. dolayısıyla sen bu theme fonksiyonunu overwrite ederek hepsini değiştirmiş oluyorsun.
şayet temel derdin yazılarda gözüken yazar isimlerine tıklanınca o yazarın tüm yazılarına gitmek ise başka bir alternatif de node.tpl.php dosyasını değiştirmek. sonuçta büyük ihtimal sen oradaki "submitted by" kısmını bir şekilde değiştirmişsindir. aynı noktada yazar ismini yazdırıp istediğin url'ye de yönlendirebilirsin. php ve phptemplate ile çok uğraşmamışsan bana özelden (pembeci AT gggggmail.com, tek g tabii) node.tpl.php dosyanı gönder (views url'sini de belirtip) yardımcı olmaya çalışayım.
hmm, bu da iyi denemeymiş ama drupal'in menu sisteminde bir url (path) bir kez menu sistemine kaydedilince sonradan değiştirmenin yolu var mı bilmiyorum. alias var tabii de toptan yeni bir yere yönlendirmek temel mantığıyla çelişiyor. user.module dosyasını hack'leyip yapmak mümkün yukarıda dediğini ama kirli çözüm olur, sonradan başını daha çok ağrıtır. dolayısıyla tavsiye etmem.
ok dir
Gönderiyorum birazdan :)
web siteleri?
profildeki web siteleri için (TAHMİNEN):
$output = l($name, $object->profile_web, array('title' => t('web site.'))); // değişiklikmi yapacağız o zaman?
doğru
fonksiyonun argumanı olan
$objecttüm profil bilgileri de eklenmiş biruseryani kullanıcı nesnesi. veritabanındakiprofile_fieldstablosununnamesütununu kontrol ederekprofile_webmi demek lazım başka birşey mi demek lazım emin olunabilir.düzeltme
pardon, posta kutularını meşgul ediyorum ama orjinal yorumu düzenlesem e-posta gitmeyebilir ve bu sayfaya uğramayanlar için şaşırtıcı olabilirdi. profile bilgileri otomatik yüklenmiyormuş. bizim kendimizin önce
profile_load_profilekullanıp profile bilgilerini kullanıcı nesnesine eklememiz gerekiyor. yani:<?php....
profile_load_profile($object);
$output = ........$object->profile_web........
...
?>
bunu yapmazsak
$object->profile_webtanımsız olur.drupal dersi
çok teşekkürler pembeci...
bu cevaplar bir sorunu çözmekten öte drupal'in nasıl çalıştığı hakkında küçük bir ders oldu.
çok teşekkür ederim
sevgili pembeci'ye bir de buradan teşekkür etmek istedim. sorunumu çözdü sağolsun. node.tpl içinde submitted bölümünde şöyle bir değişiklik yapınca işim çözüldü:
<?php if ($submitted): ?><div class="submitted">
<?php
$viewurl="";
switch($node->uid) {
case 8 : $viewurl = "xxyy" ; break;
}
$isim = l($node->name, $viewurl, array('title' => t('Yazarın bütün yazıları için tıklayınız.')));
print "$isim tarafından ".format_date($node->created). " tarihinde gönderildi.";
?>
</div>
<?php endif; ?>
case 8'deki 8 uid (kullanıcı id'si). xxyy de o kullanıcı için views'dan oluşturduğum url.