سؤال

لدي تطبيق CakePHP والذي سيعرض في وقت ما طريقة عرض مع وسائط المنتج (الصور أو مقاطع الفيديو) وأريد أن أعرف ما إذا كان هناك طريقة لتضمين طريقة عرض أخرى تهدد الفيديو أو الصور، اعتمادًا على العلامة.أريد استخدام هذه "المشاهدات الصغيرة" لعدة أغراض أخرى، لذلك يجب أن تكون "مثل" مكون الكعكة لإعادة استخدامها.

ما تقترحونه يا رفاق لاستخدامه في اتفاقيات الكيك (وعدم استخدام الخام include('') يأمر)

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

المحلول

ألق نظرة على هذا وصلة وبشكل أكثر تحديدا عناصر- جزء من صفحة الدليل تلك، يجب أن يخبرك بكل ما تحتاج إلى معرفته

نصائح أخرى

من أجل الحصول على المعلومات هنا في حالة تعثر شخص ما في هذا الأمر، من المهم ملاحظة أن الحل يختلف اعتمادًا على إصدار CakePHP.

للكيكPHP 1.1

$this->renderElement('display', array('flag' => 'value'));

في وجهة نظرك، ثم في /app/views/elements/ يمكنك إنشاء ملف يسمى display.thtml, ، أين $flag سيكون له قيمة كل ما تمرره إليه.

للكيكPHP 1.2

$this->element('display', array('flag' => 'value'));

في وجهة نظرك، ثم في /app/views/elements/ يمكنك إنشاء ملف يسمى display.ctp, ، أين $flag سيكون له قيمة كل ما تمرره إليه.


في كلا الإصدارين، سيكون للعنصر حق الوصول إلى جميع البيانات التي يمكن للعرض الوصول إليها + أي قيم تمررها إليه.علاوة على ذلك، وكما أشار أحدهم، requestAction() يعد أيضًا خيارًا، ولكنه يمكن أن يؤثر سلبًا على الأداء إذا تم إجراؤه دون استخدام ذاكرة التخزين المؤقت، نظرًا لأنه يجب أن يمر بجميع الخطوات التي قد يتطلبها الإجراء العادي.

في وحدة التحكم الخاصة بك (في هذا المثال وحدة تحكم المنشورات).

function something() {
    return $this->Post->find('all');
}

في دليل العناصر الخاص بك (app/views/element) قم بإنشاء ملف يسمىposts.ctp.

في المشاركات.ctp:

$posts = $this->requestAction('posts/something'); 
foreach($posts as $post): 
    echo $post['Post']['title']; 
endforeach; 

ثم في نظرك:

<?php echo $this->element('posts'); ?>

هذا مأخوذ في الغالب من كتاب CakePHP هنا:إنشاء عناصر قابلة لإعادة الاستخدام باستخدام requestAction

أعتقد أن استخدام requestAction مكلف للغاية، لذا ستحتاج إلى النظر في التخزين المؤقت.

ببساطة استخدم:

<?php include('/<other_view>.ctp'); ?>

في .ctp ينتهي الإجراء الخاص بك.

على سبيل المثال، إنشاء وظيفة مؤرشفة

function archived() {
  // do some stuff
  // you can even hook the index() function
  $myscope = array("archived = 1");
  $this->index($myscope);
  // coming back, so the archived view will be launched
  $this->set("is_archived", true); // e.g. use this in your index.ctp for customization
}

ربما قم بضبط إجراء الفهرس الخاص بك:

function index($scope = array()) {
  // ...
  $this->set(items, $this->paginate($scope));
}

سيكون archive.ctp الخاص بك:

<?php include('/index.ctp'); ?>

إعادة استخدام مثالية لرمز إجراءات وحدة التحكم وطرق العرض.

بالنسبة إلى CakePHP 2.x

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

راجع الدليل للحصول على معلومات أكثر/أفضل

http://book.cakephp.org/2.0/en/views.html#extending-views

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

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

أرغب في استخدام تلك "المناظر الصغيرة" لعدة أغراض أخرى ، لذلك يجب أن تكون "مثل" مكون الكيك ، لإعادة الاستخدام.

يتم ذلك باستخدام "المساعدين"، مثل الموصوفة هنا.لكنني لست متأكدًا من أن هذا هو ما تريده حقًا.ال "عناصر"يبدو الاقتراح صحيحًا أيضًا.يعتمد الأمر بشكل كبير على ما تحاول تحقيقه.سنتى...

في CakePHP 3.x يمكنك الاستخدام البسيط:

$this->render('view')

سيؤدي هذا إلى عرض العرض من نفس الدليل مثل العرض الأصلي.

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