Views: Arguments (Değişkenler)
Argument (tr: dinamik değişken, argüman) kavramını bir URL'yi oluşturan parçalardan her biri olarak tanımlayabiliriz. Örneğin site.com/taxonomy/term/1 URL'sini düşünecek olursak burada 3 adet argument mevcuttur; bunlar sırasıyla "taxonomy", "term" ve son olarak da taksonomi teriminin id değerini belirten "1". Views kapsamındaki argument ise Views süzgeçlerine benzer bir işlev sunar; ancak süzgeçlerde olduğu gibi değerler görünümde bizim tarafımızdan girilmez, bunun yerine URL'den alınır. Dinamik süzgeçler gibi çalışan argumentlar sayesinde görünümler daha büyük bir esneklik kazanmaktadır.
Sadece daha önceki derslerde ele aldığımız süzgeçleri kullanarak Views ile çok çeşitli görünümler oluşturmak mümkün elbette. Peki bu anlatımın konusu olan argument işlevine niye gerek duyuyoruz? Bu soruya şöyle bir cevap verilebilir: Görünümler belirlediğimiz bazı kriterlere uyan içerikleri listeler. Arguments kullanılmadığında, görünümde yer alan kriterlerin değerlerini görünümü oluştururken belirlememiz gerekir; örneğin "düğüm türü = kitap" gibi. Dolayısıyla bu görünüm her zaman kitap türündeki içerikleri gösterir. Diyelim ki sitemizde 5 farklı içerik türü var. Bu yöntem ile yani argument kullanmadan, sitemizdeki her farklı içerik türü için o türdeki içeriklerin listeleneceği ayrı bir sayfa oluşturmak istiyoruz. Bu durumda bize sadece süzgeçlerin değerleri farklı olan 5 sayfa görüntüsü gerekecektir. 5 çok büyük bir rakam değil; o yüzden bu yöntem kullanılabilir. Ancak argument kullanımı ile kriter değerini görünüme sonradan URL üzerinden vererek bu işlevi tek bir sayfa görüntüsü ile halletme imkanımız olduğunu da belirtmek isterim. Bu durum bazı uygulamalar için böyle basit bir avantaj olmaktan çıkıp zorunluluk haline de gelebiliyor. Örneğin her kullanıcı için o kullanıcıya ait yorumlarının listelendiği ayrı bir sayfa oluşturmak istiyorsunuz ve sitenizde 10bin kullanıcı var; herhalde bu durumda 10bin sayfa görünümünü tek tek oluşturmakla uğraşmak istemezsiniz :)
Devam edip argument kullanıma ilişkin bilgilere geçmeden önce, başta yazdığım bir bilginin tam olarak doğru olmadığını belirtip bu konuyu biraz açmak istiyorum. Daha önceden Argument değerlerinin URL'den alındığını söylemiştim. Aslında bu durum görüntüye göre değişiklik gösterebilmektedir. Örneğin sayfa görüntüsü argument değerini doğrudan URL'den alırken, blok görüntüsü için hazır bir kaynak yoktur. Bu yüzden bloklar için konunun ilerleyen bölümlerinde bahsedeceğim şekilde php kodu kullanarak argument değerini URL'den kendimiz alıp vermemiz gerekiyor. Dolayısıyla argument kullanarak oluşturduğunuz bir blok görüntüsü çalışmıyorsa, görünümün argument değerinin URL'den kendi alacağını düşünerek bir yanlış yapmış olabilirsiniz. Bu ayrıntıyı şimdiden aklınızın bir kenarına yazmanız iyi olur.
Evet, artık görünüme Argument eklemeyle ilgili detaylara girebiliriz. Görünüme argument eklemek için Arguments kutusunun sağ üst köşesindeki "+" düğmesine tıklayarak mevcut argument listesini açıyor ve buradan içerikleri süzmek için kullanmak istediğimiz argument'ı işaretleyerek Add'e tıklıyoruz.

Argument seçildikten sonra oldukça detaylı bir ayar kutusu çıkıyor karşımıza. Burada argument için kullanılacak ilişkiden, url'de argument bulunamaması durumunda yapılacak işleme ya da argument'ın bulunması durumunda geçerliği olup olmadığının kontrolüne kadar birçok konuda tercihimizi belirtebiliyoruz. Şimdi bunları sırayla inceleyelim:

