2015-02-25 5 views
0

Я совершенно не знаком с Yii, и мне нужна помощь, даже если она выглядит тривиальной. У меня есть страница, где я создаю таблицу из моей базы данных, я добавил параметр поиска, и мне также нужно сгенерировать результат в виде таблицы.Onclick Action in Yii

Проблема в том, что когда я нажимаю кнопку, ничего не происходит. Я также пробовал использовать submit, но это не сработало.

Это мой код:

... просмотров/супермаркеты/index.php:

<?php 
use yii\helpers\Html; 
use yii\widgets\LinkPager; 
use app\views\supermarkets\search; 
?> 
<h1>Supermarkets</h1> 
<ul> 

<p> 

    Search by Name 

</p> 

<INPUT TYPE = "Text" VALUE ="" NAME = "searchname"> 

<button onclick="myFunction($_POST['searchname'])">Search</button> 
<h3> </h3> 


<?php 
    $array = (array) $supermarkets; 

function myFunction($sname){ 
if (isset($sname) && $sname!='') { 


    $row = Yii::app()->db->createCommand(array(
    'select' => '*', 
    'from' => 'supermarkets', 
    'where' => array('like', 'Name','%'.$sname.'') 

))->queryRow(); 

$array = (array) $row; 

    } 
    echo $array; 
    $this->render('index',array('supermarkets' => $array)); 
    } 


function build_table($array){ 

    // start table 

    $html = '<table class="altrowstable" id="alternatecolor">'; 

    // header row 

    $html .= '<tr>'; 

    foreach($array[0] as $key=>$value){ 

      $html .= '<th>' . $key . '</th>'; 

     } 

    $html .= '</tr>'; 

    // data rows 

    foreach($array as $key=>$value){ 

     $html .= '<tr>'; 

     foreach($value as $key2=>$value2){ 

      $html .= '<td>' . $value2 . '</td>'; 

     } 

     $html .= '</tr>'; 

    } 

    // finish table and return it 

    $html .= '</table>'; 

    return $html; 

} 



echo build_table($array); 

?> 


<?= LinkPager::widget(['pagination' => $pagination]) ?> 

Даже в отладке она не проходит через MYFUNCTION. Любые предложения, пожалуйста?

+0

Вы используете сценарий сервера (PHP) из сценария клиента (Javascript)? Имеет ли это смысл? Пожалуйста, прочитайте несколько основных уроков –

+0

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

ответ

0

Я объясню вам шаг за шагом. Во-первых, обратите внимание, что все внутри тега <?php ?> будет генерировать на сервере ПЕРЕД показанием вида. Таким образом, вы не можете выполнить php-код на клиенте. Если вам нужно выполнить какой-либо код сервера от клиента, вам нужно использовать Ajax (асинхронный JavaScript и XML). Я рекомендую вам изучить ajax, потому что это очень полезно в веб-приложениях. Хорошо, давайте решим вашу проблему. Первый шаг - определить событие для нажатия кнопки. Вы myFunction уже и изменить его к этому:

<button onclick="myFunction();">Search</button> 

И я изменить свой вклад в это:

<input type="text" value ="" name="searchname", id="searchname"> 

Теперь я пишу myFunction() тело в <script></script> тег:

<script> 
    function myFunction() 
    { 
     $.ajax({ 
      url: '<?php echo Yii::app()->baseUrl . '/supermarkets/sample' ?>', 
      type: 'post', 
      data: {searchname: $("#searchname").val()}, 
      success: function (data) { 
       alert(data); 

      } 

     }); 
    } 
</script> 

Теперь вам нужно определить действие в вашем контроллере для запроса ajax. Я предположил, что у вас есть SupermarketsController. Попробуйте написать actionSample() в этом так:

public function actionSample() 
{ 
    $array = (array) $supermarkets; 
    $sname = $_POST['searchname']; 
    ... 
    echo "ok"; 
} 

Вы можете получить доступ к значению входного поиска в этой функции и весь код PHP должен быть там. в последней строке этого действия вы должны что-то повторить (данные или сообщение). Все, что вы положили после эха, вы можете получить как data параметр success событие ajax-запроса. В моем примере вы увидите предупреждение «ok» в своем браузере. Надеюсь, мое объяснение поможет вам научиться ajax. Обратите внимание, что вам нужно включить библиотеку jquery для использования ajax. Хороший друг удачи :)

+0

@ Рабах Хамза Вы попробовали мое решение? – hamed

+0

Да, извините за поздний ответ, но я получаю эту ошибку: вызов неопределенного метода Yii :: app() на url: ' baseUrl. '/ supermarkets/sample'?> ', –

+0

@ Hamed Я очень ценю время и усилия, которые вы предприняли для того, чтобы помочь мне понять мою проблему, я постараюсь изо всех сил исправить это, спасибо вам большое :) –

0

Вы должны следовать правильной Yii синтаксис, т.е. определить свою функцию внутри контроллера и вызвать эту функцию путем создания кнопки на index.php или другой файл вида, как:

Кнопка на вид файла:

<?= Html::a('Search', ['search-function', 'Name' => $this->$sname], ['class' => 'btn btn-success']) ?> 

И в контроллере:

// Как вы определяете функцию

public function actionSearchFunction($sname){ 
if (isset($sname) && $sname!='') { 
    $row = Yii::app()->db->createCommand(array(
    'select' => '*', 
    'from' => 'supermarkets', 
    'where' => array('like', 'Name','%'.$sname.'') 

))->queryAll(); 

$array = (array) $row;