【问题标题】:How to extend CListView in order to remove extra yii added markup?如何扩展 CListView 以删除额外的 yii 添加标记?
【发布时间】:2012-09-06 10:38:22
【问题描述】:

重点是从 CListView 渲染中移除这两个 div:

<div id="yw0" class="list-view">
<div class="items">

我一直在看这里:

https://github.com/yiisoft/yii/blob/master/framework/zii/widgets/CBaseListView.php#L123

但我没有发现与那两个 div 相关的内容。

任何人都可以分享一下,我们应该扩展什么才能使这成为现实?

这是所需输出的更新:

<div>
  <article class="itemthing">
    list data
  </article>
  <article class="itemthing">
    list data
  </article>
  <article class="itemthing">
    list data
  </article>
</div>

【问题讨论】:

  • 为什么要删除它们?
  • @mashingan:因为当你仔细设计你的页面,使用语义相关的容器时,你不希望你的代码像那里的两个 div 那样被 divitis 标记污染。除非它们以我现在看不到的方式有用......你能吗?

标签: yii


【解决方案1】:

最好从 CListView 本身进行扩展,但为 run() method in CBaseListView 编写新实现,并为 renderItems() method in CListView 编写新实现,例如:

Yii::import('zii.widgets.CListView');
class MListView extends CListView{
    public function run(){
            $this->registerClientScript();
            // this line renders the first div
            //echo CHtml::openTag($this->tagName,$this->htmlOptions)."\n"; 

            $this->renderContent();
            $this->renderKeys();

            //echo CHtml::closeTag($this->tagName);
    }

    public function renderItems(){
            //this line renders the second div
            //echo CHtml::openTag($this->itemsTagName,array('class'=>$this->itemsCssClass))."\n"; 
            // copy original code from the function
            //echo CHtml::closeTag($this->itemsTagName);
    }
}

编辑:

请注意,某些默认的 clistview 功能将无法使用这么多,因为如果没有标识此列表视图的 id,jquery.yiilistview.js 将无法使用。

编辑:

根据您更新的问题,您可以这样做,然后:

<div id="some-id">
<?php
    $this->widget('ext.extendedwidgets.MListView',array(
        'id'=>'some-id', // same id you specified in the div
        //... rest of it
        'template' => '{items}', // as seen in the chat below
    ));
</div>

【讨论】:

  • 确保你可以在任何地方创建它,只要 yii 可以找到类,但我已经在 protected/extensions/extendedwidgets/MCListView.php 中完成了。另请注意,分页不会在 ajax 模式下工作,开箱即用,您还必须修改生成的 jquery/javascript
  • 谢谢。然后我们可以在哪里修改生成的 jquery/javascript ?愿意分享吗?对于所有这些问题,我真的很抱歉,但这是我长期以来一直希望做的事情,而且那些 divitis 总是在路上......我还想了解如果我们删除那些 div,为什么 ajax 不起作用(或者它不起作用,因为我们正在扩展它?);
  • $this-&gt;widgets('ext.extendedwidgets.MCListView',array(...)) 。 jquery 可以在 zii/widgets/assets/listview/jquery.yiilistview.js 中找到。 ajax 不起作用,因为 ajax 更新是由 yiilistview.js 完成的,它会查找具有 id 的 div 并更新该 div。所以它不起作用,因为我们删除了 div。如果您有不同的容器 div(包含此列表),则可以将该 div id 传递给 jquery。
  • 通常,我们确实为这些 ListView 项目提供了一个自然容器。我们可以在那个 div 上添加他期望的 id 并且它会起作用吗? (这听起来有点骇人听闻):D - 另一种选择是“扩展” yiilistview.js,但这似乎并不好......因为扩展我们的意思是复制/粘贴文件,显然那不会最新。 :D
  • 好的,你能告诉我你生成的html应该是什么样子吗?是:&lt;div id="somecontainer"&gt;&lt;!-- listview --&gt; &lt;/div&gt;?最好告诉我确切的输出。有一种不需要复制 yiilistview.js 的方法,所以告诉我你想如何指定视图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-18
  • 2010-11-09
相关资源
最近更新 更多