2014-09-02 5 views
0

Мне нужна помощь, отображающая правильные значения из массива в таблице html. Я пишу механизм планирования, который позволит пользователю планировать классы на основе предпочтительных дат/времени и проверять наличие преподавателей.Проблемы с отображением результатов массива в таблице с помощью CodeIgniter

В приведенном ниже коде правильно выводится таблица с 8 неделями (в строках), а также отображаются мои доступные преподаватели (в столбцах). Мои даты увеличиваются на 1 неделю за раз, но проблема, которую я испытываю, отображает правильную доступность на основе Educator_Id. Мой взгляд, похоже, не проходит через преподавателей должным образом, так как для каждого педагога отображается тот же статус. Просмотр журналов mysql показывает, что были выполнены правильные запросы (я вижу, что несколько идентификаторов были переданы).

Вот как выглядит мой стол. Неделя 4 должна показывать только персональный день для Джейн Доу.

Спасибо за любую помощь, которую вы можете дать.

Here's my table

Мое мнение:

<table> 
<thead> 
    <tr> 
    <th>Week #</th> 
    <th>Date</th> 
    <th>Time</th> 
    <?php foreach($educators as $educator): ?> 
    <th><?php echo $educator->First_Name.' '.$educator->Last_Name; ?></th> 
    <?php endforeach; ?> 
    </tr> 
</thead> 

<tbody> 

<?php 
$i = 0; 
foreach($weeks as $key => $week): 
$class_date= $class_dates[$key]; 
$week = $weeks[$key]; 
$master_schedule = $master_schedules[$key]; 
$educator_schedule = $educator_schedules[$key]; 
$educator_availability = $educator_availabilities[$key]; 
$week_day_id = $i + 1; 
?> 
    <tr> 
    <td>Week <?php echo $week_day_id; ?></td> 
    <td><?php echo $class_date; ?></td> 
    <td><?php echo $opportunity->First_Preferred_Start_Time.' - '.$opportunity->First_Preferred_End_Time; ?></td> 

    <?php foreach($educators as $educator): ?> 
    <td> 
    <?php if($week->Count == 1): echo 'Class Conflict'; endif; ?> 
    <?php if($master_schedule->Count == 1): echo $master_schedule->Title; endif; ?> 
    <?php if($educator_schedule->Count == 1): echo $educator_schedule->Title; endif; ?> 
    <?php if($educator_availability->Count == 1): echo 'Not Scheduled'; endif; ?> 
    </td> 
    <?php endforeach; ?> 
    </tr> 
    <?php if($i ++ == 7) break; endforeach; ?> 
</tbody> 
</table> 

Мой контроллер:

function schedule_opportunity($Opportunity_Id) { 
    //retrieve opportunity details 
    $this->data['opportunity'] = $this->ion_auth_model->get_opportunity($Opportunity_Id)->row(); 
    $opportunity = $this->ion_auth_model->get_opportunity($Opportunity_Id)->row(); 

    $Curricula_Id = $opportunity->Curricula_Id; 
    $Preferred_Start_Time = $opportunity->First_Preferred_Start_Time; 
    $Preferred_End_Time = $opportunity->First_Preferred_End_Time; 
    $Preferred_Start_Date = $opportunity->First_Preferred_Start_Date; 

    //find available educators 
    $this->data['educators'] = $this->ion_auth_model->available_educators($Curricula_Id); 
    $educators = $this->ion_auth_model->available_educators($Curricula_Id); 

    foreach($educators as $educator): 
     $Educator_Id = $educator->Educator_Id; 

     for($i=0; $i < 8; $i++): 
      $Date = strtotime("+$i week", strtotime($Preferred_Start_Date)); 
      $Class_Date = date("Y-m-d", $Date); 

      $this->data['class_dates'][] = date("Y-m-d", $Date); 
      $this->data['weeks'][] = $this->ion_auth_model->week($Educator_Id, $Class_Date, $Preferred_Start_Time, $Preferred_End_Time)->row(); 
      $this->data['master_schedules'][] = $this->ion_auth_model->master_schedule_check($Class_Date, $Preferred_Start_Time, $Preferred_End_Time)->row(); 
      $this->data['educator_schedules'][] = $this->ion_auth_model->educator_schedule_check($Educator_Id, $Class_Date, $Preferred_Start_Time, $Preferred_End_Time)->row(); 
      $this->data['educator_availabilities'][] = $this->ion_auth_model->educator_availability_check($Educator_Id, $Class_Date, $Preferred_Start_Time, $Preferred_End_Time)->row(); 
     endfor; 
    endforeach; 

    $this->data['main_content'] = 'schedule_opportunity'; 
    $this->load->view('./_blocks/template', $this->data); 
} 

