在Yii中的Onclick行动

时间:2015-02-25 13:06:33

标签: php model-view-controller yii onclick

我对Yii完全不熟悉,即使它看起来微不足道,我也需要帮助。我有一个页面,我从我的数据库生成一个表,我添加了一个搜索选项,我还需要生成一个表作为一个表。

问题是当我点击按钮时没有任何反应。 我也尝试使用提交,但它没有用。

这是我的代码:

...视图/超市/ 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。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

你应该遵循正确的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;

答案 1 :(得分:0)

我会一步一步解释你。首先,请注意<?php ?>标记内的所有内容都将在呈现视图之前在服务器上生成 。所以,你不能在客户端上执行php代码。如果需要从客户端执行某些服务器代码,则需要使用Ajax(异步JavaScript和XML)。我建议你学习ajax,因为这在web应用程序中非常有用。好的,让我们解决你的问题。第一步是定义按钮单击的事件。您已经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代码都必须存在。在该操作的最后一行,您必须回显某些内容(数据或消息)。在echo之后放置的所有内容,您都可以将其作为data ajax请求事件的success参数获取。在我的示例中,您将在浏览器中看到“ok”警报。我希望我的解释可以帮助你学习ajax。请注意,您需要包含用于使用ajax的jquery库。祝你好运的朋友:)