Skip to content

Commit 57563fc

Browse files
authored
Add features from N98 layout helper (#1051)
1 parent 89a7f2b commit 57563fc

File tree

1 file changed

+83
-15
lines changed
  • app/code/core/Mage/Page/Block/Html

1 file changed

+83
-15
lines changed

app/code/core/Mage/Page/Block/Html/Head.php

Lines changed: 83 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,13 @@ protected function _construct()
5353
*
5454
* @param string $name
5555
* @param string $params
56+
* @param string $referenceName
57+
* @param bool $before
5658
* @return $this
5759
*/
58-
public function addCss($name, $params = "")
60+
public function addCss($name, $params = "", $referenceName = "*", $before = null)
5961
{
60-
$this->addItem('skin_css', $name, $params);
62+
$this->addItem('skin_css', $name, $params, null, null, $referenceName, $before);
6163
return $this;
6264
}
6365

@@ -66,11 +68,13 @@ public function addCss($name, $params = "")
6668
*
6769
* @param string $name
6870
* @param string $params
71+
* @param string $referenceName
72+
* @param bool $before
6973
* @return $this
7074
*/
71-
public function addJs($name, $params = "")
75+
public function addJs($name, $params = "", $referenceName = "*", $before = null)
7276
{
73-
$this->addItem('js', $name, $params);
77+
$this->addItem('js', $name, $params, null, null, $referenceName, $before);
7478
return $this;
7579
}
7680

@@ -79,11 +83,13 @@ public function addJs($name, $params = "")
7983
*
8084
* @param string $name
8185
* @param string $params
86+
* @param string $referenceName
87+
* @param bool $before
8288
* @return $this
8389
*/
84-
public function addCssIe($name, $params = "")
90+
public function addCssIe($name, $params = "", $referenceName = "*", $before = null)
8591
{
86-
$this->addItem('skin_css', $name, $params, 'IE');
92+
$this->addItem('skin_css', $name, $params, 'IE', null, $referenceName, $before);
8793
return $this;
8894
}
8995

@@ -92,11 +98,13 @@ public function addCssIe($name, $params = "")
9298
*
9399
* @param string $name
94100
* @param string $params
101+
* @param string $referenceName
102+
* @param bool $before
95103
* @return $this
96104
*/
97-
public function addJsIe($name, $params = "")
105+
public function addJsIe($name, $params = "", $referenceName = "*", $before = null)
98106
{
99-
$this->addItem('js', $name, $params, 'IE');
107+
$this->addItem('js', $name, $params, 'IE', null, $referenceName, $before);
100108
return $this;
101109
}
102110

@@ -128,20 +136,41 @@ public function addLinkRel($rel, $href)
128136
* @param string $params
129137
* @param string $if
130138
* @param string $cond
139+
* @param string $referenceName name of the item to insert the element before. If name is not found, insert at the end, * has special meaning (before all / before all)
140+
* @param bool $before If true insert before the $referenceName instead of after
131141
* @return $this
132142
*/
133-
public function addItem($type, $name, $params = null, $if = null, $cond = null)
143+
public function addItem($type, $name, $params = null, $if = null, $cond = null, $referenceName = "*", $before = false)
134144
{
135-
if ($type==='skin_css' && empty($params)) {
145+
// allow skipping of parameters in the layout XML files via empty-string
146+
if ($params === '') {
147+
$params = null;
148+
}
149+
if ($if === '') {
150+
$if = null;
151+
}
152+
if ($cond === '') {
153+
$cond = null;
154+
}
155+
156+
if ($type === 'skin_css' && empty($params)) {
136157
$params = 'media="all"';
137158
}
138-
$this->_data['items'][$type.'/'.$name] = array(
139-
'type' => $type,
140-
'name' => $name,
159+
$this->_data['items'][$type . '/' . $name] = array(
160+
'type' => $type,
161+
'name' => $name,
141162
'params' => $params,
142-
'if' => $if,
143-
'cond' => $cond,
163+
'if' => $if,
164+
'cond' => $cond,
144165
);
166+
167+
// that is the standard behaviour
168+
if ($referenceName === '*' && $before === false) {
169+
return $this;
170+
}
171+
172+
$this->_sortItems($referenceName, $before, $type);
173+
145174
return $this;
146175
}
147176

@@ -536,4 +565,43 @@ protected function _isFile($filename)
536565
}
537566
return is_file($filename);
538567
}
568+
569+
/**
570+
* @param string $referenceName
571+
* @param string $before
572+
* @param string $type
573+
*/
574+
protected function _sortItems($referenceName, $before, $type)
575+
{
576+
$items = $this->_data['items'];
577+
578+
// get newly inserted item so we do not have to reproduce the functionality of the parent
579+
end($items);
580+
$newKey = key($items);
581+
$newVal = array_pop($items);
582+
583+
$newItems = array();
584+
585+
if ($referenceName === '*' && $before === true) {
586+
$newItems[$newKey] = $newVal;
587+
}
588+
589+
$referenceName = $type . '/' . $referenceName;
590+
foreach ($items as $key => $value) {
591+
if ($key === $referenceName && $before === true) {
592+
$newItems[$newKey] = $newVal;
593+
}
594+
595+
$newItems[$key] = $value;
596+
597+
if ($key === $referenceName && $before === false) {
598+
$newItems[$newKey] = $newVal;
599+
}
600+
}
601+
602+
// replace items only if the reference was found (otherwise insert as last item)
603+
if (isset($newItems[$newKey])) {
604+
$this->_data['items'] = $newItems;
605+
}
606+
}
539607
}

0 commit comments

Comments
 (0)