3

我是 yii 新手(一周前开始),我想使用yii Bootstrap Thumbnail 网格来显示一些国家/地区的图像,然后我想在每个国家/地区钻取并显示城市等,而无需重新加载整个屏幕,就在右边。

创建视图的代码

echo $this->renderPartial('_form', $this);

除此之外,下面的这个视图用于显示图像。它有两个div。一个用于选择与国家/城市相关的图像,另一个显示用户通过单击应该在图片附近的按钮根据城市做出的选择,但仅当用户钻入城市时。

第一个疑问->我应该渲染局部吗?我只想刷新屏幕的右侧,即有图像的一侧。考虑到我在前面的代码中渲染了一个部分,而下面的其他部分。这甚至可能吗?

$this->renderPartial('_formCountry', $this);    

该视图负责加载小部件

$dataProvider = new CActiveDataProvider('Country');

$this->widget('bootstrap.widgets.TbThumbnails', array(
    'id' => 'countryThumbId',
    'dataProvider' => $dataProvider,
    'template' => "{items}\n{pager}",
    'itemView' => '_countryThumb',
));

下面的视图用国家的图像填充它,并通过 post 发送 Country 的 id。

第二个疑问->我如何向下钻取单击图像,而不是使用按钮来执行此操作???

echo $this->createUrl('city/view', array('id' => $data['id']));

        $this->widget('bootstrap.widgets.TbButton', array(
            'label' => 'cidades',
            'buttonType' => 'ajaxButton',
            'type' => 'primary', // null, 'primary', 'info', 'success', 'warning', 'danger' or 'inverse'
            'size' => 'mini', // null, 'large', 'small' or 'mini'
            'url' => Yii::app()->createUrl("tripDetail/showCities"),
            'ajaxOptions' =>
                    array('data' =>
                        array(
                            'id' => $data['id'],
                        ),
                        'type' => 'POST',
                    )
                )
        );

此操作在按钮单击时触发,并根据用户选择的国家/地区获取新的 dataProvider

第三个疑问->可以嵌套多少个renderPartials????

public function actionShowCities()
        {
            $cityId = $_POST['id'];

            $dataProvider = $this->getCities($cityId);

            $this->renderPartial('_formCity', array('dProvider'=>$dataProvider));

        }

*上面的动作启动了这个视图 _formCity,它又调用了 _cityThumb*

$this->widget('bootstrap.widgets.TbThumbnails', array(
    'id' => 'countryThumbId',
    'dataProvider' => $dProvider,
    'template' => "{items}\n{pager}",
    'itemView' => '_cityThumb',
));

* _cityThumb*

第四个疑问->城市是唯一呈现的屏幕,当我单击按钮向我显示城市时,什么也没发生,为什么????

echo $this->createUrl('place/view', array('id' => $data['id'])); 

很抱歉这么长的帖子和这么多的疑问,但这是我第一次使用 php 框架......而且 yii 并不那么容易,至少一开始是这样。:-[

4

1 回答 1

2

问:我应该渲染局部吗?Q. 可以嵌套多少个 renderPartial?

你绝对应该renderPartial这些事情:

它不会将布局应用于渲染结果。因此,它主要用于渲染局部视图或 AJAX 响应。

而且你可以嵌套任意数量,只要记住分离这些视图文件应该是有目的的。


问:我怎样才能深入单击图像,而不是使用按钮来执行此操作?

只需对图像使用 javascript 点击处理程序。一个jQuery示例:

<!-- sample image element -->
<img src="xyz.jpg" id="some_id" class="some-class" alt="Image not loaded"/>
<?php
    // in yii it's good to use registerScript to add a javascript snippet to generated html
    Yii::app()->clientScript->registerScript('script-name','
        $("#some_id").click(function(){
            // here make the ajax call
        });
    ');

为图像添加点击处理程序的方法有很多,最好的方法取决于您如何使用视图添加图像标签。


问:城市是唯一呈现的屏幕,当我单击按钮向我显示城市时,什么也没发生,为什么?

这将需要在您的最后进行调试。我能给你的唯一提示是使用Firebug检查 http 调用是否正在发生(或不发生) 。

于 2012-10-24T12:00:46.593 回答