Views: Relationships (İlişkiler)
Bazen görünümlerde sunmak istediğimiz bilgiler veritabanında tek bir tabloda bulunmazlar. Örneğin yorumları listeleyen bir görünüm ana tablo olarak yorum tablosunu {comments} kullanır. Bu görünümde yorumun yazıldığı düğüm ile ilgili başlık, yazar, vb. bilgiler vermek isteyebilir veya sadece yayınlanmış düğümlere yapılan yorumları süzmek isteyebiliriz. Ancak yorum tablosunda yorumun yazıldığı düğüm ile ilgili bilgiler yer almaz. Bunun için yorum tablosu {comments} ile düğüm tablosu {node} arasında bir ilişki kurmamız gerekir. Views'te bu ilişki Relationships bölümünden kuruluyor.
Yukarıda bahsettiğimiz örneğe geri dönelim. Amacımız yorumları listelerken yorumların yazıldıkları düğümle ilgili bilgi vermek. Ancak bu alanları eklemek istediğimizde Views'in bize yaklaşık 10 civarında sadece yorumla ilgili alan sunduğunu göreceğiz. Yani şu aşamada düğümlerle ilgili herhangi bir bilgi eklememiz mümkün değil. Düğümlere ait alanları etkin hale getirebilmek için görünüme yorum ve düğüm tabloları için bir ilişki eklememiz gerekiyor. Bu ilişki eklendikten sonra Views hem yorum ve düğüm tablolarındaki kayıtları eşleştirebilecek hem de bize görünüme ekleyebileceğimiz düğümle ilgili alanlar, süzgeçler ve sıralama kriterleri sunacak.
Görünüme yeni bir ilişki eklemek, silmek ve sırasını değiştirmek aynı alan, süzgeç ve sıralama kriterlerindeki gibi yapılıyor. Dolayısıyla bu konuda detaya girmeden anlatıma devam edeceğim. İlk olarak yapacağımız şey Relationships kutusundan +'ya tıklayarak tanımlı ilişkilerin listesini görmek. Eğer sitemizde çok fazla etkin eklenti yoksa burada çok fazla seçenek olmayacaktır. Örnekteki yorumları listelediğimiz için çekirdek yorum eklentisi Comment'in etkin olduğunu varsayıyorum (zaten bu eklenti etkin değilse sitemizde yorum bulunmayacağı için yorumları listeleyen bir görünüm yapmanın da anlamı yok). Views yorum eklentisi için 3 ilişki sunuyor: düğüm, kullanıcı ve parent comment (yorumlara yapılan yorumlar için). Bizi düğüm bilgileri ilgilendirdiği için buradan Yorum: Düğüm ilişkisini seçerek görünümümüze ekliyoruz.

Bu aşamadan sonra tekrardan alan ekleme bölümüne gidip ekleyebileceğimiz alanların listesine bakacak olursak artık sadece yorumlarla ilgili değil, düğümlerle ve hatta kitap (book eklentisi), node revision (node eklentisinin sunduğu içerik sürüm bilgileri), taksonomi (taxonomy) ve içerik (cck) ile ilgili alanların da yer aldığını göreceğiz. Aslında biz yorumları sadece düğüm tablosu {node} ile ilişkilendirmiştik, peki niye böyle oldu, bu diğer alanlar nerden geldi? Bunun sebebi Views'in düğüm tablosuyla bu diğer tablolar arasındaki ilişkileri otomatik olarak eklemesi. Ancak bu ilişkiler kendi eklediğimiz ilişkiler gibi Relationships kutusunda listelenmiyor. Aslında bu durum ilişkileri anlamaya çalışanların başta biraz kafasını karıştırabiliyor ama aynı zamanda bazı ilişkilerin otomatik eklenmesi işleri kolaylaştırıyor da. Kısacası bunu olumlu ya da olumsuz bir özellik olarak düşünebilirsiniz (Views'in geliştiricisi için bu otomatik ilişkiler bir hata ancak durumun farkına varmakta geç kaldığı için sonradan değiştirememiş). Neyse, sonuçta Yorum: Düğüm ilişkisi görünümüzde olduğu sürece görünümümüze düğümler ile ilgili alanlar ekleyebileceğiz. Örneğin Düğüm: Başlık alanını ekleyerek yorumun yazıldığı düğümün adını göstermek isteyebiliriz.

İlişkiler sadece alanlarda geçerli değil elbette. Örneğin bu tarz yorum listeleyen bir görünümde Düğüm: Yayında veya Düğüm: Published or admin süzgeçlerini kullanmak isteyebiliriz. Çünkü yorum yazılmış olan bir düğümü yayından kaldırdığımızda, bu düğüme yazılan yorumların görünümümüz tarafından hala gösteriliyor olmasını istemeyiz. Bu süzgeçleri eklemek için tahmin edebileceğiniz üzere Yorum: Düğüm ilişkisinin daha önceden görünüme eklenmiş olması gerekiyor. Bu anlatımı takip ettiğinizi ve bu ilişkiyi eklemiş olduğunuzu varsayarsak şu anda bu süzgeçler Filtreler bölümünden seçilebilir durumda olacaklardır.
Eğer bir görünüme birden fazla ilişki eklediysek, bu durumda yeni bir alan, süzgeç veya sıralama kriteri eklerken mevcut ilişkilerden birini seçebiliriz. Peki bu tam olarak ne anlama geliyor? Şöyle açıklamaya çalışayım. Diyelim ki görünüme Yorum: Düğüm ilişkisi ile birlikte Yorum: Kullanıcı ilişkisini de ekledik. Views'in düğüm ile kullanıcı arasındaki ilişkiyi de otomatik olarak ekleyeceğini biliyoruz. Sonuçta bir yoruma ait elimizde kullanıcı tablosundan {user} alınmış iki veri kümesi olacak; biri yorumun yazarına ait ve Yorum: Kullanıcı ilişkisi ile elde edilmiş, diğer ise yorumun yazıldığı düğümün yazarına ait ve bizim eklediğimiz Yorum: Düğüm ilişkisi sonrasında Views'in otomatik olarak eklediği gizli Düğüm: Kullanıcı ilişkisi üzerinden elde edilmiş (ancak bu ilişki gizli olduğundan bizim eklediğimiz ilişkinin adını kullanıyor, yani Yorum: Düğüm). Buraya kadar bir sorun yok sanırım. Peki şimdi işleri biraz daha karıştıralım ve görünüme Kullanıcı: İsim alanını ekleyelim (aslında amacımız yorumun yazarını göstermek olsaydı Yorum: Yazar alanını eklemek yeterli olurdu; ancak buradaki amacımız ilişki seçimini göstermek olduğu için Kullanıcı: İsim alanını eklemeyi tercih ettim). Şimdi burada Views'in yerine ben olsaydım, bu işlemi yapan kişiye "iyi de, hangi kullanıcının adı? Yorum yazarının mı yoksa düğüm yazarının mı?" diye sorardım herhalde :) Çünkü elimde iki farklı ilişki üzerinden elde edilmiş iki kullanıcı bilgisi var ve bana ek bir bilgi verilmediği sürece hangisini kullanmam gerektiğini bilemem. Views için de durum farklı değil. Bu yüzden bir alanın değeri birden fazla ilişki üzerinden alınabiliyorsa hangi ilişkinin kullanılmasını istediğimizi seçmeliyiz. Örneğimizde Kullanıcı: İsim alanının değeri mevcut iki ilişkiden de alınabileceği için hangisini kullanacağımızı belirtiyoruz.

Views'te relationships yani ilişkiler ile ilgili anlatılabilecekler bu kadar. Öyle çok karışık ve detaylı bir kullanımı da yok aslında. Zaten SQL bilenler için Relationships'in LEFT JOIN işlemine karşılık geldiğini bilmeleri, kullanımını anlamaları için yeterli olur.
- Yeni yorum ekle
- 2549 kez okundu

yani tek kelime ile mükammel bir anlatım. views te hep bu faktörü merak etmiştim. şimdi yavaş yavaş kavrıyorum açıkcası.
işte aynı bu anlatım gibi bir de aynı facebook'taki gibi kişiye özel sayfalar oluşturmayı anlatırsanız çok ama cidden çok güzel olacak.şimdiden teşekkürler.
buraya bakabilirsin.
o dediğin yere baktım.zaten her arattırdığımda bu sayfa çıkıyo başka da bir kaynak bulamadım gibi bir şey.oradaki gibi profil sayfalarını oluşturdum orası kolay ama her kullanıcıya ait özel olmasını sağlamak istiyorum sadece onaylı arkadaşları görüntüleyebilecek şekilde kısmen onu da başardım ama sınırlı özellikler var onda da yani ilave olarak kişinin yazdığı konular bloglar vb... şeyleri yine de herkes görebiliyor o kısmı aşamadım.
ilgilenip cevap yazdığın için de teşekkürler ayrıca .
http://drupal.org/project/profile_privacy şöyle bir eklentide var bir incele istersen. dediğin gibi bir çalışmam olmadıgından bilemiyorum.