كيف يمكنني كتابة عناوين المواقع الإطار زند التي مرساة الكلمات في الجسم؟

StackOverflow https://stackoverflow.com/questions/405338

سؤال

وعن طريق تعيين MVC القياسية حتى في الإطار زند، أريد أن أكون قادرة على عرض الصفحات التي تحتوي المراسي في جميع أنحاء. الآن أنا فقط إضافة المعلمة لا معنى لها مع '#anchor "التي أريد داخل ملف .phtml.

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

وهذا يضع URL لتبدو وكأنها /my.controller/my.action/anchor/#myanchor

هل هناك طريقة أفضل لتحقيق ذلك؟ بعد التنقل إلى الارتباط مرساة، ويحصل على تعيين معلمة بند إضافي في URL الخاص بالمستخدم الذي هو شيء أنا لا ترغب في ذلك.

هل كانت مفيدة؟

المحلول

واحد من الاحتمالات هو تجاوز المساعد URL، أو إنشاء واحدة جديدة.

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;
    }
}

وهذا المساعد تجاوز رابط المساعد، المشكلة هي أنه لا يمكنك استخدام المعلمة يسمى "مرساة"، لأنه سوف تتغير إلى مرساة في رابط.

وسوف يطلق عليه كما هو الحال في نمو طفلك سبيل المثال

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

وآمل أن يساعد

نصائح أخرى

وهناك طرق متعددة يمكن أن تذهب نحو تنفيذ جزء معرف في عناوين المواقع الخاصة بك. وفيما يلي بعض الخيارات، جنبا إلى جنب مع بعض الايجابيات والسلبيات لكل منها.

إضافة المباشرة

هل يمكن ببساطة إضافة "#$fragment_id" بعد المكالمة url() الخاص بك. ائقة، ولكن بسيطة. إذا كنت لا تستخدم المراسي صفحة بكثير (أي واحد أو صفحتين فقط)، وهذا هو الطريق للذهاب.

كتابة مساعد url() مخصصة

هل يمكن إرسال نسخة مخصصة من url() إلحاق حجة 5TH اختياري لمعرف جزء:

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;
    }
}

وبهذه الطريقة، يتم الاحتفاظ مرساة (ومرساة / جزء معرف) معلومات WITHING بدقة عالم من عرض. هذا أمر جيد للاستخدام العام، ولكن يمكن الحصول على القليل غير عملي للتوجيه الافتراضي. أيضا، وهذا لا يزال قليلا جدا الثابت تلوينها لبعض الاستخدامات.

كتابة فئة Route مخصصة (المتطرفة)

وأما الخيار الثالث، يمكن أن تكتب نسخة مخصصة للطبقة Zend_Controller_Router_Route (الخانات)، وتحديدا في طريقة assemble($data, $reset, $encode) (يتجاهل طريقة match($path) هويات جزء افتراضيا).

وباستخدام هذه الطريقة يمكن أن تكون خادعة تماما، ولكنها مفيدة جدا، خاصة إذا تم استخدام يقتصر فقط على طرق محددة (يمكن استخدام هذا الأسلوب لقاعدة هوية جزء من أي متغير).

التحذير

واعتبارات معينة <م> يجب أن تؤخذ بعين الاعتبار عند استخدام هويات جزء. على سبيل المثال، سلاسل الاستعلام يجب أن تسبق معرف جزء في اوري، وإلا، سلسلة الاستعلام تجاهلها من قبل PHP. ومع ذلك، تميل معظم التطبيقات ZF لتجنب استخدام سلاسل الاستعلام، لذلك قد لا تكون هذه القضية.

والمساعد عرض رابط يقبل مفتاح 'جزء' للخيار الثالث:

url('[route]',array([params]),array('fragment'=>'anchor'));

وهذا تلقائيا في نهاية عنوان الموقع مع #anchor.

و-بفضل Exlord

وأعتقد أن طريقة المدقع كتابة فئة الطريق المخصص هو أفضل لالمساعد الآخر سوف يكون له نفس السلوك (مثل المساعد عمل معيد التوجيه).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top