Моя модель:

function educator_schedule_check($Educator_Id, $Class_Date, $Preferred_Start_Time, $Preferred_End_Time) { 
    $Date = "('$Class_Date' BETWEEN Start_Date AND End_Date AND All_Day = 1 AND Educator_Id = '$Educator_Id' OR '$Class_Date' BETWEEN Start_Date AND End_Date AND (Start_Time BETWEEN '$Preferred_Start_Time' AND '$Preferred_End_Time' OR End_Time BETWEEN '$Preferred_Start_Time' AND '$Preferred_End_Time'))"; 

    $this->db->select("Count(*) AS Count, Title")->from('Educators_Schedule')->where($Date)->where('Educator_Id', $Educator_Id); 
    return $this->db->get(); 
} 

ответ

2

Кое-что о следующих за петли, кажется, не совсем хотя мне трудно сказать наверняка, не используя отладчик.

<?php foreach($educators as $educator): 
    <td> 
    <?php if($week->Count == 1): echo 'Class Conflict'; endif; ?> 
    <?php if($master_schedule->Count == 1): echo $master_schedule->Title; endif; ?> 
    <?php if($educator_schedule->Count == 1): echo $educator_schedule->Title; endif; ?> 
    <?php if($educator_availability->Count == 1): echo 'Not Scheduled'; endif; ?> 
    </td> 
<?php endforeach; ?> 

Я вижу, что вы зацикливание над педагогами, но то, что я не вижу, это в настоящее время педагог фактически меняется в течение итерации. Кажется, вы не перемещаетесь по массивам $week, $master, $educator_schedule, and $educator_availability. Вместо этого вы можете получить доступ к одному и тому же элементу в каждом из этих массивов.

Другими словами, рассмотрите два массива. You перебирает один массив, как, например:

<?php 
    foreach($foos as $foo): 
     echo $bar; 
    endforeach; 
?> 

Все, что вы могли бы сделать в этом цикле это распечатать значение для $bar для каждого элемента $foos.

Вместо этого вам нужно получить доступ к элементам вашего $week, $master, $educator_schedule, and $educator_availability в соответствии с воспитателем на который ссылается в конкретной итерации для цикла так что-то, что функции, как:

<?php foreach($educators as $educator): 
    <td> 
    <?php if($week[$educator]->Count == 1): echo 'Class Conflict'; endif; ?> 
    <?php if($master_schedule[$educator]->Count == 1): echo $master_schedule->Title; endif; ?> 
    <?php if($educator_schedule[$educator]->Count == 1): echo $educator_schedule->Title; endif; ?> 
    <?php if($educator_availability[$educator]->Count == 1): echo 'Not Scheduled'; endif; ?> 
    </td> 
<?php endforeach; ?> 

Который не будет работать с кодом в его текущее состояние, но может указывать вам в правильном направлении.

Наконец, я немного обеспокоен тем, как вы контролируете порядок элементов, возвращаемых из запросов к базе данных. В большинстве случаев ваши результаты возвращаются в том же порядке, но это может помочь для ясности и здравомыслия, если вы добавите предложение order_by к некоторым вашим запросам, чтобы вы могли быть уверены, что ваши результаты правильно коррелированы.

+0

Спасибо за ответ Джоэл. Я согласен, вот что происходит. В моем контроллере идентификатор преподавателя проходит правильно.Мне придется работать над исправлением этого, на мой взгляд. Кроме того, спасибо за совет по поводу заказа order_by. Хорошая идея. –

Смежные вопросы