0

我目前正在开发一个包含多种类型用户的网站。

类型示例:a 型、b 型、c 型

所有类型都可以用不同的权利做不同的事情。我目前在做什么;例如在导航中是:

<?php
if($user_type == "a"){
?>
<ul>
    <li><a href="javascript:void(0);">You can see this</a></li>
    <li><a href="javascript:void(0);">And this</a></li>
    <li><a href="javascript:void(0);">also this</a></li>
</ul>
<?php
}elseif($user_type == "b"){
?>
<ul>
    <li><a href="javascript:void(0);">You can see this</a></li>
    <li><a href="javascript:void(0);">also this</a></li>
</ul>
<?php
}elseif($user_type == "c"){
?>
  <ul>
    <li><a href="javascript:void(0);">You can see this</a></li>
  </ul>
<?php
}
?>

对于他们拥有不同权利的每个元素。

这可以看起来更好吗?

有人有我可以用来防止 if else 和 html 与 php 混合的设计/编程模式的示例吗?

谢谢 :)

4

2 回答 2

4

你这样做的方式没有任何问题。我更喜欢使用这种语法

<?php if($user_type == "a"): ?>
<ul>
    <li><a href="javascript:void(0);">You can see this</a></li>
    <li><a href="javascript:void(0);">And this</a></li>
    <li><a href="javascript:void(0);">also this</a></li>
</ul>
<?php elseif($user_type == "b"): ?>
<ul>
    <li><a href="javascript:void(0);">You can see this</a></li>
    <li><a href="javascript:void(0);">also this</a></li>
</ul>
<?php elseif($user_type == "c"): ?>
  <ul>
    <li><a href="javascript:void(0);">You can see this</a></li>
  </ul>
<?php endif; ?>

http://php.net/manual/en/control-structures.alternative-syntax.php

我认为它在模板中看起来更好

于 2013-10-12T23:09:51.100 回答
-2

在更高更抽象的级别上,您可以使用 MVC(模型视图控制器模式),但这是太多的工作。

在您的情况下,一种不混合 PHP 和 HTML 的更简单方法是:

<?php

$users = array(
  "a" => '
    <ul>
      <li><a href="javascript:void(0);">You can see this</a></li>
      <li><a href="javascript:void(0);">And this</a></li>
      <li><a href="javascript:void(0);">also this</a></li>
    </ul>
',
"b" => '
  <ul>
    <li><a href="javascript:void(0);">You can see this</a></li>
    <li><a href="javascript:void(0);">also this</a></li>
  </ul>',
"c" => '
  <ul>
    <li><a href="javascript:void(0);">You can see this</a></li>
  </ul>
'
);

echo $users[$user_type];
?>

虽然你所做的并没有错——虽然很乱——你基本上在这里使用 PHP 作为预处理器,这没关系。上面的代码只是查看您编写的内容的一种更简洁的方式。

如果您有更复杂的逻辑,您可以将每个代码块包装在一个函数中,例如:

<?php

$blocks = array(
  'a' => function () { echo 'aaaaaaa'; },
  'b' => function () { for ($i=0; $i<5; ++$i) { echo '<div>bbbb</div>'; } },
  'c' => function () { var_dump($_SESSION); }
);

$blocks[$user_type]();

?>
于 2013-10-12T23:17:59.473 回答