كيف يمكنني تعيين title_for_layout في PagesController الافتراضي؟

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

  •  26-09-2019
  •  | 
  •  

سؤال

لا أستطيع ضبط title_for_layout في PagesController الذي يأتي افتراضيًا مع CakePhP 1.3.

أنا أستخدم الكود التالي في وظيفة العرض:

$this->set('title_for_layout','some title');

ما الخطأ الذي افعله؟

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

المحلول

في وحدة التحكم الخاصة بك ، القيمة المقابلة $this->pageTitle.

تحديث

عفوًا ، كما لوحظ في التعليقات ، هذا هو الحل 1.2. 1.3 تشمل الاحتمالات (بعد إجراء بعض الأبحاث):

  1. هل تضمن ذلك $title_for_layout يتم صدىه في التصميم
  2. وضع $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'; }

هذا سوف يفعل الخدعة.

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