MVC görünümü, bir tane oluşturmak için bir düzen ve nasıl nedir

3 Cevap php

Ben görünümünde, düzen ne olduğunu anlamıyveyaum. Ben PHP çiftleşmiş konusunda bir question daha önce sveyadum, ama ben yine de oldukça anlamıyveyaum. Ben site için genel bir düzen oluşturmak varsayalım ve o düzen içinde her belirli bir görünümü bulunmaktadır .... Ben bunu hakkında gitmek nasıl bilmek istiyveyaum. Ben de sadece MVC Görünüm parçası ve gerçek şablonları karıştı ve nasıl yapılmış konum .... yardımcıları denilen bu şeyler baktı çünkü Ayrıca, şablonlar, sadece html kullanarak yapılmalıdır edilmiştir. Eğer siz herhangi varsa ben, örneklerle iyi öğrenirler.

Ayrıca, daha önemli bir sveyau, ben bir kullanıcı o oturum açmış yalnızca, o görünümde, ya da denetleyicisi kontrol edecek gördüm bir fveyam vardı Diyelim?

Yani ben yapmak istiyveyaum

in the controller

include 'header';
if(isset($_SESSION['userID'])){
    include 'fveyam';
}
include 'footer';

veya

in the template

<html>
<?php if(isset($_SESSION['user_id'])): ?>
  <fveyam>....</fveyam>
<?php endif;?>
</html>

EDIT

Yani, belirli bir görünüm şablonu görmek için düzeni içinde bir içerir ifadesi var? nasıl yani?

3 Cevap

Ben sırf onu çevreleyen dini şevk bu soruyu cevaplamak için tereddüt.

Genel kavramlar arkasında konularda gerçekten iyi bir anlayış elde etmek için This Wiki Discussion Page Bu tartışma sayfa wiki MVC eşyanın etrafında olduğunu görüyoruz.

İşte (btw CodeIgniter'ı kullanabilir ve çok gibi bu tür sesler) takip etmek gibi pratik kural şudur:

"View" neredeyse hiçbir mantığı olmalıdır. Bu sadece basit değişkenleri echos biberli PHP ile (web dünyasında) HTML olmalıdır. Sizin örnekte size kendi görünümüne formu kıracak ve yüklü ya da değil eğer kontrolör belirleyecek.

Görünümü, nereye veri geliyor ya da nerede hiçbir kavram olmalıdır: Ben bunun bu şekilde bakmak istiyorum. Model görünümü agnostik olmalıdır. Kontrolör modeli verileri kafesleri ve görünümüne sağlar - ve bu görünümden girdi alır ve modeli için filtreler.

Burada hızlı ve kirli (denenmemiş - ama karşısında puan almak gerekir) örnek:

Theapp.php (The App controller)

class Theapp extends Controller
{
   var $_authenticated;
   var $_user;
   var $_menu; // array of menus

   function __construct()
   {
      session_start();
      if (isset($_SESSION['authenticated']) && $_SESSION['authenticated'])
      {
           $this->_authenticated = $_SESSION['authenticated'];  // or some such thing
           $this->_user = $_SESSION['user'];
      }
      $this->_menu = array("Logout", "Help", "More");
      parent::__construct();
      $this->loadView("welcome"); // loads primary welcome view - but not necessarily a complete "html" page
   }


   function index()
   { 
      if (!$this->_authenticated) 
         $this->loadView("loginform");
      else
      {
         $viewData['menu'] = $this->_menu;
         $viewData['user'] = $this->_user;
         $this->loadView("menu", $viewData);
      }
   }


   function login()
   {
      /* code to authenticate user */
   }

   function Logout() { /* code to process Logout menu selection */ }
   function Help() { /* code to process Help menu selection */ }
   function More() { /* code to process More menu selection */ }
}

welcome.php

<h1> Welcome to this quick and dirty app!</h1>
All sorts of good HTML, javascript, etc would be put in here!

loginform.php

<form action"/Theapp/login" method="post">
   User: <input id='user' name='user'>
   Pass: <input id='pass' name='pass' type='password'>
   <input type='submit'>
</form>

menu.php

Hi <?= $user ?>!<br>
Here's your menu<br>
<? foreach ($menu as $option) { ?>
<div class='menuOption'><a href='/Theapp/<?=$option?>'><?=$option?></a></div>
<? } ?>

Umarım bu yardımcı olur.

Bir düzen sizin ana içerik alanının etrafında olması ne olursa olsun. Genellikle normal bir web sitesi üzerinde herhangi bir kenar çubuğu, başlık, altbilgi olurdu. MVC framework çoğu tüm görünümlerde bu parçaların tekrar önlemek için düzeni sağlar.

Eğer cascaded iki görünüm var gibi eğer hayal edebiliyorum

  1. gerçek görünüm işlenir Eğer bu içerik kaydedilir
  2. bu çıkış düzeni görünümü (içerik etrafında tüm öğeler) işlenen ve içerik dahil

for your login question actually your would have to do both on the controller and the view

$this->view->isLogged = isset($_SESSION['userID']);

görünümünde

<?php if($isLogged): ?>
  <form>....</form>
<?php endif;?>

Lütfen bir çerçeve kullanarak değil, o bir düzen ve bir görünüm için basit bir yolu şöyle olabilir:

<?php
function layout($layout_params) {
  extract($layout_params);

  # Remember: $layout_content must be echoed for the view to be seen.
  ob_start();
  include "layout_page.php";
  $html = ob_get_contents();
  ob_end_clean();

  return $html;
} 

function view($view_params) {
  extract($view_params);

  ob_start();
  include "home_page.php";
  $html = ob_get_contents();
  ob_end_clean();

  return $html;
}

#
# The variable $parameters is extracted and $params becomes a variable in the view as an array,
# $logged_in is also now avaiable in the view
# 
$parameters = array("params" => array("name" => "joe"), "logged_in" => false);

$view_content = view($parameters);  # => Returns the HTML content for home_page.php

# Now we need the layout content to include the view:
# The layout file will expect a variable called $layout_content to be the html view.
# So we need to set $layout_content to be $view_content
$parameters["layout_content"] = $view_content;

# We no longer need $view_content so we can unset the variable
unset($view_content);

# When $paramters is extracted it will have $layout_content as a variable:
$layout_content = layout_view($paramters); # => Returns the HTML content for the layout_page.php

# Now send the results to the browser
echo $layout_content;

?>