21

Re: MVC архітектура.

5. View->Controller (GUI Content): вьюха передає контроллеру контент,

Я не зрозумів я вюха (просто шаблон так як ви сказали) може передати контроллеру контент. Можете в коді це відобразити?
Ви написали що вюшка це по суті лише шаблон, типу такого:

<html>
    <head>
        <title>Info</title>
    </head>
    <body>
        <pre>
            User Information:
            Name: {$name|capitalize}
            Addr: {$address|escape}
            Date: {$smarty.now|date_format:"%b %e, %Y"}
        </pre>
    </body>
</html>

Скажіть будь-ласка як і коли ( в якій стадії) саме ця вюшка буде передавати щось контроллеру?

22

Re: MVC архітектура.

5. Контроллер створює сторінку на основі шаблону з View та даних, отриманих зі сховища.

О, ось це правильно!

23

Re: MVC архітектура.

2 Hanter Моє бачення MVC і кусок коду замість 1000 слів ;)

/**
 * Модель - містить дані і логіку сутностей, наприклад імя юзера. 
 */
class User {
 public $name = 'Hanter';
}

/**
 * Вюшка як містить в собі шляхи до теми. Це мінімальний функціонал вюшки
 * У вю зберігаються дані про тему
 * (шляхи, назву теми, урл по якій потрібно звертатись до цсс файлів теми) 
 */
class View {
  protected $fileDir = '/www/sites/hantersite/';
  public function render($data, $file){
    include $fileDir.$file;
  }
}

class Controller {
 public function run(){
  $user = new User();
  $view = new View();
  $view->render(array('user'=>$user), 'usepage.html');
 }
}

$controller = new Controller();
$controller->run();
// файл usepage.html
<?= $data['user']->name ?>

24

Re: MVC архітектура.

2 Hanter ви розібралися з MVC?

Re: MVC архітектура.

Patron написав:

2 Hanter ви розібралися з MVC?

Вже майже.
Тепер намагаюся придумати якесь практичне завдання, щоб попробувати реалізувати mvc архітектуру.

26

Re: MVC архітектура.

Тепер намагаюся придумати якесь практичне завдання, щоб попробувати реалізувати mvc архітектуру.

Я пропоную Вам або взяти фреймворк і на ньому розробити простенький блог або можливо якісь ваші поточні задачі можна буде реалізувати під парадигмою мвц. Але з фреймворками дійсно познайомтесь це корисна штука ;) Якщо будуть питання пишіть)

Подякували: miroslav.chandler1

27

Re: MVC архітектура.

Я би рекомендував Codeigniter, там перший урок якраз йде створення простого блогу. Та і не дуже складний він.

Подякували: miroslav.chandler, Matvik3

28

Re: MVC архітектура.

візьміть codeigniter =)

29

Re: MVC архітектура.

2 Hanter Ну як ви розібралися з MVC, щось вийшло?

Re: MVC архітектура.

Patron написав:

2 Hanter Ну як ви розібралися з MVC, щось вийшло?

Пробував, та нічорта не вийшло.

31

Re: MVC архітектура.

раз так четвертий пишу в треді, подивіться в сторону codeigniter :)

Подякували: Matvik1

32

Re: MVC архітектура.

Я б рекомендував Хантеру цикл статей
http://www.simplecoding.org/kak-sozdat-svoy-site.html
(це перша стаття, а наступні за нею розповідають про створення простенького каталогу).
Там описана і MVC, і практична її реалізація. Сам недавно по цьому вчився, як на мене, доволі гарно описано, і відразу дозволяє на практиці зрозуміти цей паттерн

33

Re: MVC архітектура.

Hanter написав:
Patron написав:

2 Hanter Ну як ви розібралися з MVC, щось вийшло?

Пробував, та нічорта не вийшло.

А з чим саме? У вас затримка у розумінні самої концепції чи її втіленні на прикладі фреймворків?

Re: MVC архітектура.

Після довгих роздумів над цією архітектурою, я все ж вирішив ще раз попробувати.
Написав такий код:

<?php

