كيف يمكنني تعيين title_for_layout في PagesController الافتراضي؟
-
26-09-2019 - |
سؤال
لا أستطيع ضبط title_for_layout
في PagesController الذي يأتي افتراضيًا مع CakePhP 1.3.
أنا أستخدم الكود التالي في وظيفة العرض:
$this->set('title_for_layout','some title');
ما الخطأ الذي افعله؟
المحلول
في وحدة التحكم الخاصة بك ، القيمة المقابلة $this->pageTitle
.
تحديث
عفوًا ، كما لوحظ في التعليقات ، هذا هو الحل 1.2. 1.3 تشمل الاحتمالات (بعد إجراء بعض الأبحاث):
- هل تضمن ذلك
$title_for_layout
يتم صدىه في التصميم - وضع
$this->set()
رمز في العرض وليس في وحدة التحكم
نصائح أخرى
إذا كنت ترغب في تقليد سلوك Cake 1.2 ، فيمكنك القيام بما يلي:
في app_controller الخاص بك ، قم بإنشاء الطريقة التالية:
في التطبيق/app_controller.php (قد تحتاج إلى إنشاء هذا الملف إذا لم تقم بالفعل)
public $pageTitle;
public function beforeRender() {
$this->set('title_for_layout', $this->pageTitle);
}
ثم في أي من أساليب الإجراء الخاصة بك ، يمكنك بعد ذلك استخدام pagetitle كما تفعل في 1.2.
public function index() {
$this->pageTitle = 'Some Title';
}
سيتم استدعاء طريقة beforerender () بعد الانتهاء من وحدات التحكم الخاصة بك ، ولكن قبل تقديم التخطيط ، مما يسمح لك بتعيين المتغيرات للتخطيط.
في طريقة الإجراء ، جرب هذا:
function index()
{
$this->pageTitle= 'Your Title';
}
فقط اعتقدت أنني سأضيف إلى أي أشخاص جدد يجدون هذا الحل ، يمكنك القيام به $this->set('title', $title);
في CakePhP 1.3 داخل وحدة التحكم وسيتم تقديم العنوان تلقائيًا.
يمكنك استخدام :
$this->assign('title', 'Some title');
وفي CTP:
<title><?= $this->fetch('title'); ?></title>
تعمل في CakePhP 3.0
لـ Cakephp 3.x ،
يمكنك اتباع النصيحة هنا
بشكل أساسي،
داخل UsersController.php
:
$this->set('title', 'Login');
داخل src/Template/Layouts/default.ctp
فوق ال $this->fetch('title');
اكتب:
if (isset($title)) {
$this->assign('title', $title);
}
يستخدم beforeRender()
في حين أن. ضع ما يلي في AppController:
class AppController extends Controller {
var $content;
function beforeRender() {
$this->set('content',$this->content);
}
}
وفي وحدة التحكم ، يمكنك فقط القيام:
function index() {
$this->content['title'] = '123'; }
هذا سوف يفعل الخدعة.