2013-03-22 5 views
1

Я пытался решить эту проблему в течение нескольких дней. пожалуйста, помогите или предложите другие методы, если это возможно. я могу отображать общий балл 10 уроков для каждого учащегося в хроме, сафари и firefox. однако, я получил эту ошибку «эта страница не может быть отображена» в IE9/10.логика cakephp - другие методы, чтобы получить тот же результат

Я устал отлаживать и обнаружил, что IE9/10 показывает указанную выше ошибку, когда я использую цикл for через requestAction. сказав это, я бы потребовал, чтобы requestAction получил общий балл.

Чтобы получить общий балл, я зависеть от каждого цикла (foreach ($ customers as $ customer) {...}), чтобы получить каждый $ customer ['Customer'] ['id'] и передать его requestAction и вернуть результат оценки.

QNS 1. Есть ли другой способ достичь этого результата?

QNS 2. Могу ли я сделать все в контроллере? Если да, то как?

CONTROLLER

function eachlesson($lessonid, $sessionkey, $customer_id) { 

return $this->Score->find('first', array('conditions' => array('Score.test_bk_session_id' => $sessionkey, 'Customer.customers_types' => 'student', 'Score.lesson' => $lessonid, 'Score.customer_id' => $customer_id))); 

} 

VIEW

<table> 
<?php foreach ($customers as $customer) { ?> 
<tr> 
    <td> 
     <?php echo $customer['Customer']['customers_name']; ?> 
    </td> 
    <td> 
    <?php 
    $customer_id = $customer['Customer']['id']; 
    $sessionkey = $this->params['pass'][1]; 

    //LOOP THROUGH 10 TIMES TO GET LESSON 1 - 10 SCORES 
    for ($i=1; $i<=10; $i++) { 
     $lessonid = $i; 
     $score = $this->requestAction('/scores/eachlesson/'.$lessonid."/".$sessionkey."/".$customer_id); 


    //GETTING THE TOTAL SCORE FOR LESSON 1 TO 10 
    (int)${'totaleachlesson'.$i} = $score['Score']['BI_pts'] + $score['Score']['FD_pts'] + $score['Score']['PO_pts'] + $score['Score']['WW_pts'] + $score['Score']['MG_pts'] + $score['Score']['FO_pts']; 

    } 

    //ADDING THE TOTAL SCORE OF THE 10 LESSONS 
    $figureofcorrecttotal = $totaleachlesson1 + $totaleachlesson2 + $totaleachlesson3 + $totaleachlesson4 + $totaleachlesson5 + $totaleachlesson6 + $totaleachlesson7 + $totaleachlesson8 + $totaleachlesson9 + $totaleachlesson10; 

    //DISPLAY THE TOTAL SCORE 
    echo $figureofcorrecttotal; 

    ?> 
    </td> 
</tr> 
<?php } ?> 
</table> 

HTML OUTPUT

<table class="tablesorter summary3pt2"> 
     <thead> 
     <tr> 
       <th width="170" style="padding-right:5px;" class="empty">Name</th> 
       <th width="120" class="header">No of Correct</th> 

      </tr> 
      </thead> 
      <tbody> 
         <tr> 
      <td class="bold" align="right"> 
      Drew Parsons    </td> 
      <td> 
     2    </td> 
      </tr> 
          <tr> 
      <td class="bold" align="right"> 
      Natasha Francis    </td> 
      <td> 
     0    </td> 
      </tr> 
          <tr> 
      <td class="bold" align="right"> 
      Johanna Harmon    </td> 
      <td> 
     0    </td> 
      </tr> 
          <tr> 
      <td class="bold" align="right"> 
      Aubrey Mckenzie    </td> 
      <td> 
     0    </td> 
      </tr> 
          <tr> 
      <td class="bold" align="right"> 
      Edith Sims    </td> 
      <td> 
     0    </td> 
      </tr> 
          <tr> 
      <td class="bold" align="right"> 
      Brandy Ruiz    </td> 
      <td> 
     0    </td> 
      </tr> 
          <tr> 
      <td class="bold" align="right"> 
      Toni Marshall    </td> 
      <td> 
     0    </td> 
      </tr> 
          <tr> 
      <td class="bold" align="right"> 
      Cedric Nash    </td> 
      <td> 
     0    </td> 
      </tr> 
          <tr> 
      <td class="bold" align="right"> 
      Penny Maldonado    </td> 
      <td> 
     0    </td> 
      </tr> 
          <tr> 
      <td class="bold" align="right"> 
      Brandi Perry    </td> 
      <td> 
     0    </td> 
      </tr> 
          <tr> 
      <td class="bold" align="right"> 
      Conrad Hogan    </td> 
      <td> 
     0    </td> 
      </tr> 
          <tr> 
      <td class="bold" align="right"> 
      Travis Sparks    </td> 
      <td> 
     0    </td> 
      </tr> 
          <tr> 
      <td class="bold" align="right"> 
      Winifred Watson    </td> 
      <td> 
     0    </td> 
      </tr> 
          <tr> 
      <td class="bold" align="right"> 
      Shannon Strickland    </td> 
      <td> 
     0    </td> 
      </tr> 
         </tbody> 

     </table> 
