2016-08-03 32 views
0

ページが分かれているサイトで作業していて、現在の場所を出力したいとします。 Showing 10-18 of 50 resultsしかし、1ページあたりの制限よりも少ないエントリがある場合、正しい出力を得るのに問題があります。1ページあたりのエントリ数にエラーがあります

サイトでは、URIの最後の部分がページリストのどこにあるかを示すため、ページあたりの制限が9の場合、P18ページ3のURIは/path/to/page/P9/となります。など

これは私がこれまで持っているものです。

$output  = ''; 

// the variables below are passed from a template to a plugin which does the processing 

$url_segment = $this->EE->TMPL->fetch_param('url_segment'); // e.g. P9, P18 etc. 
$per_page  = $this->EE->TMPL->fetch_param('page_num'); // e.g. 9 
$total_entries = $this->EE->TMPL->fetch_param('total'); // e.g. 50 

$current_page = preg_match('/^P+[0-9]+$/', $url_segment) === 1 ? str_replace('P','', $url_segment) +1 : 1; 

if ($total_entries == 1) { 
    $output .= '1 tour'; 
} else { 
    if ($total_entries <= $per_page){ 
     $output .= '1 to '.($per_page<=$total_entries ? $total_entries : $per_page); 
    } else { 
     $output .= $current_page.' to '; 
     $output .= $current_page+$per_page-1; 
    } 
    $output .= ' of '.$total_entries.' tours'; 
} 

return $this->return_data = $output; 

if ($total_entries <= $per_page)は、これまで例えば、trueと評価していないようですページの上限が9で3つのエントリしかない場合は、1 to 9 of 3 entriesと表示されます。

私は変数を整数にする必要があると考えていましたが、それは条件の反対側が常にtrueと評価されるため、ページごとの制限より多くのエントリがある場合、出力は常に同じですあなたがいるページのうち、例えばすべてのページに1 to 14 of 14 entries

どこが間違っていますか?この部分、あなたの最初のチェックで

答えて

1
if ($total_entries <= $per_page){ 
    $output .= '1 to '.($per_page<=$total_entries ? $total_entries : $per_page); 

$total_entriesは以下$per_pageよりもあるが、それはより多くのまたは等しいかどう直後、あなたがチェックしている場合。ここでは論理が間違っています(2番目のif文が逆になります)。私は私の問題の一部は、変数を使用して数値計算が正しく動作していないということだと思います

if ($total_entries <= $per_page){ 
    $output .= '1 to '.$total_entries; 
+0

はこれを試してみてください。例えば ​​'intval($ total_entries/$ per_page)+ 1'は私に' 1'を与えますが、変数の値である 'intval(14/6)+ 1'を実行すると、 3 '。 – Tyssen

+0

あなたが助けることができる各変数を 'var_dump'しようとする – Treast

+0

問題はCMS固有であったので、' $ total_entries'の値を関数に渡すと文字列として正しく出力されますが、数学的計算では常に0と評価されています:/ – Tyssen

関連する問題