nerburish/yii2-isotope-view

ListView小部件改进以使用Isotope(http://isotope.metafizzy.co/)

安装: 864

依赖: 0

建议者: 0

安全: 0

星标: 6

关注者: 4

分支: 2

开放性问题: 0

类型:yii2-extension

dev-master 2016-08-24 20:40 UTC

This package is not auto-updated.

Last update: 2024-09-20 20:05:51 UTC


README

用于扩展Yii2 ListView以使用它作为Isotope网格的Yii2小部件(http://isotope.metafizzy.co/

小部件演示截图: demo

安装

安装此扩展的首选方式是通过 composer

运行

php composer.phar require --prefer-dist nerburish/yii2-isotope-view "dev-master"

或在您的 composer.json 文件的require部分添加

"nerburish/yii2-isotope-view": "dev-master"

使用方法

使用方法与默认ListView小部件(https://yiiframework.cn/doc-2.0/yii-widgets-listview.html)类似

您只需要一个dataProvider并为您的模型准备一个项模板。

在clientOptions中,您可以传递Isotope选项以修改插件行为(见http://isotope.metafizzy.co/options.html

filterAttribute参数是作为网格-item标签的class使用的模型属性的名称。属性值可以是数组或由空格分隔的字符串。

您还可以附加一个cssFile来对网格进行样式化。

示例

我们有一个这样的模型

class MyElement extends \yii\base\Model
{
	public $id;
	
	public $name;
	
	public $symbol;
	
	public $number;
	
	public $weight;
	
	public $categories;
}

以及名为_item.php的项模板

<h5 class="name"><?= $model->name ?></h5>
<p class="symbol"><?= $model->symbol ?></p>
<p class="number"><?= $model->number ?></p>
<p class="weight"><?= $model->weight ?></p>

最后,在我们的视图中运行小部件

<?php echo \nerburish\isotopeview\IsotopeView::widget([
	'dataProvider' => $dataProvider,
	'filterAttribute' => 'categories',
	'itemView' => '_item',
	'clientOptions' => [
		'layoutMode' => 'masonry',
	],
	'cssFile' => [
		"@web/css/grid-demo.css"		
	]
]) ?>

示例中使用的所有模型、视图和CSS样式都位于demo-data文件夹中。名为index.php的模板添加了过滤按钮以测试过滤方法。这是一个类似于Isotope文档中解释的示例(http://isotope.metafizzy.co/filtering.html

<div class="button-group filters-button-group">
  <button class="button" data-filter="*">show all</button>
  <button class="button" data-filter=".metal">metal</button>
  <button class="button is-checked" data-filter=".transition">transition</button>
  <button class="button" data-filter=".alkali, .alkaline-earth">alkali and alkaline-earth</button>
  <button class="button" data-filter=":not(.transition)">not transition</button>
  <button class="button" data-filter=".metal:not(.transition)">metal but not transition</button>
  <button class="button" data-filter="numberGreaterThan50">number &gt; 50</button>
  <button class="button" data-filter="ium">name ends with –ium</button>
</div>

<?php $this->registerJs('
	var filterFns = {
	  // show if number is greater than 50
	  numberGreaterThan50: function() {
		var number = $(this).find(".number").text();
		return parseInt( number, 10 ) > 50;
	  },
	  // show if name ends with -ium
	  ium: function() {
		var name = $(this).find(".name").text();
		return name.match( /ium$/ );
	  }
	};	
	
	$(".filters-button-group").on( "click", "button", function() {
	  var filterValue = $( this ).attr("data-filter");
	  // use filterFn if matches value
	  filterValue = filterFns[ filterValue ] || filterValue;
	  $("#w0 .grid").isotope({ filter: filterValue });
	}); 
', $this::POS_END) ?>

<?php echo \nerburish\isotopeview\IsotopeView::widget([
	'dataProvider' => $dataProvider,
	'filterAttribute' => 'categories',
	'itemView' => '_item',
	'cssFile' => [
		"@web/css/grid-demo.css"		
	]
]) ?>

您可能还对MatchHeight.js ListView小部件感兴趣: https://github.com/nerburish/yii2-match-height-view