2009-09-26 50 views
0

我期待创建一个很好的方式来在php中分开视图和控制器。关于在php中创建视图选择器的想法

我想要发生的事情是人们会去:localhost/index.php?view =注册,他们会看到整个页面的注册框..而不是登录框。

我想知道如果有人以前做过这个..我特别寻找一种让PHP处理隐藏和显示PHP最初加载页面后的优雅方式。所以也许这样的事情:

<div class="login" style="display:<?php echo $login; ?>;"> 

诀窍是,我想默认(localhost/index.php)来显示一切。所以,如果?view = ..没有定义,然后显示它..我真的不想混乱我的观点与isset()的if语句吨..

让我知道你的解决这个问题!

谢谢, 马特·穆勒

+1

,要么是我的咖啡因水平太低,还是你太高... 8) 你可能会更清楚一点吗? – 2009-09-26 22:08:00

+0

我重写了一些小节。这是一个棘手的问题,因为我的代码不能在片段中理解。我希望能找到一个完成我以前想要做的事情的人。 – Matt 2009-09-26 22:21:29

+1

我有点欺骗这种事情。从本质上讲,我只在“登录/注册”标题下显示登录框。如果系统识别出用户名/密码对,则它将登录该用户,如果不是,则询问他们是否想在该用户名下注册帐户。它*似乎*工作得不错... – 2009-09-26 22:34:13

回答

1

简单地做这样的事情:

<?php 

// login.php 

if(strtolower($_GET['v']) == 'signup'){ 

?> 
<form>/* sign up form goes here */</form> 
<?php 

}else{ 

?> 
<form>/* login form goes here */</form> 
<?php 


} 

?> 

或者你也可以使用开关/选择,如果你有一个页面太多(无关CSS) php文件:

<?php 

// login.php 

switch(strtolower($_GET['v'])){ 

case 'signup': 
?> 
<form>/* sign up form goes here */</form> 
<?php  
break; 

default:  
?> 
<form>/* login form goes here */</form> 
<?php 
break; 

} 

?> 

Cheerio!

UPDATE:至于使用AJAX的能力,你可以做这样的事情:

<?php 

// login.php 

$_showcontent = false; 
if(isset($_GET['c'])){$_showcontent = true;} 

if(!$_showcontent){ 
    // load the header, javascript components and whatever so on 
    echo '<div id="view">'; 
} 

switch(strtolower($_GET['v'])){ 

case 'signupstep1': 
?> 
<a href="#view" onclick="return go_step2();">Step 2</a> 
<?php  
break; 

case 'signupstep2': 
?> 
<form>/* sign up form goes here */</form> 
<?php  
break; 

case 'signupcomplete': 
?> 
    /* sign up complete page */ 
<?php  
break; 

default:  
?> 
<a href="#view" onclick="return go_signup();"></a> 
<?php 
break; 

} 

if(!$_showcontent){ 
    echo '</div>';  
    // footer and what other stuff you need here 
} 

?> 

的JavaScript代码:

<script type="text/javascript"> 
/* <![CDATA[ */ 

function go_signup(){ 
    $("#view").load("<?php echo $_SERVER['PHP_SELF'] ?>?c&v=signupstep1"); 
    return false; 
} 

function go_step2(){ 
    $("#view").load("<?php echo $_SERVER['PHP_SELF'] ?>?c&v=signupstep2"); 
    return false; 
} 

/* ]]> */</script> 
+0

感谢您的时间..唯一的问题是,我需要它能够对JavaScript作出反应后。如果php不加载元素,那么当我点击登录/注册按钮时,javascript不能做出反应。现在,如果您在加载页面后点击“注册”,view = login,则会使登录框淡出,并淡入注册框。 – Matt 2009-09-26 22:48:51

+0

我仍然没有得到你想要完成的任务.. – yoda 2009-09-26 23:20:55

+0

他仍然希望将所有元素加载到页面上,但只有在页面加载时显示所选元素。他希望能够通过JS隐藏/显示页面加载后的元素。你可以像你在问题中提到的那样设置显示CSS,或者你也可以让AJAX处理视图的切换,并让控制器根据AJAX的GET输入吐出合适的HTML。 – BraedenP 2009-09-27 00:05:18

相关问题