2011-09-16 40 views
1

這應該是很簡單,但我`噸修復它:/日曆下拉錯誤

我使用的顯示月份列表的組成部分,即將到來的12要準確。但是,去年12月,這一年並沒有改變到2012年。

在這裏看到: http://protekco.com/index.php/en/reservation.html

並調用它的代碼:

 echo AHtml::getMonthsSelect('imonth', (int) $month, $year, $currentMonth, $currentYear, $config->calendarDeepMonth, 'onchange="Calendars.monthNavigation(this.value)"'); ?> 

的$ currentYear是呈現在網站上的實際年變量。如果我們已經過了年底,基本上需要添加+1。有任何想法嗎?

謝謝!

編輯:這裏是個數組:

function getMonthsSelect($name, $selectedMonth, $selectedYear, $month, $year, $deep, $attribs = '') 
{ 
    $months = array(1 => JText::_('January') , 2 => JText::_('February') , 3 => JText::_('March') , 4 => JText::_('April') , 5 => JText::_('May') , 6 => JText::_('June') , 7 => JText::_('July') , 8 => JText::_('August') , 9 => JText::_('September') , 10 => JText::_('October') , 11 => JText::_('November') , 12 => JText::_('December')); 

    $stop = $month + $deep; 
    for ($i = $month; $i < $stop; $i ++) 
     $arr[] = JHTML::_('select.option', ($key = (! ($k = $i % 12) ? 12 : $k)) . ',' . ($y = (floor(($i - $month)/12) + $year)), ($months[$key] . '/' . $y)); 

    return JHTML::_('select.genericlist', $arr, $name, $attribs, 'value', 'text', $selectedMonth . ',' . $selectedYear); 
} 

編輯3:最後的解決方案:

function getMonthsSelect($name, $selectedMonth, $selectedYear, $month, $year, $deep, $attribs = '') 
{ 
    $months = array(1 => JText::_('January') , 2 => JText::_('February') , 3 => JText::_('March') , 4 => JText::_('April') , 5 => JText::_('May') , 6 => JText::_('June') , 7 => JText::_('July') , 8 => JText::_('August') , 9 => JText::_('September') , 10 => JText::_('October') , 11 => JText::_('November') , 12 => JText::_('December')); 

    $stop = $month + $deep; 
    $wheremonth = 12 - $month; 
    for ($i = $month; $i < $stop; $i ++, $wheremonth--) 

    if ($wheremonth >= 0) { 
     $arr[] = JHTML::_('select.option', ($key = (! ($k = $i % 12) ? 12 : $k)) . ',' . ($y = (floor(($i - $month)/12) + $year)), ($months[$key] . '/' . $y)); 
     } 
     else {   $arr[] = JHTML::_('select.option', ($key = (! ($k = $i % 12) ? 12 : $k)) . ',' . ($y = (floor(($i - $month)/12) + $year+1)), ($months[$key] . '/' . $y)); 
     } 
    return JHTML::_('select.genericlist', $arr, $name, $attribs, 'value', 'text', $selectedMonth . ',' . $selectedYear); 

     } 

回答

0

不知道如何輸入這裏工作,但你必須在下個月與上月持平。你可以實現一個計數器變量,當你點擊下一個時會增加,當你點擊前一個時減少。因此,像:

$i = 1; 

function datetracker() { 

if($nextbtnclicked = true) { 
    $i++; 
} elseif($prevbtnclicked = true) { 
    $i--; 
} 

if($i == 13) { 
    $i = 1; 
    $currentYear += 1; 
} 
} 

我只是用樣品的差異,但你可以實現在JavaScript中的計數器並執行登錄的JS。

編輯:該代碼實際上看起來不錯。不知道爲什麼它不工作,但嘗試這樣的事情。

function getMonthsSelect($name, $selectedMonth, $selectedYear, $month, $year, $deep, $attribs = '') 
{ 
    $months = array(1 => JText::_('January') , 2 => JText::_('February') , 3 => JText::_('March') , 4 => JText::_('April') , 5 => JText::_('May') , 6 => JText::_('June') , 7 => JText::_('July') , 8 => JText::_('August') , 9 => JText::_('September') , 10 => JText::_('October') , 11 => JText::_('November') , 12 => JText::_('December')); 

    $stop = $month + $deep; 
    $newyear = false; 
    for ($i = $month; $i < $stop; $i ++) { 

     if($newyear) { 
     $arr[] = JHTML::_('select.option', ($key = (! ($k = $i % 12) ? 12 : $k)) . ',' . ($y = (floor(($i - $month)/12) + $year + 1)), ($months[$key] . '/' . $y)); 
     $newyear = false; 
     } else { 
     $arr[] = JHTML::_('select.option', ($key = (! ($k = $i % 12) ? 12 : $k)) . ',' . ($y = (floor(($i - $month)/12) + $year)), ($months[$key] . '/' . $y)); 

     } 
    if($i == 12) { $newyear = true; } 
    } 

    return JHTML::_('select.genericlist', $arr, $name, $attribs, 'value', 'text', $selectedMonth . ',' . $selectedYear); 
} 
+0

感謝您的幫助;已經有了諸如Currentmonth和NextYear等變量,它們適用於大型底部日曆。當點擊日曆底部的「下個月」鏈接時,它會將當前月份值加1,直到達到12爲止。然後,它將+1值添加到當前年份,並將currentmonth重置爲1等。我只是不知道如何在下拉選擇框中完成預加載! – Sherif

+0

那麼你必須跟蹤,如果你已經使用了某個月。也許在您循環添加月份時創建$月的數組。每次循環時檢查數組,如果$ month存在,則設置$ currentYear + 1. –

+0

這聽起來像是一個完美的解決方案。但是我真的不熟悉構建數組,但是,如果您可以刪除一行或兩行代碼,將不勝感激! – Sherif