تشغيل لوحة إعلانات كريمة من خلال جهاز التحكم الأمامي في ZEND

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

سؤال

حاولت أن أسأل هذا مرة واحدة، لكنني أعتقد أن سؤالي السابق كان غير واضح جدا بالنسبة لك يا رفاق للإجابة عليه، لذلك سأحاول مرة أخرى

أقوم بإنشاء موقع إلكتروني باستخدام إطار Zend، وأنا أحاول تضمين أفقية لوحة رسائل Premade. حتى الآن، لقد جعلتها تعمل من خلال عدم تشغيله من خلال Bootstrap الخاص بي باستخدام ملف .htaccess الخاص بي. ما أود القيام به، أود القيام به هو أن أكون قادرا على تشغيله من خلال Bootstrap الخاص بي حتى أتمكن من استخدام تخطيطات وفوساتنا التي تم إنشاؤها مسبقا والتي يمكنني تشغيلها فقط عبر ZEND.

على سبيل المثال، لدي علامة واحدة في النظام الذي يعمل من خلال Zend_Auth. لدي بيانات الشخص المحفوظة في Zend_Session. قمت بتحميل ملف تعريف المستخدم من خلال وحدة تحكم. لدي طبقة خدمة للنموذج الذي يتصل بقاعدة البيانات الخاصة بي نيابة عن المستخدم. هناك العديد من التبعيات الأخرى التي، بقدر ما أستطيع أن أقول، أحتاج إلى bootstrap ل.

Phorum هو أساسا مجرد مجموعة كبيرة من البرامج النصية PHP التي تعتمد على الحصول على المعلمات. كانت فكرتي الأصلية لاستخدام وحدة تحكم لتقديم البرامج النصية. مثال على ما يبدو أوري هو هذا هو: my-site.com/messageBoard/list.php؟1،3. مع لوحة MessialBoard كونها MessageBoardController. في حين أن هذا يعمل في قائمة التحميل، فإنه لا يستطيع التقاط معلمات Get، والذي يعتمد على ذلك. نظرا للطبيعة المعقدة للملاحة، سيكون من المستحيل تقريبا أن أكون قادرا على الذهاب وجعلها شيء مثل my-site.com/messageBoard/List/1/3. أو أي شيء على طول تلك الخطوط. يجب أن يكون URI هو السابق، حيث تم بناؤه في الظهور.

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

هل لدى أي شخص وسيلة يمكنني القيام بذلك؟ ما أحتاج إليه، في جوهره، هو أخذ البرنامج النصي (EX. List.php؟ نسق. بقدر ما أستطيع أن أقول، لا يبدو أن التجسد قادرا على التقاط المعلمات الحصول عليها. هل يعرف أحد بأي طريقة يمكنني القيام بذلك.

أي أفكار ستكون موضع تقدير لدراسة. شكرا لك على مساعدتك!

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

المحلول

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

بادئ ذي بدء - يجب أن يكون طريقك (في اتفاقيات Application.ini (في zf1.9)

resources.router.routes.phorum.type = "Zend_Controller_Router_Route_Regex"
resources.router.routes.phorum.route = "messageboard(?:/(.*))?"
resources.router.routes.phorum.defaults.controller = "phorum"
resources.router.routes.phorum.defaults.action = "wrapper"
resources.router.routes.phorum.defaults.module = "default"
resources.router.routes.phorum.defaults.page = "index.php"
resources.router.routes.phorum.map.1 = "page"

الآن جميع الطلبات ل messageboard/whatever.php يجب توجيهها إلى phorumcontroller :: Wrapperaction () ولديها "أي شيء.php" $this->getRequest()->getParam('page')

ثم أنه ينبغي تصبح مسألة بسيطة لإعادة توجيه عمل "المجمع" الخاص بك لتضمين ملف php المناسب من phorum. لقد أضفت بعض الكود من وحدة تحكم مماثلة لدي (على الرغم من أن الألغام لم يتضمن ملفات PHP - كان المقصود فقط عن خدمة دليل المحتوى)

public function wrapperAction() {
   $phorumPath = APPLICATION_PATH."../ext/phorum/";

   $file = realpath($phorumPath . $this->getRequest()->getParam('page');
   if (!$file || !is_file($file)) throw new Exception("File not found");

   // disable default viewRenderer - layout should still render at this point
   $this->_helper->viewRenderer->setNoRender(true);     

   // determine extension to determine mime-type
   preg_match("#\.([^.]+)$#", $filename, $matches);
   switch (strtolower($matches[1]))
   {
     case "php":

       // patch the request over to phorum
       include($file);
       return; // exit from the rest of the handler, which deals specifically
       // with other types of files

     case "js": 
       $this->getResponse()->setHeader('Content-Type', 'text/javascript'); 
       ini_set('html_errors', 0);
       break;
     case "css": 
       $this->getResponse()->setHeader('Content-Type', 'text/css'); 
       ini_set('html_errors', 0);
       break;
     case "html":
       $this->getResponse()->setHeader('Content-Type', 'text/html');
       break;
     // you get the idea... add any others like gif/etc that may be needed
     default:
       $this->getResponse()->setHeader('Content-Type', 'text/plain'); 
       ini_set('html_errors', 0);
       break;
   }

   // Disable Layout
   $this->_helper->layout->disableLayout();

   // Sending 304 cache headers if the file hasn't changed can be a bandwidth saver
   $mtime = filemtime($fn);  
   if ($modsince = $this->getRequest()->getServer('HTTP_IF_MODIFIED_SINCE'))
   {
     $modsince = new Zend_Date($modsince);
     $modsince = $modsince->getTimestamp();

     if ($mtime <= $modsince) {
       $this->getResponse()->setHttpResponseCode(304); 
       return;
     }
   }

   $this->getResponse()->setHeader('Last-Modified', gmdate("D, d M Y H:i:s",$mtime). " GMT");
   readfile($fn);
}

لو سمحت - تأكد من اختبار هذا الرمز للأشخاص الذين يحاولون حرفة الطلبات مع .., ، إلخ في الصفحة.

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