Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z przekazaniem zmiennej tablicowej
Forum PHP.pl > Forum > PHP
klaudia143a
Probuje stworzyc tabelke- kalendarz ktora wyswietla kto w jaki dzien ma wakacje, problem polega na tym ze dane pokazywane sa po dniach a nie po dniach i uzytkownikach, czyli jak np ktorys z uzytkownikow ma urlop 3 maja, to od razu wszyscy inni rowniez maja zaznaczony urlop w tym dniu. Stworzylam tabele ktora idzie po uzytkownikach i dniach jednak smarty nie przyjmuja zmiennej tablicowej dwuwymiarowej:/
Kod napisany w php:
  1. <?php
  2. $employee = array();
  3. $dayOffset = dayNoOfFirstDayOfMonth($date_start);
  4. $date_start_tmp = strtotime($date_start);
  5.  
  6. for ($p = 0; $p < $usercount; $p++)
  7. {
  8. for ($i = 0; $i < $daysCount; $i++)
  9. {
  10.  
  11.    $employee[$p][$i]['index2'] = $i;
  12.    $dateStart = date('Y-m-d', $date_start_tmp);
  13.    $employee[$i]['number'] = (int)date('d', $date_start_tmp);
  14.  
  15.    $dayWeek = dayWeek($date_start_tmp); //$dayOffset + 1 + date('d', $date_start_tmp)
  16.    $employee[$p][$i]['name'] = dayNameAbr($dayWeek);
  17.    $employee[$p][$i]['style'] = 'work';
  18.    $employee[$p][$i]['readOnly'] = (($periodBegining > $date_start_tmp)?'disabled="disabled"':'');
  19.  
  20.    if (get_vacation_type($userID[$p], $dateStart) == '1')
  21.    {
  22.        $employee[$p][$i]['style'] = 'vacationFL';
  23.    }
  24.  
  25.    if (get_vacation_type($userID[$p], $dateStart) == '2')
  26.    {
  27.        $employee[$p][$i]['style'] = 'vacationTR';
  28.    }
  29.  
  30.    if ($dayWeek % 7 == 0 || $dayWeek % 7 == 6)
  31.    {
  32.        $employee[$p][$i]['style'] = 'weekDay';
  33.    }
  34.  
  35.    if (in_array($dateStart, $holidays) === true)
  36.    {
  37.        $employee[$p][$i]['style'] = 'publicHoliday';
  38.        $employee['holidayName'] = $holidaysNames[array_search($dateStart, $holidays)];
  39.    }
  40.    if ($dateStart == date('Y-m-d'))
  41.    {
  42.        $employee[$p][$i]['style'] = 'today';
  43.    }
  44.  
  45.    $date_start_tmp = strtotime("$date_start + ".($i+1)." Days");
  46.  
  47. $user_color = array();
  48. $user_color[][] = $employee[$p][$i]['style'];
  49. }
  50. }
  51. //echo "<pre>";
  52. //print_r($employee);
  53. //print_r($usercount);
  54. //echo $daysCount;
  55. //echo "</pre>";
  56.  
  57. $smarty->assign ('user_color',$user_color);
  58. ?>


i plik w tpl:
  1. <table class="timesheet" border="0" cellpadding="2" cellspacing="2">
  2. <tr>
  3. <td colspan="3"> </td>
  4. {foreach from=$calendar key=id item=i}
  5. <td align="center" title="{$i.holidayName}">{$i.number}</td>
  6. {/foreach}
  7. </tr>
  8. <tr>
  9. <td colspan="3"> </td>
  10. {foreach from=$calendar key=id item=i}
  11. <td class="dayName" title="{$i.holidayName}">{$i.name}</td>
  12. {/foreach}
  13. </tr>
  14.  
  15.  
  16. {section name=p loop=$userID}
  17. <tr>
  18. <td align="right">
  19. </td><td>
  20. <div id="userIDCombo{$smarty.section.userID}">
  21. <hidden name="userID{$smarty.section.userID}" >
  22. <input type="hidden">{$userID[p]}</option>
  23. </select>
  24. </div>
  25. </td>
  26. </td><td>
  27. <div id="userNAMECombo{$smarty.section.userNAME}">
  28. <text name="userNAME{$smarty.section.userNAME}" >
  29. <option value>{$userNAME[p]}</option>
  30. </select>
  31. </div>
  32. </td>
  33.  
  34. {foreach from=$employee key=p item= i}
  35.  
  36. <td class="$user_color[p][i]" title="{$i.holidayName}">
  37.  
  38. <input type="hidden" id="wh_{$i.number}_{$userID[p]}"
  39. name="wh_{$i.number}_{$userID[p]}" value="">
  40. <input {$i.readOnly} class="smallInput" type="" id="wh_{$i.number}_{$userID[p]}"
  41. name="wh_{$i.number}_{$userID[p]}" value="" maxlength="4"
  42. onchange="valueArr[{math equation="x - 1" x=$userID[p]}][{$i.index2}] = (this.value != '')?this.value:0.0;
  43. countRow{$userID[p]}();"
  44. ondblclick="manageComment('wh_{$i.number}_{$userID[p]}', 'wh_{$i.number}_{$userID[p]}');"
  45. oncontextmenu="return false;" onkeypress="return enter(this);" onkeydown="return enter(this);" title="{$i.holidayName}" />
  46. </td>
  47. {/foreach}
  48. </tr>
  49. {/section}
  50. </table>



