yii2 bootstrap navnav widget有没有对字体的设置

yii2.0 小部件的高级使用 - 教程 - Yii Framework 中文社区
yii2.0 小部件的高级使用
6877次浏览
(注:此为yii2.0高级应用)
通过一个小事例说明小部件如何使用。
布局中如何使用小部件?
需求:在布局中如何动态读取数据表中数据?并且具有全局性(即数据在全站都可有效)?
如上:除了使用session外,还有一种比较好的方式就是使用小部件。
情况是这样的:在创建一个项目的后台,我把菜单导航栏写进数据表,所有菜单导航栏是通过数据表来控制的。那么,在布局中如何把菜单读出来呢?如下图
如果使用控制器来渲染,菜单栏是不具有全局性。
这时,不部件是一个好的方案!不仅解决了读取数据表中的数据,还保证了菜单栏的全局性。
一、创建数据表 nav(菜单),并使用gii创建model
此表用来保存所有菜单数据。此步很简单,在此略过!
二、创建小部件
在backend下创建components/NavWidget.php
(高级应用后台是没有components的)
namespace backend\
use backend\models\N
use yii\base\W
use yii\helpers\H
class NavWidget extends Widget
public function run()
$nav = Nav::find()
-&where(['status' =& 1])
-&orderBy('sort ASC')
foreach($nav as $_v){
$navs[] = $_v-&id.'|'.$_v-&nav_cn.'|'.$_v-&nav_
// 渲染视图
return $this-&render('@app/views/site/_nav', [
'nav'=&$navs,
1、run()方法是处理和返回数据表中的数据;
2、这里是return了一个_nav.php的视图文件(具体地址是在backend/views/site/_nav.php),因为小部件需要渲染很多复杂内容,一种更好的办法是将内容放入这个视图文件里面。如果内容很少就直接 return $
3、如果render不指定一个具体的地址会默认在backend/components/views/xxx.php
4、让我们看一眼这个小部件渲染的视图文件
use yii\helpers\H
/* @var $this yii\web\View */
use yii\bootstrap\N
NavBar::begin([
'brandLabel' =& '首页',
'brandUrl' =& Yii::$app-&homeUrl,
'options' =& [
'class' =& 'navbar-inverse navbar-fixed-top',
'id' =& 'menu-top',
//'brandOptions' =& ['class' =& 'fa fa-flag fa-2x pull-left'],
if (Yii::$app-&user-&isGuest) {
$menuItems[] = ['label' =& '登陆', 'url' =& ['/site/login']];
//循环出菜单栏
if(isset($nav)){
for($n=0;$n&count($nav);$n++){
$_v = explode('|',$nav[$n]);
$menuItems[] = [
'label' =& $_v[1],
'url' =& ["/$_v[2]/default/index",'id'=&$_v[0],'en'=&$_v[2]],
//'linkOptions' =& ['class' =& 'active'],
//'options' =& ["id"=&"_M$n"],
$menuItems[] = [
'label' =& ' Log out',
'url' =& ['/site/logout'],
'linkOptions' =& ['data-method' =& 'post','class'=&'fa fa-sign-out'],
echo Nav::widget([
'options' =& ['class' =& 'navbar-nav navbar-right'],
'items' =& $menuItems,
NavBar::end();
三、创建布局文件并使用刚创建的小部件
backend/views/layouts/main.php
//使用小部件
&?= NavWidget::widget() ?&
这样,小部件里面的动态数据就出来了,并且全局可使用。
另外:你如果想把NavWidget小部件里面有些参数通过get传到NewWidget这个小部件里面去(反正我是有这个需求的),可通过下面这种方式
在NavWidget渲染的视图里面(这段在上面有) 传个ID给别的小部件里面使用
'url' =& ["/$_v[2]/default/index",'id'=&$_v[0]],
别的小部件使用处接收下
$id = isset($_GET['id']) ? $_GET['id'] : 1;
NewWidget::widget(['id'=&$id])
在NewWidget小部件里(部分代码)接收id
namespace backend\
use yii\base\W
use yii\helpers\H
class NewWidget extends Widget
public $ //调用处把这个id传进来了
public function run()
if(isset($this-&id)){
$navbar = xxx::find()
-&with('xxx')
-&where(['status' =& 1,'nid'=&$this-&id])//id就这样被使用了
-&orderBy('id asc')
$navbar = '';
兄台用的是后台模板是?
共 1 条回复自己用bootstrap 和其他改的
不错不错,学习了。
确实是个干货,学习了
不错,学习了
您需要登录后才可以评论。 |Yii中创建自己的Widget实例
作者:zm2714
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了Yii中创建自己的Widget实现方法,结合具体实例形式较为详细的分析了Yii中创建Widget的步骤与实现技巧,需要的朋友可以参考下
本文实例讲述了Yii中创建自己的Widget实现方法。分享给大家供大家参考,具体如下:
这里以一个随机广告图片为例说明Yii中Widget的用法
1. 调用Widget
代码如下:&?php $this-&widget('WidgetName'); ?&
&?php $widget=$this-&beginWidget('path.to.WidgetClass'); ?&
...可能会由小物件获取的内容主体...
&?php $this-&endWidget(); ?&
也可以传参到Widget类
&?php $userId = 1; ?&
&?php $this-&widget('WidgetName',array('userId'=&$userId)); ?&
参数userId自动映射到Widget类的同名属性,所以在定义Widget时,别忘记了声明该属性。
2. 创建Widget
自定义Widget类要继承CWidget,覆盖方法run
class BannerMagic extends CWidget {
public function run(){
class MyWidget extends CWidget {
public function init() {
// 此方法会被 CController::beginWidget() 调用
public function run() {
// 此方法会被 CController::endWidget() 调用
下面是是BannerMagicWidget实现
&?php class BannerMagicWidget extends CWidget {
public function run() {
$random = rand(1,3);
if ($random == 1) {
$advert = "advert1.jpg";
} else if ($random == 2) {
$advert = "advert2.jpg";
$advert = "advert3.jpg";
$this-&render('bannermagic',array(
"advert"=&$advert,
存储到protected\components\BannerMagicWidget.php
对应的view文件可能的内容如下:
代码如下:&img src="images/adverts/&?php echo $ ?&" alt="whatever" /&
存储到protected\components\views\bannermagic.php
3. 调用该Widget
代码如下:&?php $this-&widget('BannerMagicWidget'); ?&
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具Yii2的Nav生成树形导航菜单问题 - 讨论 - Yii Framework 中文社区
Yii2的Nav生成树形导航菜单问题
4450次浏览
yii2用Nav生成树形导航菜单时Items如下
$menuItems = [
'label' =& 'Home',
'url' =& ['/site/index'] ,
'items'=&[
'label'=&'Home1',
'url'=&'/site/index'
'label'=&'Home2',
'url'=&'/site/index'
默认情况下的效果是点击Home出现下拉菜单Home1和Home2,点击其他地方隐藏下拉菜单,我现在想换成鼠标经过Home时显示,离开后隐藏,也就是把现在的单击触发的js改成鼠标经过和离开触发,要怎么配置Nav::widget里面的参数
那点击后高亮这个怎么解决
确实没必要用 nav widget, 我也在考虑楼上的做法
不要要这个小部件,可以直接参考Bootstrap的这个组件。
附代码,不过样式需要自己在调节一下。同时需要加载yii\helpers\Url空间。
&div id="leftnav" class="col-md-3"&
&div class="list-group"&
&!-- 用户管理 --&
&a class="list-group-item" data-toggle="collapse" href="#usercollapse" aria-expanded="false" aria-controls="collapseExample"&用户管理&span class="caret"&&/span&&/a&
&div class="collapse" id="usercollapse"&
&div class="well"&
&div class="list-group"&
&a href="&?= Url::toRoute(['user/index'])?&" class="list-group-item"&用户列表(gii)&/a&
&a href="&?= Url::toRoute(['user/manualuser'])?&" class="list-group-item"&用户列表(manual)&/a&
&!-- 权限管理 --&
&a class="list-group-item" data-toggle="collapse" href="#resourcecollapse" aria-expanded="false" aria-controls="collapseExample"&资源管理&span class="caret"&&/span&&/a&
&div class="collapse" id="resourcecollapse"&
&div class="well"&
&div class="list-group"&
&a href="&?= Url::toRoute(['user/index'])?&" class="list-group-item"&用户列表(gii)&/a&
&a href="&?= Url::toRoute(['user/index'])?&" class="list-group-item"&用户列表(gii)&/a&
您需要登录后才可以回复。 |yii2.0&&form组件&&&三级联动菜单&&yii2&dropDownList默认值
ShopArea.php(model模型)
classroomConstroller.php(控制器)
view(_form.php) &
在view部分显示默认值(默认选中值:可在其前面加$model-&province =
'1',则将显示值为1的省份作为默认值。dropDownList的默认值是由$model-&字段名指定的)
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 yii widget 使用 的文章

 

随机推荐