+2

Я подозреваю, что там и ошибка в Html, но я не могу быть уверен, если вы не добавите какой-то пример 'html', который сгенерирован. Тем не менее, извлечение баллов действительно должно быть непосредственно извлечено из модели внутри контроллера. RequestAction часто плохо влияет на производительность и вызывает много накладных расходов. – thaJeztah

+0

Да, серверу все равно, какой браузер работает, поэтому ошибка будет сгенерированным HTML. Отправьте это. –

+0

привет парни. Я размещаю вывод html. Я сомневаюсь, что в html есть ошибка. thaJeztah. вы предположили, что я должен получить результат от модели внутри контроллера? у вас есть какой-либо пример, который я могу выполнить, так как мне требуется requestAction, чтобы получить результат оценки. – DANLEE

ответ

1

Во-первых, почему вы "Иметь "использовать requestAction? Вы вообще не следуете правилам торта .. Вам нужно занять минуту и ​​пойти прочитать документацию ... Имо, вы хотите связать модель «Оценка» с моделью «Заказчик» и содержать два в одном вызове.

<?php 
// Customer model. 

class Customer extends AppModel { 
    var $name = 'Customer'; 

    var $hasMany = array(
     'Score' => array(
      'className' => 'Score', 
      'foreignKey' => 'customer_id', 
      'limit' => 10, 
      'conditions' => array(
       '<conditions go here>' 
      ) 
     ) 
    ); 
} 

?> 

<?php 
// Score model. 

class Score extends AppModel { 
    var $name = 'Score'; 

    var $belongsTo = array(
     'Customer' => array(
      'className' => 'Customer', 
      'foreignKey' => 'customer_id' // This assumes you have a customer_id field in the 'scores' table. 
     ) 
    ); 
} 

?> 

Теперь модели связаны, если вы не привязаны Containable поведение к ним вы можете сделать это в каждой модели или в главном app_controller.php, добавив:

var $actsAs = array('Containable'); 

Теперь все, что вам нужно сделать, это создать модель оценки при выполнении находок на модели клиента, и 10 баллов будут автоматически получены для вас.

<?php 
// customers_controller.php 

class CustomersController extends AppController { 
    var $name = 'Customers'; 

    function index() { 
     // Contain the child method. 
     $this->Customer->contain(array(
      'Score' => array(
       'conditions' => array(
        'Score.test_bk_session_id' => $sessionkey, 
        'Score.lesson' => $lessonid 
       ) 
      ) 
     )); 
     $customers = $this->Customer->find('all', array(
      'conditions' => array(
       'Customer.customers_types' => 'student' 
      ) 
     )); 
     // Now you have all your customers, AND their associated 
     // scores. No more request action needed (never use that imo) 
     $this->set('customers', $customers); 

     // Your array should look like this: 
     // $customers = 
     //array(
     // [0] => array(
     //  'Customer' => array(<CustomerArray>), 
     //  'Score' => array(<ScoreArray>) 
     // ), 
     // [1] => ... 
     //) 
    } 
} 

?> 

Я написал это довольно быстро, поэтому, пожалуйста, извините за любые ошибки или ошибочные предположения. Надеюсь, это поможет вашей проблеме.

+1

Что касается оригинала «Эта страница не может быть отображена». Я бы поместил деньги, что IE блокирует все запросы, думая, что это спам ..Так как кто знает, сколько у вас клиентов, то есть 10 HTTP-запросов PER-клиента ... Всего 100 клиентов будут давать вам 1000 запросов на одну страницу примерно 1-2 секунды. Так что около 500 HTTP-запросов в секунду ... ОЧЕНЬ неэффективен. –

+0

спасибо за ваше предложение! Я согласен с тем, что вы сказали. я попробую ваши коды, чтобы увидеть, работает ли это для меня. – DANLEE

+0

hey drew, у меня нет таблицы «уроков». на данный момент пользователь вводит тест, урок нет. и оценка будет храниться как строка в таблице «оценка». то, что я пытаюсь достичь, состоит в том, чтобы собрать вместе метки для 10 уроков строк/записей в таблице оценки для каждого ученика. – DANLEE