PHP Switch - 只查看一个案例?

时间:2012-07-22 13:26:31

标签: php joomla switch-statement case

目前我的表格有两个选择选项,一个可以查看案例0,另一个可以查看案例4.

我有一个标签,所以我无法使用表单,因为当我选择一个选项时网站会刷新。然后它显示两个选项卡中的选项。

我试过只有一个选项。但那不行。

这是标签/表格代码:

<div class="tab1">
<form action="<?php  echo JRoute::_('index.php'); ?>" method="post">
<input type="hidden" name="option" value="com_yoflash" />
<input type="hidden" name="view" value="category" />
<input type="hidden" name="mochicat" value="<?php echo $this->cat->catid; ?>" />
<select name="order" size="1" onchange="submit();">
  <option value="0" <?php if($this->order=="0") echo "selected=\"selected\""; ?>><?php echo JText::_('ORDER_DATE_NEWEST'); ?></option>
  <option value="4" <?php if($this->order=="4") echo "selected=\"selected\""; ?>><?php echo JText::_('ORDER_POPULAR'); ?></option>
</select>
<input type="hidden" name="Itemid" value="<?php echo $this->Itemid; ?>" />
</form>
</div>

我得到了另一个完全相同的div标签。在第一个div选项卡中,我想查看案例0或订单0。

在第二个div选项卡中,我想查看case4或order 4.但我不希望任何形式只是查看该订单。而不是通过表格选择。

这是切换代码:

$limitstart=JRequest::getInt('limitstart',0);
    if($order==-1) {
      $tmp=$session->get('order');
      if(empty($tmp)) {
        $order=0;
      }
      else {
        $order=$session->get('order');
      }
    }
    $session->set('order',$order);


    $order=$session->get('order');
    $Itemid=JRequest::getInt('Itemid',NULL);

    switch($order){
      case 0:
        $str="ORDER BY date_added DESC";
        break;
      case 1:
        $str="ORDER BY date_added ASC";
        break;
      case 2:
        $str="ORDER BY name ASC";
        break;
      case 3:
        $str="ORDER BY name DESC";
        break;
      case 4:
        $str="ORDER BY stat_clicked DESC";
        break;
      default:
        $str="ORDER BY date_added ASC";
        break;
    }

3 个答案:

答案 0 :(得分:5)

这个开关有点难看,这里有一个更好的版本:

$sortMap = array(
"ORDER BY date_added DESC",
"ORDER BY date_added ASC",
"ORDER BY name ASC",
"ORDER BY name DESC",
"ORDER BY stat_clicked DESC"
);

$str = isset($sortMap[$order]) 
    ? $sortMap[$order]
    : "ORDER BY date_added ASC";

因为$ order介于0..4之间,你可能会利用它将映射到数组索引并避免丑陋的切换这一事实,并在此过程中为自己节省一堆浪费,混乱的行。

注意:如果$ type不符合正常的数值数组索引,你也可以使用关联数组执行此操作,您只需手动指定每个元素中的数组索引,如“cat”=&gt;“ORDER BY”。 ..“在你的排序地图数组中它应该完全相同。

答案 1 :(得分:1)

嗯,这就是我想要的。

首先,我正在编辑一个组件。最初它是一个表单,可以查看我想要查看游戏的顺序列表。

但我想要一个标签菜单。一个是新游戏,第二个是热门游戏。

所以我创建了标签菜单/系统。然后只是将代码添加到每个div。所以他们有相同的代码和形式。但是当我在前。选项卡1(新游戏)并按日期从所选列表中选择。它可以查看所有最新游戏。但是,当我对另一个标签(热门游戏)屎,它已经改变,以查看新的游戏。它就像是相互继承。

这是标签的完整代码:

    <div class="tab">
    <h2><a name="newgames" id="newgames">a</a></h2>

