Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yii2
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Rotua Panjaitan
yii2
Commits
cbb33bd1
Commit
cbb33bd1
authored
May 29, 2013
by
Antonio Ramirez
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactored based on comments (2nd round)
parent
96a8c4a8
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
83 additions
and
51 deletions
+83
-51
Nav.php
framework/yii/bootstrap/Nav.php
+36
-29
NavBar.php
framework/yii/bootstrap/NavBar.php
+47
-22
No files found.
framework/yii/bootstrap/Nav.php
View file @
cbb33bd1
...
...
@@ -8,7 +8,7 @@
namespace
yii\bootstrap
;
use
yii\base\InvalidConfigException
;
use
yii\helpers\
base\
ArrayHelper
;
use
yii\helpers\ArrayHelper
;
use
yii\helpers\Html
;
/**
...
...
@@ -22,12 +22,12 @@ use yii\helpers\Html;
* array(
* 'label' => 'Home',
* 'url' => '/',
* '
o
ptions' => array(...),
* '
linkO
ptions' => array(...),
* 'active' => true,
* ),
* array(
* 'label' => 'Dropdown',
* '
dropdown
' => array(
* '
items
' => array(
* array(
* 'label' => 'DropdownA',
* 'url' => '#',
...
...
@@ -52,26 +52,25 @@ class Nav extends Widget
* @var array list of items in the nav widget. Each array element represents a single
* menu item with the following structure:
*
* ```php
* array(
* // required, the menu item label.
* 'label' => 'Nav item label',
* // optional, the URL of the menu item. Defaults to "#"
* 'url'=> '#',
* // optional, the HTML options of the URL.
* 'urlOptions' => array(...),
* // optional the HTML attributes of the item container (LI).
* 'options' => array(...),
* // optional, an array of [[Dropdown]] widget items so to display a dropdown menu on the tab header.
* // important: there is an issue with sub-dropdown menus, and as of 3.0, bootstrap won't support sub-dropdown
* // @see https://github.com/twitter/bootstrap/issues/5050#issuecomment-11741727
* 'dropdown'=> array(...)
* )
* ```
* - label: string, required, the nav item label.
* - url: optional, the item's URL. Defaults to "#".
* - linkOptions: array, optional, the HTML attributes of the item's link.
* - options: array, optional, the HTML attributes of the item container (LI).
* - active: boolean, optional, whether the item should be on active state or not.
* - items: array, optional, the configuration of specify the item's dropdown menu. You can optionally set this as
* a string (ie. `'items'=> Dropdown::widget(array(...))`
* - important: there is an issue with sub-dropdown menus, and as of 3.0, bootstrap won't support sub-dropdown.
*
* Optionally, you can also use a plain string instead of an array element.
* **Note:** Optionally, you can also use a plain string instead of an array element.
*
* @see https://github.com/twitter/bootstrap/issues/5050#issuecomment-11741727
* @see [[Dropdown]]
*/
public
$items
=
array
();
/**
* @var boolean whether the nav items labels should be HTML-encoded.
*/
public
$encodeLabels
=
true
;
/**
...
...
@@ -79,6 +78,7 @@ class Nav extends Widget
*/
public
function
init
()
{
parent
::
init
();
$this
->
addCssClass
(
$this
->
options
,
'nav'
);
}
...
...
@@ -88,6 +88,7 @@ class Nav extends Widget
public
function
run
()
{
echo
$this
->
renderItems
();
$this
->
registerPlugin
(
'dropdown'
);
}
/**
...
...
@@ -117,21 +118,26 @@ class Nav extends Widget
if
(
!
isset
(
$item
[
'label'
]))
{
throw
new
InvalidConfigException
(
"The 'label' option is required."
);
}
$label
=
$item
[
'label'
];
$url
=
ArrayHelper
::
getValue
(
$item
,
'url'
,
'#'
);
$label
=
$this
->
encodeLabels
?
Html
::
encode
(
$item
[
'label'
])
:
$item
[
'label'
];
$options
=
ArrayHelper
::
getValue
(
$item
,
'options'
,
array
());
$urlOptions
=
ArrayHelper
::
getValue
(
$item
,
'urlOptions'
,
array
());
$dropdown
=
null
;
$dropdown
=
ArrayHelper
::
getValue
(
$item
,
'items'
);
$url
=
Html
::
url
(
ArrayHelper
::
getValue
(
$item
,
'url'
,
'#'
));
$linkOptions
=
ArrayHelper
::
getValue
(
$item
,
'linkOptions'
,
array
());
if
(
ArrayHelper
::
getValue
(
$item
,
'active'
))
{
$this
->
addCssClass
(
$options
,
'active'
);
}
// does it has a dropdown widget?
if
(
isset
(
$item
[
'dropdown'
]))
{
$urlOptions
[
'data-toggle'
]
=
'dropdown'
;
if
(
$dropdown
!==
null
)
{
$linkOptions
[
'data-toggle'
]
=
'dropdown'
;
$this
->
addCssClass
(
$options
,
'dropdown'
);
$this
->
addCssClass
(
$urlOptions
,
'dropdown-toggle'
);
$label
.=
' '
.
Html
::
tag
(
'b'
,
''
,
array
(
'class'
=>
'caret'
));
$dropdown
=
Dropdown
::
widget
(
array
(
'items'
=>
$item
[
'dropdown'
],
'clientOptions'
=>
false
));
$dropdown
=
is_string
(
$dropdown
)
?
$dropdown
:
Dropdown
::
widget
(
array
(
'items'
=>
$item
[
'items'
],
'clientOptions'
=>
false
));
}
return
Html
::
tag
(
'li'
,
Html
::
a
(
$label
,
$url
,
$
url
Options
)
.
$dropdown
,
$options
);
return
Html
::
tag
(
'li'
,
Html
::
a
(
$label
,
$url
,
$
link
Options
)
.
$dropdown
,
$options
);
}
}
\ No newline at end of file
framework/yii/bootstrap/NavBar.php
View file @
cbb33bd1
...
...
@@ -8,7 +8,7 @@
namespace
yii\bootstrap
;
use
yii\base\InvalidConfigException
;
use
yii\helpers\
base\
ArrayHelper
;
use
yii\helpers\ArrayHelper
;
use
yii\helpers\Html
;
/**
...
...
@@ -18,6 +18,7 @@ use yii\helpers\Html;
*
* ```php
* echo NavBar::widget(array(
* 'brandLabel' => 'NavBar Test',
* 'items' => array(
* // a Nav widget
* array(
...
...
@@ -33,17 +34,18 @@ use yii\helpers\Html;
* ),
* array(
* 'label' => 'Dropdown',
* // configure a dropdown menu
* 'dropdown' => array(
* array(
* 'label' => 'DropdownA',
* 'url' => '#',
* ),
* array(
* 'label' => 'DropdownB',
* 'url' => '#'
* ),
* )
* 'content' => new Dropdown(array(
* 'items' => array(
* array(
* 'label' => 'DropdownA',
* 'url' => '#',
* ),
* array(
* 'label' => 'DropdownB',
* 'url' => '#'
* ),
* )
* ),
* ),
* )
* ),
...
...
@@ -62,7 +64,20 @@ use yii\helpers\Html;
*/
class
NavBar
extends
Widget
{
public
$brand
;
/**
* @var string the text of the brand.
* @see http://twitter.github.io/bootstrap/components.html#navbar
*/
public
$brandLabel
;
/**
* @param array|string $url the URL for the brand's hyperlink tag. This parameter will be processed by [[Html::url()]]
* and will be used for the "href" attribute of the brand link. Defaults to site root.
*/
public
$brandRoute
=
'/'
;
/**
* @var array the HTML attributes of the brand link.
*/
public
$brandOptions
=
array
();
/**
* @var array list of menu items in the navbar widget. Each array element represents a single
* menu item with the following structure:
...
...
@@ -83,6 +98,10 @@ class NavBar extends Widget
* Optionally, you can also use a plain string instead of an array element.
*/
public
$items
=
array
();
/**
* @var string the generated brand url if specified by [[brandLabel]]
*/
protected
$brand
;
/**
...
...
@@ -91,7 +110,10 @@ class NavBar extends Widget
public
function
init
()
{
parent
::
init
();
$this
->
clientOptions
=
false
;
$this
->
addCssClass
(
$this
->
options
,
'navbar'
);
$this
->
addCssClass
(
$this
->
brandOptions
,
'brand'
);
$this
->
brand
=
Html
::
a
(
$this
->
brandLabel
,
$this
->
brandRoute
,
$this
->
brandOptions
);
}
/**
...
...
@@ -102,19 +124,20 @@ class NavBar extends Widget
echo
Html
::
beginTag
(
'div'
,
$this
->
options
);
echo
$this
->
renderItems
();
echo
Html
::
endTag
(
'div'
);
$this
->
getView
()
->
registerAssetBundle
(
'yii/bootstrap'
);
}
/**
* Renders the items.
* @return string the rendering items.
*/
protected
function
renderItems
()
{
$items
=
array
();
foreach
(
$this
->
items
as
$item
)
{
$items
[]
=
$this
->
renderItem
(
$item
);
}
$contents
=
implode
(
"
\n
"
,
$items
);
$contents
=
implode
(
"
\n
"
,
$items
);
if
(
self
::
$responsive
===
true
)
{
$this
->
getView
()
->
registerAssetBundle
(
'yii/bootstrap/collapse'
);
$contents
=
...
...
@@ -127,6 +150,7 @@ class NavBar extends Widget
}
else
{
$contents
=
$this
->
brand
.
"
\n
"
.
$contents
;
}
return
Html
::
tag
(
'div'
,
$contents
,
array
(
'class'
=>
'navbar-inner'
));
}
...
...
@@ -143,11 +167,11 @@ class NavBar extends Widget
return
$item
;
}
$config
=
ArrayHelper
::
getValue
(
$item
,
'options'
,
array
());
$config
[
'cl
ass'
]
=
ArrayHelper
::
getValue
(
$item
,
'class'
,
'yii\bootstrap\Nav'
)
;
$widget
=
\Yii
::
createObject
(
$config
);
ob_start
(
);
$widget
->
run
();
return
ob_get_clean
(
);
$config
[
'cl
ientOptions'
]
=
false
;
$class
=
ArrayHelper
::
getValue
(
$item
,
'class'
,
'yii\bootstrap\Nav'
);
return
$class
::
widget
(
$config
);
}
/**
...
...
@@ -160,10 +184,10 @@ class NavBar extends Widget
for
(
$i
=
0
;
$i
<
3
;
$i
++
)
{
$items
[]
=
Html
::
tag
(
'span'
,
''
,
array
(
'class'
=>
'icon-bar'
));
}
return
Html
::
tag
(
'a'
,
implode
(
"
\n
"
,
$items
)
,
array
(
return
Html
::
a
(
implode
(
"
\n
"
,
$items
),
null
,
array
(
'class'
=>
'btn btn-navbar'
,
'data-toggle'
=>
'collapse'
,
'data-target'
=>
'div.navbar-collapse'
,
))
.
"
\n
"
;
));
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment