Kullanıcı adına tıklayınca?!

Events happening in the community are now at Drupal community events on www.drupal.org.
bluebee's picture

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

aydos's picture

ya da web sayfalarına nasıl yönlendirebiliriz?

modül var mı bilmiyorum

some_plus's picture

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

pembeci's picture

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ı

bluebee's picture

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ş

pembeci's picture

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.

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 :)

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

bluebee's picture

Gönderiyorum birazdan :)

web siteleri?

aydos's picture

profildeki web siteleri için (TAHMİNEN):
$output = l($name, $object->profile_web, array('title' => t('web site.'))); // değişiklik
mi yapacağız o zaman?

doğru

pembeci's picture

fonksiyonun argumanı olan $object tüm profil bilgileri de eklenmiş bir user yani kullanıcı nesnesi. veritabanındaki profile_fields tablosunun name sütununu kontrol ederek profile_web mi demek lazım başka birşey mi demek lazım emin olunabilir.

düzeltme

pembeci's picture

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_profile kullanıp profile bilgilerini kullanıcı nesnesine eklememiz gerekiyor. yani:

<?php
....
profile_load_profile($object);
$output = ........$object->profile_web........
...
?>

bunu yapmazsak $object->profile_web tanımsız olur.

drupal dersi

aydos's picture

ç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

bluebee's picture

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.