Class Model
{
 public $url = 'http://site.com';
 public $name = 'Мій сайт';    
}

Class Controller
{
 public function action($Request)
 {
   $Template = new View();
   $Model = new Model();     
  if($Request == 'url')
   return $Template->viewData($Model->url);
  else
   return $Template->viewData($Model->name); 
 }
}

Class View
{
 public    function viewData($string)
 {
     print 'Дані які передані: '.$string;
 }
}
 
 $DataSite = new Controller();
 $DataSite->action('name');

?>

Як вважаєте, це щось схоже на mvc , чи ні ?

35

Re: MVC архітектура.

Схоже. :)

Re: MVC архітектура.

Bartash написав:

Схоже. :)

Ну от це вже добре, можна попробувати щось більше написати.

37 Востаннє редагувалося ping (19.02.2013 08:59:20)

Re: MVC архітектура.

питання:
вчуся  створювати сайти на основі CodeIgniter
зробив того блога ,що там є в прикладах. (http://ellislab.com/codeigniter/user-guide/tutorial/create_news_items.html )
доповнив його успішно опціями - edit news, delete news
почав  собою гордитися.
пробую дальше - створити меню, яке братиме свої елементи з таблиці (products)
і - впираюся в стіну.
у мене є контролер по замовчуванню pages який малює сторінку home

<?php
class Pages extends CI_Controller {
    public function view($page = 'home')
    {
        
      if ( ! file_exists('application/views/pages/'.$page.'.php'))
    {
        // Whoops, we don't have a page for that!
         echo "Can't find page with name: $page";
                 show_404();
               
    }
    
    $data['title'] = ucfirst($page); // Capitalize the first letter

/* $data['menu'] = ???? */
    
    $this->load->view('templates/header', $data);
/* от тут буду  викликати view('menu'),$data); */
    $this->load->view('pages/'.$page, $data);
    $this->load->view('templates/footer', $data);  
    }
}
?>

щоб з’явилося меню - треба щоб він викликав інший контролер products, який викличе модель products_model і сформує змінну з даних  таблиці.
як з одного контролера викликати інший?

можна і іншим шляхом - з контролера page звернутися до моделі products_model і отримати дані для  $data['menu']
але - чи то буде правильно ?

38

Re: MVC архітектура.

Можливо просто переспрямувати користувача з одного контролера на інший? Типу:

header('Location: controller');

Але, можливо тут вже знайшли відповідь на питання?

39

Re: MVC архітектура.

ping написав:

питання:
вчуся  створювати сайти на основі CodeIgniter
зробив того блога ,що там є в прикладах. (http://ellislab.com/codeigniter/user-guide/tutorial/create_news_items.html )
доповнив його успішно опціями - edit news, delete news
почав  собою гордитися.
пробую дальше - створити меню, яке братиме свої елементи з таблиці (products)
і - впираюся в стіну.
у мене є контролер по замовчуванню pages який малює сторінку home

<?php
class Pages extends CI_Controller {
    public function view($page = 'home')
    {
        
      if ( ! file_exists('application/views/pages/'.$page.'.php'))
    {
        // Whoops, we don't have a page for that!
         echo "Can't find page with name: $page";
                 show_404();
               
    }
    
    $data['title'] = ucfirst($page); // Capitalize the first letter

/* $data['menu'] = ???? */
    
    $this->load->view('templates/header', $data);
/* от тут буду  викликати view('menu'),$data); */
    $this->load->view('pages/'.$page, $data);
    $this->load->view('templates/footer', $data);  
    }
}
?>

щоб з’явилося меню - треба щоб він викликав інший контролер products, який викличе модель products_model і сформує змінну з даних  таблиці.
як з одного контролера викликати інший?

можна і іншим шляхом - з контролера page звернутися до моделі products_model і отримати дані для  $data['menu']
але - чи то буде правильно ?

гордитися собою ще пізно :)
нащо інклудути вюху по гет параметру? О_О

для меню зробіть віджет (чи лібу, як там в кодігнітері), і підключайте її.

40

Re: MVC архітектура.

Гадаю, що добре у вікіпедії пояснено щодо моделі MVC