- [1] Relationship: Eğer görünüme bir ilişki eklediyseniz burada bu argument için kullanılacak ilişkiyi seçebilirsiniz (bkz. Views: Relationships dersi). Görünüme eklenmiş bir ilişki olmaması durumunda bu kısım gösterilmeyecektir.
- [2] Başlık: Normalde görünümüm başlığını Basic Settings kutusundaki Başlık bölümünden ayarlıyoruz. Ancak başlığın url'ye yani argument değerine göre değişmesini istiyorsak burada standart başlığın yerine geçecek bir başlık tanımlayabiliriz. Başlıkta argument değerlerini "%" işareti ile kullanabiliyoruz. Örneğin görünümdeki ilk argument'ın değeri için "%1", eklenmişse ikinci argument'ın değeri için "%2" gibi. Dolayısıyla Kullanıcı: İsim argument'ı için şöyle bir kullanım mümkün: "%1 kullanıcısının içerikleri".
- [3] Action to take if argument is not present: Eğer url'de argument bulunamıyorsa bu durumda görünümün nasıl bir sonuç göstereceğini seçiyoruz. Seçeneklerimiz şunlar:
- Display all values: Argument ile herhangi bir süzme işlemi yapmadan diğer kriterlere uyan sonuçların hepsini gösterir.
- Hide view / Page not found (404): Boş sonuç döndürür. Bu durumda sayfa görüntüleri için "404: sayfa bulunamadı" hatası verilirken, bloklar ise gösterilmez.
- Display empty text: Basic Settings kutusunda girilen Empty Text metnini gösterir. Genellikle "herhangi bir sonuç bulunmadı" tarzında mesajlar göstermek için kullanılır.
- Summary (alfabetik veya ters alfabetik sırada): Görünümün kendisi yerine argument'ın alabileceği değerlerin listesi sunulur. Bu listedeki değerler link şeklindedir ve herhangi birine tıklandığında argumentin o değeri için süzülmüş görünüm gösterilir. Genellikle belirli bir içerik türü için kullanılan taksonomi terimlerinin listesini sunmak veya içerikler için alfabetik bir ABC indeksi oluşturmak için kullanılır.
- Provide default argument: Url'de argument bulunmaması durumunda varsayılan bir argument değerinin kullanılmasını sağlar. Bu seçenek tercih edildiğinde ek seçenekler sunulmaktadır (ilişkiler ve eklentiler bu seçeneklerin sayısını arttırabilir). Bunlar:
- Fixed entry: Sabit bir değer
- Node ID from URL: URL'de düğüm id değeri bulunuyorsa bu değeri alır (ör: node/1/edit yolu için "1" değerini alır).
- User ID from URL: Bir önceki gibi ancak düğüm id değeri yerine kullanıcı id değerini arar ve kullanır.
- PHP Code: Argument değerini php kodu ile hesaplayabilir ve return komutu ile görünüme gönderebilirsiniz. Anlatımın başında verdiğim bilgiyi aklınızın bir kenarına yazmanızı söylemiştim; şimdi o bilgiyi tekrar hatırlayalım: "bloklar argument değerini doğrudan URL'den alamazlar". İşte bloklar için genellikle bu seçenek kullanılarak php kodu yardımıyla url'den alınan argument değeri blok görüntüsüne aktarılır. Örneğin user/1 yolundaki "1" değerini Kullanıcı: ID argument'ına aktarmak için şöyle bir kod kullanabilirsiniz (bu örneği kod kullanmadan bir üstteki User ID from URL seçeneği ile de yapabilirsiniz tabii ki ama burada amaç örnek göstermek):
if (arg(0) == 'user' && is_numeric(arg(1))) {
return array(arg(1));
}
Bu kodda URL'deki argument değerlerini arg() fonskiyonu ile alıyoruz.arg(0)=='user'ile ilk argument değerinin user olduğundan emin oluyor,is_numeric(arg(1))ile de ikinci argument değerinin sayısal bir değer olup olmadığına bakıyoruz. Eğer bu iki koşul da sağlanırsa yukarıdaki php kodu Kullanıcı: ID argument değeri için user/1 yolundaki "1" değerinireturn array(arg(1));ile döndürüyor. Sonuçta sitemizin kullanıcı profil sayfalarında göstermek için atayacağımız bu argument'a sahip bir Views bloğu hangi üyenin profiline bakılıyorsa bunu url'den anlayıp o üye ile ilgili içeriği sunacak. Yani user/1 sayfasında id'si bir olan admin kullanıcısı ile ilgili içerikler, user/2 sayfasında id'si 2 olan kullanıcıyla ilgili olan sunulacak.
- [4] Wildcard: 3'teki Display All Values seçeneğine benzer bir sonuç veren bir kullanım sunar. URL'deki argument yerine Wildcard olarak tanımlanan karakter veya kelime kullanıldığında argument devre dışı kalır ve diğer kriterlere uyan tüm sonuçlar gösterilir. Yani Wildcard olarak "hepsi" girdiysek, taxonomy/term/1 sayfası sadece id'si 1 olan terim ile etiketlenmiş içerikleri gösterirken taxonomy/term/hepsi herhangi bir terim ile etiketlenmiş tüm içerikleri gösterecektir.
- [5] Wildcard Title: 2'de tanıtılan başlık kısmında argument değerini %1 ile başlığa taşıyabiliyorduk. Ancak Wildcard'ın kullanıldığı bir sayfada sayfa başlığını tekrardan düzenlemek gerekebilir. Örneğin 2'deki başlığı "%1 fotoğrafları" olarak girdiysek, Wildcard başlığı olarak da "Tüm fotoğraflar" gibi bir başlık kullanmak uygun olacaktır.
- [6] Validator: Sistem görünümün oluşturulması sırasında argument'i görünüm sorgusuna dahil ederken Validator aşamasına geldiğinde artık elinde doğru ya da yanlış bir argument değeri var demektir. Sıra bu değerin belirli parametrelere uygunluğunu kontrol etmeye geldi. Sonuçta yanlış bir argument değerini görünüme dahil etmek istemeyiz, dolayısıyla bu bize bir kontrol sağlar. Kontrolün yanında ayrıca bir de ekstradan süzme yapma şansımız da vardır. Buradaki seçeneklerimiz şöyle:
- Basic Validation: ekstra bir kontrol veya süzme yapılmaz.
- Düğüm: Argument değerinin bir düğüm id değeri olup olmadığı ve istenirse görünümün sunulacağı kişinin o düğümlere eişim izni olup olmadığı kontrol edilir. Ayrıca argument'ın sadece belirtilen içerik türleri için dikkate alınmasını sağlayabiliriz.
- Taksonomi terimi: Argument değerinin bir terim id'si, terim ismi ya da terim eşanlamlısı olup olmadığı kontor edilebilir. Ayrıca bu argument'ın sadece belirtilen sözlükler için dikkate alınmasını sağlayabiliriz.
- Php Code: Kendi doğrulamamızı php kodu şeklinde yazabiliriz. Kod sonucunda TRUE ya da FALSE değeri döndürülmesi gerekir. Php kodu seçeneği seçiliyken herhangi bir sonuç döndürülmemesi FALSE döndürülmüş olarak kabul edilir.
- [7] Action to take if argument does not validate: 3'te argument değeri bulunamaması durumunda ne yapılmasını söylüyorduk, burada ise argument değerinin doğrulanaması durumunda ne yapılacağını söylüyoruz. Seçenekler 3 ile aynı, sadece varsayılan argument değeri girilmesini sağlayan Provide default argument seçeneği yok.
- [8] Allow multiple terms per argument: Seçilirse argument'lar için birden fazla değer verilebilir. Örneğin Taksonomi: Term ID argument'ı, taxonomy/term/1,2,3 veya taxonomy/term/1+2+3 sayfalarında terim id'si 1, 2 ve 3 olan terimlerden herhangi biriyle etiketlenmiş içerikleri listeler.
- [9] Exclude the argument: Bu noktaya kadar anlatınların hepsi argument değerini sağlayan içeriklerin listeleneceği varsayımınına göre yazıldı. Ancak amaç bunun tam tersi yani bu değeri sağlayan içeriklerin dışında kalan içerikleri listelemek de olabilir. Bu durumda bu seçeneği işaretlemek gerekiyor.
Gerekli tüm ayarlamaları yaptıktan sonra Güncelle düğmesine tıklayarak argument'ı görünümümüze ekliyoruz. Dilersek benzer şekilde görünüme başka argument'lar da ekleyebiliriz. Ancak burada dikkat etmemiz gereken nokta, argument'ların URL'de Arguments kutusunda listelendikleri sırada aranacaklarıdır. Tabii bir de görünümde kullanabileceğimiz argument'ların görünümün içerik türüne (düğüm, yorum, kullanıcı, vs.), görünüme eklenmiş ilişkilere ve sitemizde kurulu eklentilere göre değişebileceğini de unutmayın.
- 2491 kez okundu
