秀小川

秀小川

这家伙有点懒,还没写个性签名!

  • 财富值455
  • 威望值0
  • 总积分655

个人信息

  • <div class="tab-content">
    <!--缴费记录-->
    <div class="tab-pane active" id="list1">
        <div class="panel panel-primary">
            <div class="panel-heading">缴费记录</div>
            <div class="panel-body">
                <gridview>...</gridview>
            </div>
        </div>
    </div>
    
    <!--充值记录-->
    <div class="tab-pane" id="list2">
        <div class="panel panel-primary">
            <div class="panel-heading">充值记录</div>
            <div class="panel-body">
                <gridview>...</gridview>
            
            </div>
        </div>
    </div>
    
    </div>
    
    

    前端代码类似上面这样

  • 提出了问题
    翻页时候怎么样让新页面定位在原位置?
  • 2018-04-24 已签到
    连续签到1天,获得了5个金钱
  • 2018-03-29 已签到
    连续签到1天,获得了5个金钱
  • 回复了 的回答

    我觉得你可以把页面传进 widget 里,而不是把 model 传进去。或者不使用 widget。

    我提供一种解决方案。

    在 SellController.php 控制器里:

        public function actionPrint($id)
        {
            $this->layout = false;  //禁用布局
            $model = Sell::findOne($id);
            //这里需要补上其它代码,比如访问权限判断,找不到这个 model 等等。
            
            return $this->render('print', [
                'model' => $model,
            ]);
        }
    

    sell/print.php 视图中:

    <?= $model->title ?>
    <?= $model->content ?>
    

    以上我们完成了一些准备工作。这样以来,当我们通过 ajax 请求 sell/print 路由时,会返回 sell/print.php 这个视图,这个视图根据 model 来生成的发票内容,你自己再调整样式。

    然后,再其它你需要进行发票打印的地方。比如在某个 index.php 视图文件里,你加上如下代码:

    <?php
    use yii\bootstrap\Modal;
    ?>
    
    <script>
    function printBill(id) {
        $.ajax({
            type:'GET',
            url:"<?=\yii\helpers\Url::to(['sell/print'])?>" + "?id="+id,
            success:function(html){
                $('#solution-content').html(html);
                $('#solution').modal('show');
            }
        });
    }
    </script>
    <?php Modal::begin([
        'header' => '<h3>发票</h3>',
        'options' => ['id' => 'solution']
    ]); ?>
        <div id="solution-content">
        </div>
    <?php Modal::end(); ?>
    

    这样一来,当你调用 printBill(id) 时,会把

    <div id="solution-content">
        </div>
    

    这部分的内容替换成 sell/print.php 这个视图的内容。并通过 Modal 框显示出来(你也可以不用 Modal 框,我这只是举例)。核心还是在:

        $.ajax({
            type:'GET',
            url:"<?=\yii\helpers\Url::to(['sell/print'])?>" + "?id="+id,
            success:function(html){
                $('#solution-content').html(html); // 这里
            }
        });
    

    首先非常感谢你, 这么详细的回复. 这个方法很好用, 其实我一开始也没想封装widget, 就是没想到用AJAX请求,然后用html拼接的方式.还是基础知识不够扎实.

  • 提出了问题
    widget 局部刷新的问题?
  • 2018-03-18 已签到
    连续签到1天,获得了5个金钱
  • 2018-03-15 已签到
    连续签到1天,获得了5个金钱
  • 回复了 的回答

    根据你的需求 有一个字段a是有一个特殊需求, 如果满足条件X, 就把这个字段置为0, 不满足就不更新.

    如果X不是Model数据表的字段,可以这么写if (满足条件X) {Model::updateAll(['b' => 0] )};

    如果X是Model数据表的字段,可以这么写 Model::updateAll(['b' => 0], 'X' => $condition);

    详见yii\db\ActiveRecord::updateAll源码有介绍

    这个X不属于数据表字段, 你这么写就和我上面那个if else写法一样, 我想的是在一个语句里面搞定.

  • 提出了问题
    ActiveRecord做一个特殊的更新操作,
主管 等级规则
655/1000
资料完整度
10/100
用户活跃度
0/100

Ta的关注

1

Ta的粉丝

1

Ta的访客

5