سؤال

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

لدي طريقة عرض في /design/adminhtml/default/default/templates/upgradecheck/view.phtml

ثم لدي الوحدة المخصصة الخاصة بي (Myname_Upgradecheck).

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

class Myname_Upgradecheck_Block_Adminhtml_Upgradecheck extends Mage_Adminhtml_Block_Template {
public function showCacheCount()
{
    $cachecheck = Mage::getModel('upgradecheck/cachecheck')->getCollection();
    $check = array();
    foreach($cachecheck as $cache){
        if ($cache->getValue() != 0) {
            array_push($check, $cache->getCode());
        }
    }
    if (count($check) != 0) {
        return count($check) . ' caches are enabled';
    }
    return 'No cache types are enabled';
}

}

في ملف view.phtml الخاص بي لدي فقط: echo $this->showCacheCount();

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

المحلول

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

أفترض ذلك upgradecheck/cachecheck هو نموذج مخصص يتم تعيينه على جدول ويحتوي هذا الجدول على عمود يسمى value.
في هذه الحالة، لا تحتاج إلى تحميل المجموعة الكاملة والتحقق من كل كيان بحثًا عن value مجال.
يمكنك الحصول مباشرة على عدد السجلات مع value ليس 0 مثل هذا:

class Myname_Upgradecheck_Block_Adminhtml_Upgradecheck extends Mage_Adminhtml_Block_Template {
    public function getEnabledCacheCount()
    {
        $cachecheck = Mage::getModel('upgradecheck/cachecheck')->getCollection();
        $cachecheck->addFieldToFilter('value', array('neq' => 0)); //this will filter only the records with value != 0.
        //now you can get directly the size of the collection;
        return $cachecheck->getSize();
    }
}

وفي القالب الخاص بك يمكنك القيام بذلك:

<?php $enabledCacheCount = $this->getEnabledCacheCount() ?>
<?php if ($enabledCacheCount > 0) : ?>
    <?php echo $this->__('%d caches are enabled', $enabledCacheCount)?> <!-- make use of the translation function -->
<?php else : ?>
    <?php echo $this->__('No cache types are enabled')?>
<?php endif;?>

أعلم أن القالب في هذا النموذج يحتوي فقط على كود php، ولكن الآن يمكنك بسهولة إضافة بعض العلامات حول الرسائل.على سبيل المثال أ <span class="green"> عندما تكون هناك ذاكرة تخزين مؤقت ممكّنة و <span class="red"> عندما لا تكون هناك ذاكرة تخزين مؤقت ممكّنة.
بهذه الطريقة يمكنك فصل المنطق عن العرض التقديمي.
إذا كان لديك مصمم ليس لديه معرفة كبيرة بـ PHP أو Magento، فيمكنك ببساطة توجيهه إلى هذا الملف وإخباره أن يقوم بعمله السحري.
إذا قمت بإخراج كل شيء من طريقة الفصل، فقد يرتبك شخص ما.

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