我制作了一个小部件,根据从小部件类传递的参数(国家、居住地等)显示用户列表,我渲染视图,一切似乎都很好,但民意调查开始更新用户列表其他参数,也就是调用方法,说-更新重建列表,可以吗?
从 10-08 编辑查看代码:
<?php
use yii\helpers\HTML;
use yii\widgets\Pjax;
use app\models\desire;
$model=new desire();
$a_rows=$model->get_desire_for_search_page($user_id,$status,$category);
?>
<?php Pjax::begin(); ?>
<a id="a_pjax" href="/profile/search-desires?user_id=0&status=0&category=0" style="/*display:none;*/">Обновить</a>
<ul class="init_content">
<?php
foreach ($a_rows as $desire)
{
$fname=$desire["fname"];
if($fname=="")
{
$fname="/css/img/ico_event_family.svg";
}
$name=HTML::encode($desire["name"]);
$komm=mb_substr(strip_tags(HTML::decode($desire["komm"])),0,140)."...";
$dt= get_normal_date($desire["dt_add"]);
$dt_end= get_normal_date($desire["dt_end"]);
$id=$desire["id"];
$url="/profile/desire/show?id=$id";
?>
<li id="desire_list_li_<?php echo $id?>">
<div class="desirebox">
<div class="desirebox_left">
<a href="<?php echo $url ?>"><img src="<?php echo $fname ?>" width="90" height="90" alt=""/></a>
</div>
<div class="desirebox_right">
<a href="<?php echo $url ?>" class="eventbox_th"><?php echo $name ?></a>
<div class="desirebox_target"><?php echo $komm ?></div>
<div class="desirebox_period">Период: с <?php echo $dt ?> по <?php echo $dt_end ?></div>
<div class="event_editbox">
<a href="javascript:void(0);" onclick="check_desire_close(<?php echo $id?>);" title="Отметить сбышемся"><i class="fa fa-check-circle"></i></a>
<a href="javascript:void(0);" onclick="del_desire(<?php echo $id?>,'<?php echo $name ?>')" title="Удвлить"><i class="fa fa-close"></i></a>
<a href="/profile/desire/edit?id=<?php echo $id?>" title="Редактировать"><i class="fa fa-gear"></i></a>
</div>
</div>
</div>
</li>
<?php
}
?>
</ul>
<?php Pjax::end(); ?>
控制器代码:
public function actionSearchDesires($user_id,$status,$category)
{
//проверяем авторизован юзер или нет
if ($_SESSION["user_login"] == 0) {
Yii::$app->session->setFlash('error', "Вы не авторизованы на портале!");
return $this->redirect(['/star/index']);
}
if($status==0)
{
$status="";
}
if($status==1)
{
$status=" and flg_close=0 ";
}
if($status==2)
{
$status=" and flg_close=1 ";
}
$this->view->params['user_edit'] = 1;
\Yii::$app->view->params['desire_proces'] = 1;
\Yii::$app->view->params['desire_edit']=1;
return $this->render('search_desire_widget', [
'user_id' => $user_id,'status'=>$status, 'category'=>$category
]);
}
这就是它的名称:
//передаем во вью массив
$model=new desire();
$a_rows=$model->get_desire_for_search_page(Yii::$app->userrows->get("id"),0,0);
echo $this->render('search_desire_widget', [
'a_rows' => $a_rows,
'user_id'=>Yii::$app->userrows->get("id"),
'status' => 0,
'category' => 0,
]);
我会尽量按我的方式回答。
我们有一个带有动作的控制器。一个动作呈现页面的视图,第二个动作仅返回呈现具有指定参数的小部件的内容。
接下来,在页面视图中,我们显示所需的内容和第二个视图,它绘制了小部件的内容
而在小部件视图中,我们已经调用了小部件,它将接受参数并呈现必要的内容。
原来,当我们去site/page页面的时候,view会绘制view,而当我们点击按钮的时候,请求去site/reload-widget并从view中拉取内容,其中只包含UserWidget小部件本身。内容将在我们包裹在 Pjax 中的地方更新。
不要忘记将数据从操作传递到小部件视图。实施可能不是最成功的,但我只想展示机制。如果需要从页面传递配置小部件的数据,那么在 Pjax 中,您可以添加一个带有输入的表单并通过它们传递数据。这里有 Pjax 的例子。
10.08.18 向上
在这样的代码中很容易混淆。
Url::to(['/controller/action', 'foo' => 'bar'])
,你会感谢自己。\yii\helpers\StringHelper::truncate($body,300,'...');
$status=" and flg_close=0 ";
时,我明白事情很糟糕。这是为了振作,以免放松。现在很难弄清楚发生了什么以及如何发生,所以我建议分阶段进行。在同一个控制器中为它们创建两个纯动作和两个视图(如上所述)。用数据创建一个临时数组并将其从操作传递到视图,然后将其解析为列表。在应该更新的第二个动作中,创建另一个数组并将其传递给视图。