2

現在、2つの選択オプションがあるフォームがあります。1つはケース0を表示でき、もう1つはケース4を表示できます。

タブを取得したので、フォームを使用できません。1つのオプションを選択するとサイトが更新されるためです。そして、両方のタブにそのオプションが表示されます。

私は1つのオプションだけを持っているようにしました。しかし、それはうまくいきません。

これはタブ/フォームコードです:

<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を表示します。

そして、2番目の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;
    }
4

3 に答える 3

5

ewww、スイッチは少し醜いです、ここにもっと良いバージョンがあります:

$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」=>「ORDERBY...」のように手動で配列インデックスを指定するだけです。ソートマップ配列とそれは同じように機能するはずです。

于 2012-07-22T13:37:37.563 に答える
1

うーん、これは私が欲しいものです。

まず、コンポーネントを編集しています。もともとは、ゲームを表示したい順序のリストを表示するフォームです。

しかし、代わりにタブメニューが必要です。1つは新しいゲームで、もう1つは人気のゲームです。

そこで、タブメニュー/システムを作成しました。次に、各divにコードを追加しました。したがって、それらは同じコードとフォームを持っています。しかし、私が元にいるとき。タブ1(新しいゲーム)を選択し、選択したリストから日付順に選択します。最新のゲームをすべて表示します。しかし、他のタブ(POPULAR GAMES)に移動すると、最新のゲームを表示するように変更されました。それはお互いを継承するのが好きです。

これは、タブのコード全体です。

    <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>

このタブ(最新のゲーム)では、最新のゲームのみを表示したい

そして、もう1つのタブ(人気のあるゲーム)はまったく同じように見えます。

希望はもっと説明しますか?

于 2012-07-22T14:50:55.573 に答える
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]内にテキスト文字列を表示できます。テキスト文字列を選択して投稿すると、配列設定から適切なタイプが選択されます。明らかに、これはテストしていません。実際のページでは、私はアドリブしていますが、私が何をしようとしているのか理解できると思いますか?

于 2012-07-22T14:26:25.817 に答える