سؤال

خلفية

أستخدم Word Widget كعرض عرض جزئي له وحدة تحكم خاصة بها (وبالتالي أفعاله الخاصة) ويتم وضعها في جميع الصفحات تقريبًا. أقوم بتنفيذ عرض هذا عبر HMVC ، وهذا رائع.

مشكلة

الآن ، المشكلة هي أن الأدوات نفسها تنفذ الإجراءات. فكر في عنصر واجهة مستخدم للتسوق. يتم وضع هذه القطعة في جميع الصفحات حتى يتمكن المستخدم من رؤية أغراضه/لها طوال الوقت. والضغوط لها إجراءات مرتبطة بها ، على سبيل المثال: removeItem ، refreshcart ، applicedDiscountCoupon ، وما إلى ذلك.

<a href='<?site_url()?>/cart/cart/removeitem/the_item_id'>Remove this item</a>

موافق. الآن ينقر المستخدم على الارتباط ووحدة CART ووحدة التحكم العربة ويتم تنفيذ الإجراء ، يجب أن يبدو الإجراء شيئًا مثل:

function removeitem($itemid)
{
     // remove the item from db
     ...

     // "load the view"  ???
}

كما ترون ، سؤالي هو كيفية تحميل العرض في وحدة HMVC. الشيء هو أنه إذا قمت بتحميل طريقة عرض العربة فقط ، فستظهر فقط عربة التسوق الخاصة بي ، ولا يمكنني إعادة توجيه الصفحة الرئيسية أو تحميلها فقط لأنها يمكن أن تكون أي صفحة رئيسية ، أي: يمكن أن تكون العربة في أي صفحة رئيسية (حدد منتجًا ، واصل الشراء ، ومشاهدة تفاصيل المنتج ، ومعلومات الفواتير ، والخروج ، إلخ). :/

شيء آخر: شرط هو أنه لا يمكنني استخدام أياكس في هذا المشروع.

هل تعرف كيف تتعامل HMVC مع هذا؟

شكرا مقدما.

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

المحلول

موافق. لا حظ مع المجتمع. ومع ذلك وجدت حل بديل. الأمل سيكون مفيدًا لشخص ما.

HMVC ليس لديه حل طبيعي لهذا. لذلك قررت استخدام هذا الحل البديل:

  1. في كل وحدة تحكم رئيسية (أي ، لا عنصر واجهة مستخدم ، لا توجد طريقة عرض جزئية) ، أمسك عنوان URL الحالي في الجلسة (/controllers/keep_buying.php):

    class Keep_buying extends Controller
    {
        function Keep_buying()
        {
            parent::Controller();
            $this->session->set_userdata('main_uri', uri_string()); 
        }
        ...
    }
    
  2. ثم في جهاز العرض الجزئي الخاص بي (طريقة عرض وحدة HMVC) لدي رابط عادي إلى وحدة تحكم القطعة (/modules/cart/views/cart_show.php):

    <a class="button" href="cart/cart/additem">Add Item</a>  
    
  3. في إجراء وحدة التحكم (إجراء وحدة التحكم في وحدة HMVC) ، أستعيد الصفحة الرئيسية الحالية ، وقم بالأشياء ، ثم إعادة توجيه إلى تلك الصفحة ، والتي ستدخل ضمنيًا تدفق القطعة (بسبب HMVC).

    class Cart extends Controller
    {
        ...
        function additem()
        {
            $to_redirect = $this->session->userdata('main_uri');
            // add-item work stuff...
            redirect($to_redirect);
        }
    }
    

هذا هو. ليس النهج المثالي IMHO ، ولكن يعمل.

نصائح أخرى

أعلم أن هذا الموضوع يبلغ من العمر أكثر من عام ، ومع ذلك فقد كنت غوغل لاكتساب المزيد من البصيرة في الهيكل الذي يجب أن يأخذه برنامج HMVC ، وكيف يمكن تنفيذه في CI ، ولم أجد الكثير من الإجابات.

أنا متأكد من أنه بالنسبة لكي تعمل HMVC بشكل صحيح ، مع دمج العديد من الأدوات المصغرة على جميع صفحات الموقع ، يجب أن يتم تنظيمها بواسطة وحدة تحكم رئيسية واحدة. سيكون هذا هو المستوى الأعلى في التسلسلات الوحيدة. اسمحوا لي أن أحاول إعطاء مثال:

لديك موقع به عنصر واجهة مستخدم للتسوق في كل صفحة. عندما ترغب في استخدام وظيفة العربة ، ستحتاج إلى الارتباط بالطرق في وحدة CART ، على سبيل المثال:

<a href="cart/add/<?=$item?>">add</a>

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

<a href="site_controller/cart_add/<?=$item?>">add</a>

ثم في وحدة تحكم الموقع ، سيتم ببساطة تمرير استدعاء الطريقة إلى العرض الرئيسي

<?php
function cart_add($item){
$data['cart'] = 'cart/add/'.$item;
$this->load->view('main', $data);
}
?>

سوف يستدعي العرض عنصر واجهة المستخدم مع ما يلي:

<?php echo modules::run($cart); ?>

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

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

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