<form action="<?php  echo JRoute::_('index.php'); ?>" method="post">
<input type="hidden" name="option" value="com_yoflash" />
<input type="hidden" name="view" value="category" />
<input type="hidden" name="mochicat" value="<?php echo $this->cat->catid; ?>" />
<select name="order" size="1" onchange="submit();">
<option value="0" <?php if($this->order=="0") echo "selected=\"selected\""; ?>><?php echo JText::_('ORDER_DATE_NEWEST'); ?></option>
<option value="4" <?php if($this->order=="4") echo "selected=\"selected\""; ?>><?php echo JText::_('ORDER_POPULAR'); ?></option>
</select>
<input type="hidden" name="Itemid" value="<?php echo $this->Itemid; ?>" />
</form>



 <?php
///////////////////////////////////////
// GAMES BOXES START
///////////////////////////////////////
  $db =& JFactory::getDBO();

  for($i=0;$i<count($this->games);$i++) {
  $game=$this->games[$i];
  $slug=$game->slug;

  $game->imgname=$this->params->get('dir_swf').$slug.'/'.$game->imgname;
  $game->description=$db->getEscaped($game->description);
  $game->description=str_replace("\\\"","\'",$game->description);
  $game->namett=$db->getEscaped($game->name);
  ?>

<div class="game" style="display:block;">

<a style="border:0;" href="<?php echo JRoute::_('index.php/play?option=com_yoflash&view=game&id='.$slug.'&Itemid='.$this->Itemid); ?>" onmouseover="Tip('<strong><?php echo $game->namett; ?></strong><br/> <?php echo $game->description; ?>',WIDTH,300,FADEIN,0,DELAY,0,BGCOLOR, '<?php echo $this->params->get('ttip_bgcolor'); ?>', BORDERCOLOR,'<?php echo $this->params->get('ttip_bordercolor'); ?>',FONTCOLOR,'<?php echo $this->params->get('ttip_fontcolor'); ?>',FONTSIZE,'<?php echo $this->params->get('ttip_fontsize'); ?>',FONTFACE,'<?php echo $this->params->get('ttip_fontface'); ?>')" onmouseout="UnTip()">
<img src="<?php echo $game->imgname; ?>" width="71" height="56" alt="<?php echo $game->name; ?>"/><br/>
<div class="gameName"><?php echo "<p>$game->name</p>"; ?></div>
</a>

<span class="info"><?php echo $game->description; ?></span>

 <span class="gamePlayed"><?php echo "<p>$game->stat_clicked <br/></p>".JText::_("<p> plays</p>") ;?></span> 

 </div>

在此标签(最新游戏)中我只想查看最新游戏

另一个标签(热门游戏)看起来完全相同。

希望描述更多?

答案 2 :(得分:0)

除了我的上述答案,我认为您想要的是显示[select] html下拉列表,您可以“选择”排序顺序,并从阵列中获取适当的SQL并使用它。所以我建议的是这样的

$sortIndex = $_POST["sort"];

$sortMap = array(
"ORDER BY date_added DESC",
"ORDER BY date_added ASC",
"ORDER BY name ASC",
"ORDER BY name DESC",
"ORDER BY stat_clicked DESC"
);
$sortDesc = array(
"Sort by date added in descending order",
"Sort by date added in ascending order",
"Sort by name in ascending order",
"Sort by name in descending order",
"Sort by number of clicks in desending order"
);

$sortType = isset($sortMap[$sortIndex]) 
    ? $sortMap[$sortIndex] 
    : "ORDER BY date_added ASC";

<select name="sort">
    <?php foreach($sortDesc as $k=>$text): ?>
    <option value="<?=$k?>" <?=$sortType==$k?"selected='selected'":""?> ><?=$text?></option>
    <?php endforeach?>
</select>

如果你在页面中有类似的东西,那么你可以在[select]中显示文本字符串,当一个被选中+发布时,它会从数组设置中选择合适的类型,显然我没有'在实际的页面中对此进行了测试,我很喜欢,但我认为你可以理解我正在尝试做什么?