Nasıl Vücut Anchor Etiketler var Zend Framework URL'ler yaz miyim?

3 Cevap php

Zend Framework kurmak standart MVC kullanarak, ben boyunca çapa sahip sayfaları görüntülemek için mümkün olmak istiyorum. Şu anda ben sadece. Phtml dosyası içinde istediğiniz '# çapa' anlamsız bir parametre ekliyorum.

<?= $this->url(array(
    'controller'=>'my.controller',
    'action'=>'my.action',
    'anchor'=>'#myanchor'
));

Bu gibi / my.controller / my.action / çapa / # myanchor bakmak için URL'yi ayarlar

Bunu gerçekleştirmek için daha iyi bir yolu var mı? Çapa bağlantı gidildikten sonra, fazladan öğe parametre doğrusu olur olmaz bir şeydir kullanıcının URL'sini set alır.

3 Cevap

olasılıklardan biri URL Helper geçersiz kılmak için, ya da yeni bir tane oluşturmak için.

class My_View_Helper_Url extends Zend_View_Helper_Url
{    
    public function url(array $urlOptions = array(), $name = null, $reset = false, $encode = true)
    {
    	if (isset($urlOptions['anchor']) && !empty($urlOptions['anchor']))
    	{
    		$anchor = $urlOptions['anchor'];
    		unset($urlOptions['anchor']);
    	}
    	else
    	{
    		$anchor = '';
    	}

        return parent::url($urlOptions, $name, $reset, $encode).$anchor;
    }
}

bu yardımcı geçersiz url yardımcısı, sorun url çapa dönüßtürülür çünkü, 'çapa' olarak adlandırılan parametresini kullanamazsınız olmasıdır.

Eğer senin örneğindeki gibi arayacak

<?= $this->url(array(
    'controller'=>'my.controller',
    'action'=>'my.action',
    'anchor'=>'#myanchor'
));

Umarım işe yarar

Eğer URL'ler bir fragment id uygulanması hakkında gidebiliriz birden fazla yolu vardır. Aşağıda bazı seçenekler her biri için bazı artıları ve eksileri ile birlikte vardır.

Direct Add

Siz sadece url() çağrısından sonra "#$fragment_id" ekleyebilirsiniz. Inelegant, ama basit. (Sadece yani bir veya iki sayfa) çok sayfa çapa kullanmak istemiyorsanız, bu gitmek için yoludur.

Write a custom url() helper

Sen url() fragmanı kimliği için isteğe bağlı 5 argüman ekleme özel bir sürümünü yazabilirsiniz:

class My_View_Helper_Url extends Zend_View_Helper_Url
{    
    public function url(array $urlOptions  = array(), $name   = null, 
                              $reset       = false,   $encode = true, 
                              $fragment_id = null)
    {
        $uri = parent::url($urlOptions, $name, $reset, $encode);

        if(!is_null($fragment_id)) {
            $uri .= "#$fragment_id";
        }

        return $uri;
    }
}

Bu şekilde, çapa (ve çapa / fragmanı id) bilgiler kesinlikle View bölge withing tutulur. Bu genel kullanım için iyidir, ancak varsayılan yol için biraz hantal alabilirsiniz. Ayrıca, bu hala çok bazı kullanımlar için sabit kodlanmış biraz.

Write a custom Route class (Extreme)

Üçüncü bir seçenek olarak, Zend_Controller_Router_Route sınıfı (es) özel bir sürümünü yazabilirsiniz, özellikle assemble($data, $reset, $encode) yöntemi (match($path) yöntem varsayılan fragmanı kimlikleri yok sayıyor .)

Bu yöntem kullanılarak, yalnızca araç kullanımı (bu yöntem herhangi bir değişkenin devre dışı parçası id temel için kullanılabilir) spesifik yolları ile sınırlıdır, özellikle de oldukça zor, ama çok yararlı olabilir.

Caveat

Parçası kimlikleri kullanılıyorsa belirli noktalar must dikkate alınmalıdır. Örneğin, sorgu dizeleri aksi halde, sorgu dizesi PHP tarafından görmezden, URI fragmanı id önüne var. Ancak, çoğu ZF uygulamaları sorgu dizeleri kullanımını önlemek eğilimindedir, bu yüzden bir sorun olmayabilir.

Ben diğer yardımcı (yönlendirici eylem yardımcısı gibi) aynı davranış olacaktır, çünkü özel bir rota sınıf yazmanın Extreme yöntem daha iyi olduğunu düşünüyorum.