1

Тема: MVC та список категорій

Хай. От в мене є сайтик, header та footer - постійні, тобто вони не змінюються на всіх сторінках сайту, а от content, котрий в середині сторінки - змінюється.
Ну тут все зрозуміло, в залежності від посилання запихуємо в середину сторінки потрібний контент, але як бути з категоріями?
Вони знаходяться між контентом та header'ом, і вони, як і контент, мають завантажуватись з бази даних, але також вони мають відображатись на всіх сторінках сайту.
Так, як це MVC - то для для відображення чогось має бути controller, view, та model.
З view та модел все зрозуміло, model підгружає дані, а view їх відображає, але як бути з controller'ом для відображення категорій?

2

Re: MVC та список категорій

У вас на навчанні викладають PHP ?

3

Re: MVC та список категорій

Ніхто не зна, як то краще зробити?
Я ж просто можу запихнути то все в файл view_template.php де зберігається код, котрий загальний для всіх сторінок, тобто хедер та футер, але тоді він буде містити php код, котрий забирає з бази даних список категорій, хз, добре це, чи ні.

4

Re: MVC та список категорій

Тут же форум екстрасенсів,от ви розказуєте,а ми вже знаєм рішення! Навіть без коду і реального прикладу!

5 Востаннє редагувалося generation (06.11.2014 18:43:58)

Re: MVC та список категорій

щось я не поняв... Якщо хочеш зробити вибірку з БД, то - контреллер тобі в допомогу(там робиш вибірку та всі інші маніпуляції), а далі передавай у вид все це за допомогою array(), а далі циклом foreach() виводиш. робиш це у базовому шаблоні)))

6

Re: MVC та список категорій

Написати в представленні таке:

<? if (isset($categories)) { /* опрацювати масив з даними про категорії і вивести необхідний HTML */ }?>

Я ж просто можу запихнути то все в файл view_template.php де зберігається код, котрий загальний для всіх сторінок, тобто хедер та футер, але тоді він буде містити php код, котрий забирає з бази даних список категорій, хз, добре це, чи ні.

Код взаємоді ї з БД в представленні?

7

Re: MVC та список категорій

Invader написав:

Написати в представленні таке:

<? if (isset($categories)) { /* опрацювати масив з даними про категорії і вивести необхідний HTML */ }?>

Я ж просто можу запихнути то все в файл view_template.php де зберігається код, котрий загальний для всіх сторінок, тобто хедер та футер, але тоді він буде містити php код, котрий забирає з бази даних список категорій, хз, добре це, чи ні.

Код взаємоді ї з БД в представленні?

Це в якому представленні треба писати? І де створювати $categories?

8 Востаннє редагувалося generation (06.11.2014 19:26:21)

Re: MVC та список категорій

Тільки в мене написана модель з назвою Articles там тільки запрос до БД. Якщо хочеш, то я скину))

    public function action_index()
    {
        $articles = array();
    
        $content = View::factory('/index')
                    ->bind('articles',$articles);
        
        $articles = Model::factory('Articles')->get_all($id);
            
        $this->template->content = $content;
    }

це Кохана Фреймворк, думаю зможеш перекласти під себе)))
а у виді вистачить тільки конструкції

<?php foreach($articles as $article): ?>

<?php $article['назва колонки із БД']; ?>

<?php endforeach; ?>

P.S. якщо щось не зрозуміле, то - я поясню.))

9

Re: MVC та список категорій

generation написав:

Тільки в мене написана модель з назвою Articles там тільки запрос до БД. Якщо хочеш, то я скину))

    public function action_index()
    {
        $articles = array();
    
        $content = View::factory('/index')
                    ->bind('articles',$articles);
        
        $articles = Model::factory('Articles')->get_all($id);
            
        $this->template->content = $content;
    }

це Кохана Фреймворк, думаю зможеш перекласти під себе)))
а у виді вистачить тільки конструкції

<?php foreach($articles as $article): ?>

<?php $article['назва колонки із БД']; ?>

<?php endforeach; ?>

P.S. якщо щось не зрозуміле, то - я поясню.))

Ну і що це за штука? Навіщо? Для чого? Хіба я запитував, як вивести контент використовуючи MVC ????

<?PHP

class Controller_Main extends Controller
{
    function __construct()
    {
        $this->model=new Model_Main();
        $this->view=new View();
    }
    
    function action_index()
    {    $data=$this->model->get_data();
        $this->view->generate('view_main.php', 'view_template.php', $data);
    }
}
?>
<?PHP
class View
{
    //public $template_view; // здесь можно указать общий вид по умолчанию.
    
    function generate($content_view, $view_template, $data = null)
    {
        /*
        if(is_array($data)) {
            // преобразуем элементы массива в переменные
            extract($data);
        }
        */
        
        include 'application/views/'.$view_template;
    }
}
?>
<?PHP
class Model_Main extends Model
{
    public function get_data()
    {    
        $db = new PDO('mysql:host=localhost;dbname=shop',"shop_admin","123");
        $stmt = $db->query("select * from products");
        $stmt->setFetchMode(PDO::FETCH_ASSOC);

        return $stmt->fetchAll();
    }
}
?>
<section id="body1"> 
<table>
<tr>
<?PHP
$count=0;
foreach($data as $row)
{
    if($count%4==0 && $count>0)
    {
        echo "</tr><tr>";
    }

    echo "<td>
<a href=\"?view=product1\"><img src=\"/shop/images/".$row['image']."\" alt=\"image1\"/></a>
<span class=\"title\">".$row['title']."</span>
<span class=\"price\">".$row['price']."</span>
</td>";
$count++;
}
?>
</tr></table></section>
<!DOCTYPE html>
<html>
<head>
    <title>Shop</title>
    <link rel="stylesheet" href="/shop_test/css/style.css"/>