Bede bardzo wdzieczna za pomoc w rozwiazaniu :/ bo mecze sie nad tym juz ktorys dzien
JoShiMa
Cytat(klaudia143a @ 3.08.2009, 10:12:19 ) *
Stworzylam tabele ktora idzie po uzytkownikach i dniach jednak smarty nie przyjmuja zmiennej tablicowej dwuwymiarowej:/


Bzdura. Smarty przyjmuje tablice wielowymiarowe. Tylko trzeba się umieć odwoływać do elementów i wygodniej jest to robić za pomocą foreach a nie section. Poniżej masz przykład podwójnej pętli przetwarzającej dwuwymiarową tablicę na serię list:
Kod
{foreach from=$tablica key=index item=rzad}
    <ul>
        {foreach key=index2 from=$rzad item=dane}
            <li>{$dane}</li>
        {/foreach}
    </ul>
{/foreach}
klaudia143a
a jak polaczyc z soba petle foreach odwolujaca sie do dwoch roznych tablic?
  1. {foreach from=$employee item=i}
  2. {foreach from=$user_color item=p}
  3. {foreach from=$user_color[p] item= z}
  4.  
  5. <td class={$z} title="{$i.holidayName}">
  6. <input {$i.readOnly} class="smallInput" type="" id="wh_{$i.number}_{$userID[p]}"
  7. name="wh_{$i.number}_{$userID[p]}" value="" maxlength="4"
  8. onchange="valueArr[{math equation="x - 1" x=$userID[p]}][{$i.index2}] = (this.value != '')?this.value:0.0;
  9. countRow{$userID[p]}();"
  10.  
  11.  
  12. {/foreach}
  13. {/foreach}
  14. {/foreach}
JoShiMa
A co chcesz tymi pętlami osiągnąć? Zamiast dawać kilometry kodu pokaż mi konstrukcję tych tablic.
klaudia143a
tak jak pisalam wyzej, zastosowalam ten pomysl z foreach, jednak ona pokazuje mi kiedy w jaki dzien ktos ma wakacje, jednak jeszcze trzeba umiesic to w samym kalendarzu. Moze troszke sie zle wyrazilam, bo to $user_color jest zmienna tablicowa, a $employee jest tablica
  1. <?php
  2. $employee = array();
  3.  
  4. $dayOffset = dayNoOfFirstDayOfMonth($date_start);
  5. $date_start_tmp = strtotime($date_start);
  6.  
  7. $user_color = array();
  8.  
  9. for ($p = 0; $p < $usercount; $p++)
  10. {
  11. for ($i = 0; $i < $daysCount; $i++)
  12. {
  13.    
  14.    $employee[$i]['index2'] = $i;
  15.    $dateStart = date('Y-m-d', $date_start_tmp);
  16.    $employee[$i]['number'] = (int)date('d', $date_start_tmp);
  17. //    echo "$date_start - $i - ".$employee[$i]['number']." - $dateStart - $date_start_tmp<br>";
  18.  
  19.    $dayWeek = dayWeek($date_start_tmp); //$dayOffset + 1 + date('d', $date_start_tmp)
  20.    $employee[$i]['name'] = dayNameAbr($dayWeek);
  21.    $employee[$p][$i]['style'] = 'work';
  22.    $employee[$i]['readOnly'] = (($periodBegining > $date_start_tmp)?'disabled="disabled"':'');
  23.  
  24.    if (get_vacation_type($userID[$p], $dateStart) == '1')
  25.    {
  26.        $employee[$p][$i]['style'] = 'vacationFL';
  27.        
  28.    }
  29.  
  30.    if (get_vacation_type($userID[$p], $dateStart) == '2')
  31.    {
  32.        $employee[$p][$i]['style'] = 'vacationTR';
  33.    }
  34.  
  35.    if ($dayWeek % 7 == 0 || $dayWeek % 7 == 6)
  36.    {
  37.        $employee[$p][$i]['style'] = 'weekDay';
  38.    }
  39.  
  40.    if (in_array($dateStart, $holidays) === true)
  41.    {
  42.        $employee[$p][$i]['style'] = 'publicHoliday';
  43.        $employee['holidayName'] = $holidaysNames[array_search($dateStart, $holidays)];
  44.    }
  45.    if ($dateStart == date('Y-m-d'))
  46.    {
  47.        $employee[$p][$i]['style'] = 'today';
  48.    }
  49.  
  50.    $date_start_tmp = strtotime("$date_start + ".($i+1)." Days");
  51.  
  52. $user_color[$p][$i] = $employee[$p][$i]['style'];
  53. }
  54. }
  55. //echo "<pre>";
  56. //print_r($employee);
  57. //print_r($usercount);
  58. //print_r($user_color[][]);
  59. //echo $daysCount;
  60. //echo $usercount;
  61. //echo "</pre>";
  62. ?>

To wydaje mi sie ze wszystko jest zdefiniowane dobrze, problem lezy tylko w smartach, ktorych kod z tymi petlami dalam wyzej
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.