RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 861794
Accepted
Sergey P
Sergey P
Asked:2020-07-30 01:33:45 +0000 UTC2020-07-30 01:33:45 +0000 UTC 2020-07-30 01:33:45 +0000 UTC

Yii2 小部件执行方法

  • 772

我制作了一个小部件,根据从小部件类传递的参数(国家、居住地等)显示用户列表,我渲染视图,一切似乎都很好,但民意调查开始更新用户列表其他参数,也就是调用方法,说-更新重建列表,可以吗?

从 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,
]);
yii2
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    fedornabilkin
    2020-08-03T22:11:47Z2020-08-03T22:11:47Z

    我会尽量按我的方式回答。

    我们有一个带有动作的控制器。一个动作呈现页面的视图,第二个动作仅返回呈现具有指定参数的小部件的内容。

    public function actionPage()
    {
        $dataProvider = ...;
    
        return $this->render('page', [
            'dataProvider' => $dataProvider,
            'id' => $id,
            'checked' => $checked,
        ]);
    }
    
    public function actionReloadWidget($id, $checked)
    {
        return $this->render('widget', [
            'id' => $id,
            'checked' => $checked,
        ]);
    }
    

    接下来,在页面视图中,我们显示所需的内容和第二个视图,它绘制了小部件的内容

    bla bla content
    
    <?= $this->render('widget', [
        'id' => $id,
        'checked' => $checked,
    ])?>
    
    bla bla content
    

    而在小部件视图中,我们已经调用了小部件,它将接受参数并呈现必要的内容。

    <?php Pjax::begin(); ?>
    <?= Html::a("Update widget", ['site/reload-widget'], ['class' => 'btn btn-lg btn-primary']) ?>
    <div class="">
        <?= \app\widgets\UserWidget::widget([
            'params' => [
                'id' => $id,
                'checked' => $checked,
            ]
        ])?>
    </div>
    <?php Pjax::end(); ?>
    

    原来,当我们去site/page页面的时候,view会绘制view,而当我们点击按钮的时候,请求去site/reload-widget并从view中拉取内容,其中只包含UserWidget小部件本身。内容将在我们包裹在 Pjax 中的地方更新。

    不要忘记将数据从操作传递到小部件视图。实施可能不是最成功的,但我只想展示机制。如果需要从页面传递配置小部件的数据,那么在 Pjax 中,您可以添加一个带有输入的表单并通过它们传递数据。这里有 Pjax 的例子。

    10.08.18 向上

    在这样的代码中很容易混淆。

    1. 不要在视图中创建模型。在控制器中执行此操作,获取数组并将其传递给视图。视图只呈现完成的数据。
    2. 链接做通过Url::to(['/controller/action', 'foo' => 'bar']),你会感谢自己。
    3. 如果你剪断线\yii\helpers\StringHelper::truncate($body,300,'...');
    4. 如果要显示列表,为什么不使用 ListView 小部件?
    5. 通过将 AccessControl 添加到控制器中的行为来检查授权。或者你会在每一个动作中写同样的东西吗?
    6. 将一系列 if 从操作中删除到模型或服务(助手)中。控制器操作接收数据,将其传递给视图,仅此而已。
    7. 当我看到$status=" and flg_close=0 ";时,我明白事情很糟糕。

    这是为了振作,以免放松。现在很难弄清楚发生了什么以及如何发生,所以我建议分阶段进行。在同一个控制器中为它们创建两个纯动作和两个视图(如上所述)。用数据创建一个临时数组并将其从操作传递到视图,然后将其解析为列表。在应该更新的第二个动作中,创建另一个数组并将其传递给视图。

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5