</head>
<body>
<div id="wrapper">
    <header>
        <img src="/shop/images/header.jpg" alt="header"/>
    </header>
    <section id="cat">
<ul>
<li>
    cat1
</li>
<li>
    cat2
</li>
<li>
    cat3
</li>
</ul>
</section>

<?php include 'application/views/'.$content_view; ?>

<footer>
<img src="images/footer.jpg" alt="footer"/>
</footer>
</div>
</body>
</html>

Я це і сам можу.
Ви зовсім не зрозуміли моє питання, чи то я не зрозумів вашу відповідь?

10

Re: MVC та список категорій

Була така проблема. От є у меня продукти, бай дефолт вони всі відображаються табличкою.
І от треба мені відобразити лише ті продукти, котрі підпадають під певну категорію.
А маршрутизатор працює от так.
hostname/controller/action
Але ж мені потрібно, аби той action прийняв назву категорії, як аргумент, після чого передав цю назву в model, аби вже в model вибралися дані з бази даних, котрі підпадають під оту категорію.
Ну я ж не буду писати свій action під кожну категорію, правда?
Тому переробив файл-маршрутизатор під
hostname/controller/action/arg
Норм?

11

Re: MVC та список категорій

скіну вам кід

<?PHP
class Route
{
    static function start()
    {
        // контроллер и действие по умолчанию
        $controller_name = 'Main';
        $action_name = 'index';
        $action_arg = null;
        
        $routes = explode('/', $_SERVER['REQUEST_URI']);

        // получаем имя контроллера
        if ( !empty($routes[1]) )
        {    
            $controller_name = $routes[1];
        }
        
        // получаем имя экшена
        if ( !empty($routes[2]) )
        {
            $action_name = $routes[2];
        }
        
        if(!empty($routes[3]))
        {
            $action_arg=$routes[3];
        }
        

        // добавляем префиксы
        $model_name = 'Model_'.$controller_name;
        $controller_name = 'Controller_'.$controller_name;
        $action_name = 'action_'.$action_name;

        // подцепляем файл с классом модели (файла модели может и не быть)

        $model_file = strtolower($model_name).'.php';
        $model_path = "application/models/".$model_file;
        if(file_exists($model_path))
        {
            include "application/models/".$model_file;
        }

        // подцепляем файл с классом контроллера
        $controller_file = strtolower($controller_name).'.php';
        $controller_path = "application/controllers/".$controller_file;
        if(file_exists($controller_path))
        {
            include "application/controllers/".$controller_file;
        }
        else
        {
            /*
            правильно было бы кинуть здесь исключение,
            но для упрощения сразу сделаем редирект на страницу 404
            */
          //  exit;
            Route::ErrorPage404();
        }
        
        // создаем контроллер
        $controller = new $controller_name;
        $action = $action_name;
        
        if(method_exists($controller, $action))
        {
            // вызываем действие контроллера
            if(!empty($action_arg)){
                $controller->$action($action_arg);
            }
            else
            {
                $controller->$action();
            }
            
        }
        else
        {
            // здесь также разумнее было бы кинуть исключение
            Route::ErrorPage404();
        }
    
    }
    
    function ErrorPage404()
    {
        $host = 'http://'.$_SERVER['HTTP_HOST'].'/';
        header('HTTP/1.1 404 Not Found');
        header("Status: 404 Not Found");
        header('Location:'.$host.'404');
    }
}

?>

12

Re: MVC та список категорій

Це у вас MVC PHP Framework.
http://mvcphp.ru
У чувака (автора цього фреймворка) є відеоуроки по цьому фреймворку (прямо на головній сайту).
Подивіться їх.

13

Re: MVC та список категорій

VTrim написав:

Це у вас MVC PHP Framework.
http://mvcphp.ru
У чувака (автора цього фреймворка) є відеоуроки по цьому фреймворку (прямо на головній сайту).
Подивіться їх.

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

14

Re: MVC та список категорій

FakiNyan написав:
VTrim написав:

Це у вас MVC PHP Framework.
http://mvcphp.ru
У чувака (автора цього фреймворка) є відеоуроки по цьому фреймворку (прямо на головній сайту).
Подивіться їх.

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

Якби ви розібрались (а перед тим подивлись весь курс),де розповідається про маршрутизацію,то не задавали б зараз стільки питань :). Цікавого тут мало..).

15

Re: MVC та список категорій

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

16 Востаннє редагувалося VTrim (07.11.2014 19:21:18)

Re: MVC та список категорій

А взагалі,MVC - це..

Модель - логіка програми.
Контрооллер - приймає запити користувача та користується логікою в моделі.
Представлення. Вивід інформації.

Тут просто ООП варіант. Але може бути і процедурний (простіший). Головне підключити ці три складові в одне.

17

Re: MVC та список категорій

Соодеска. Що значить - зрозуміло.