النتائج 1 إلى 9 من 9

الموضوع: سؤال في الـ MVC

  1. #1
    عضو فعال
    تاريخ التسجيل
    Dec 2008
    المشاركات
    1,897

    سؤال في الـ MVC



    السلام عليكم
    حياكم الله و اعذورنا على كثرة الأسئلة بس الواحد كل يوم يجرب يطلع له شيء جديد يسأل ليستفيد << الله يلعن اللقافة:funny:
    السؤال لهذا اليوم هو في الـ Model-View-Controller
    كيف يمكنني ارسل Data من المتحكم(ان صح التعبير) الى المستعرض(View) ثم اخذ قيمة من هذه الـ Data و اعيد ارسالها للمتحكم(Controller) الذي بدوره سيرسلها لـ Model و يعيد ارجاعها للمتحكم الذي سيرسلها للمستعرض << يازين الاسلوب :app:
    شرح عملي للسؤال :
    لدي سكربت مثلا مقالات أريد استعراض كل الأقسام و تحت كل قسم اخر أربعة مقالات جديدة من القسم نفسه .
    يعني يلزمني أولا طلب جميع الأقسام
    كود PHP:
    $data['cat_query'] = $this->Mcategory->get(); 
    جميل و ساقوم بعمل حلقة تكرار في ملف الـ View طبعاً ساقوم باخذ ID القسم و ارجعه للمتحكم الذي سيرسله للـModel ليجلب اخر اربعة مقالات مضافة
    كود PHP:
    $data['newArticle'] = $this->Mnew->getNew($cat->$id); 
    و الان ساعود لملف الـ View تحت اسم القسم ساقوم بعمل حلقة تكرار للاخر اربعة مقالات مضافة .
    معليش انا جديد على هذا النظام .
    فارشودنا و اصلحوا لنا اخطائنا اصلح الله اموركم .







  2. #2
    عضو فعال
    تاريخ التسجيل
    Dec 2008
    المشاركات
    1,897


    لا أحد يتعامل مع هذا النظام في برمجياته؟






  3. #3
    عضو فعال
    تاريخ التسجيل
    Dec 2008
    المشاركات
    1,897


    شكلي بنقل الموضوع لموقع أجنبي ان شاء الله اذا جاوبوني ارطح لكم الحل هنا..






  4. #4
    عضو فعال
    تاريخ التسجيل
    Jun 2008
    المشاركات
    1,600


    وعليكم السلام ورحمة الله وبركاته


    كيف يمكنني ارسل Data من المتحكم(ان صح التعبير) الى المستعرض(View) ثم اخذ قيمة من هذه الـ Data و اعيد ارسالها للمتحكم(Controller) الذي بدوره سيرسلها لـ Model و يعيد ارجاعها للمتحكم الذي سيرسلها للمستعرض << يازين الاسلوب :app:
    بغض النظر عن ما قلته(لم افهم جيدًا) فعلى حد علمي أن المتحكم هو حلقة الوصل بين اجزاء البرمجية.

    أي عند تشغيل البرمجية من ال index.php يتم استدعاء المتحكم
    المتحكم بدوره لديه اتصال مع الموديل ويمكنه اضافة أو ازالة تعديل ... البيانات التي في القاعدة على حسب ما يأتيه من المستعرض.

    التراسل بين الموديل والمتحكم واضح لأن المتحكم يستدعي ( يعمل include) للموديل
    التراسل بين المستعرض والمتحكم يتم بالشكل التالي:
    1- ارسال بيانات من المستعرض للمتحكم عن طريق النماذج أو الروابط(نرسل البيانات للصفحة التي يتم فيها تشغيل المتحكم)
    2-ارسال بيانات من المتحكم للمستعرض:
    بما ان المستعرض هو الجزء الأساسي (المنطقي) في البرمجية هو من يقرر المستعرض الذي سيتم عرضه وذلك بناء على ال actions التي تصله.
    قبل استدعاء المستعرض يمكن تخزين القيم التي نريد استعمالها في متغير ثم نقوم باستدعاء المستعرض بالشكل التالي:
    كود PHP:
     $book $this->model->getBook($_GET['book']);
                 include 
    'view/viewbook.php'
    ما ترى تم خزن بيانات العرض داخل متغير book والذي سيتم استخدامه داخل المستعرض viewbook.php على فرض اننا نعرف اسم المتغير(الدالة include ترى ما فوقها).

    بقية الصفحة:
    كود PHP:
    <?php
    include_once("model/Model.php");

    class 
    Controller {
        public 
    $model;
        
        public function 
    __construct()  
        {  
            
    $this->model = new Model();

        } 
        
        public function 
    invoke()
        {
            if (!isset(
    $_GET['book']))
            {
                
    // no special book is requested, we'll show a list of all available books
                
    $books $this->model->getBookList();
                include 
    'view/booklist.php';
            }
            else
            {
                
    // show the requested book
                
    $book $this->model->getBook($_GET['book']);
                include 
    'view/viewbook.php';
            }
        }
    }

    ?>
    كما ترى المستعرض يوجد به متغير ليصله مع المودل، ويتم ارسال بيانات للمتحكم عن طريق رابط يحوي المتغير book ( المتحكم يتم استدعائه من الصفحة الرئيسية - وعند طلب رابط يقوم بعرض المستعرض الملائم حسب البيانات التي في الرابط).


    اعتقد المثال يوضح نفسه - وهو بالمناسبة مأخوذ من مثال بسيط موجود بالمرفقات
    انصحك بفتح جميع صفحات المثال مرة واحدة (عن طريق notepad++ مثلا) والتنقل بين الملفات حتى تفهم المثال بشكل واضح.

    لي عودة للموضوع





    التعديل الأخير تم بواسطة ahmad sadiq ; 12-05-2011 الساعة 02:18 AM

  5. #5
    عضو فعال
    تاريخ التسجيل
    Jun 2008
    المشاركات
    1,600


    اعتقد هذا ما تريده

    سكربت بسيط يعرض ويضيف الأخبار ويستخدم تقنية MVC
    سوف تجد مثال على استخدام نموذج وعلى ارسال معلومات للمتحكم

    السكربت موجود بالمرفقات

    قم بزراعة ملف القاعدة data.sql
    وغير المعلومات في config.php

    وأي اسئلة انا جاهز





    التعديل الأخير تم بواسطة ahmad sadiq ; 12-05-2011 الساعة 02:17 AM

  6. #6
    عضو فعال
    تاريخ التسجيل
    Dec 2008
    المشاركات
    1,897


    حياك الله ابوحميد ان شاء الله انك بخير .
    اشكر لك تجشمك متاعب الرد علي بارك الله فيك .
    نظام الـ MVC ليس جديد علي و لدي مشاريع منها الكبير و الصغير على هذا النظام ، يعني ليس الاشكال فيه بل فقط في جزئية .
    مااوده ببساطة : ارسل مصفوفة(Array) بها عدة قيم مثلاً (ID,Name,Password,Email) الى المستعرض و اقوم باعادة قيمة مثلا الـ ID الى المتحكم الذي سيقوم بطلب عرض بيانات من القاعدة(بالاستعانة بالموديل)و يرسلها مرة اخرى الى المستعرض طبعاً هذا كله في صفحة واحدة و بدون عمل رفرش للصفحة يعني يقوم بتحميل هذه المعطيات و القيام هذه العمليات و بعد انهائها يقوم باستعراض الناتج + بدون استخدام اكواد برمجية في ملف الـ View





    التعديل الأخير تم بواسطة وضاء ; 23-02-2010 الساعة 09:07 PM

  7. #7
    عضو نشيط جدا
    تاريخ التسجيل
    Jan 2008
    المشاركات
    512


    ما فهمته من السؤال هو: كيف يمكننا طلب دالة في الController أو الModel من خلال الView

    الجواب: هناك طرق عديدة لعمل ذلك، منها:

    تقوم الطريقة على وجود كلاس رئيسية بها دالة تقوم بعمل انكلود للview
    هذه الكلاس ترثها الكلاس الخاصة بالكنترولر


    كلاس الكنترولر:
    كود PHP:
    class Article extends Engine{
        
        function 
    __construct(){
            
    parent::__construct();
        }
        
        function 
    do1(){
            
    $data = array('foo'=>$bar);
            
    $this->view('articles/do1',$data);
        }
        

    كلاس Engine تحتوي على الكلاس المسئولة عن المودلز + دالة الفيو + باقي الكلاسات المساعدة
    كود PHP:
    class Engine{
        
        function 
    __construct(){
            
    $this->model = new Model();
        }
        
        function 
    view($view,$data false){
            if(
    file_exists(ANY_PATH."views/$view.php")){
                if(
    $dataextract($data);
                include 
    ANY_PATH."views/$view.php";
            }else{
                return 
    false;
            }
        }
        

    للوصول لدوال الكنترولر
    كود PHP:
    $this->foo(); 
    للوصول للموديلز اذا احتجتها.
    كود PHP:
    $this->model->model_foo->bar(); 
    ----------------------------

    يمكنك ان تجعل كامل البرنامج في كائن واحد و يخزن كمتغير استاتيك في دالة

    و الدالة تكون مشابهة لهذه:
    كود PHP:
    function &get_instance($new_controller=false){
        static 
    $controller_obj null;
        if(
    $new_controller){
            
    $controller_obj = new $new_controller();
        }
        return 
    $controller_obj;

    بهذا يمكنك الوصول لكافة محتويات برنامجك، من الداخل او من الخارج

    طلبها كاﻵتي
    كود PHP:
    $main_obj =& get_instance('Articles');


    $obj =& get_instance();
    $obj->do1();
    $obj->model->model_foo->bar(); 






    التعديل الأخير تم بواسطة mr_m ; 24-02-2010 الساعة 01:26 AM
    __________________
    محمد حمود.

  8. #8
    عضو فعال
    تاريخ التسجيل
    Jun 2008
    المشاركات
    1,600


    مااوده ببساطة : ارسل مصفوفة(Array) بها عدة قيم مثلاً (ID,Name,Password,Email) الى المستعرض و اقوم باعادة قيمة مثلا الـ ID الى المتحكم
    الذي سيقوم بطلب عرض بيانات من القاعدة(بالاستعانة بالموديل)و يرسلها مرة اخرى الى المستعرض طبعاً هذا كله في صفحة واحدة و بدون عمل رفرش للصفحة

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

    كود:
    echo "<a href=index.php?act=showPost&id=".$data['id'].">".$data['post']."</a>";
    المتحكم يتم تشغيله في الصفحة index.php نرسل له قيمة ال id عن طريق الرابط السابق، فيذهب إلى الاكشن showPost وهناك نستقبل ال id عن طريق $_GET
    هذا ما فعلته في المثال(الذي ارسلته في آخر مشاركة):
    دالة المتحكم الرئيسية التي يتم تشغيلها في الصفحة الرئيسية

    كود PHP:
    switch($act){

    case 
    'showPost':
    $this->showPost($_GET['id']);
    break;

    كما ترى يأخذ متغير id ويرسله للدالة التي تتعامل مع عرض الموضوع في المتحكم
    كود PHP:
    public function showPost($id){
    $post $this->model->getPostByID($id);
    include(
    PATH."\\view\showPost.php");

    هذه هي الدالة التي تطبع الموضوع، طبعًا تأتي بالموضوع عن طريق الموديل(قاعدة البيانات) الذي يرجع الموضوع على شكل مصفوفة، بعد ان خزناه في مصفوفة نستدعي المستعرض showPost.php الذي يمكنه استخدام المصفوفة التي تحوي الموضوع، وهو بدوره يقوم بطباعة المعلومات كما يشاء(هذا هو المستعرض الثاني):
    كود PHP:
    <?php
    if (count($post)>0){
    echo 
    $post['title']."<br>";
    echo 
    $post['date']."<br>";
    echo 
    $post['content']."<br>";
    }
    else echo 
    "no results";
    ?>
    لتفادي كتابة اكواد برمجية في المستعرض يجب علينا استخدام نظام قوالب ما والذي بدوره له اوامر شرط وحلقات تكرار خاصة به

    آسف ان كنت فهمتك خطأ





    التعديل الأخير تم بواسطة ahmad sadiq ; 24-02-2010 الساعة 05:13 AM

  9. #9
    عضو فعال
    تاريخ التسجيل
    Dec 2008
    المشاركات
    1,897


    mr_m افتقدنا وجودك و الله ، وبارك الله فيك اثريت الموضوع هذه الاضافة كنت سأقوم بالسؤال عنها فتفضلت بوضعها شكر الله لك.
    بالنسبة لإرسال الid من المستعرض للمتحكم فذلك يتم بواسطة رابط، أي عند الضغط على رابط يحوي ال id يتم الاتصال بالمتحكم(يجب أن يكون حدث ما حتى يعمل المتحكم)
    بارك الله فيك ابوحميد ، الجزئية كلها في هذين السطرين الذي وضعتهما انا اوضد ارسال متغير من المستعرض الى المتحكم بدون عمل رفرش!
    اما الباقي فكله اعرفه انا لا احتاج تعريفا لنظام الـMVC فقد استخدمته مرارا و تكرارا










ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض