Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add features from N98 layout helper #1051

Merged
merged 2 commits into from
Mar 12, 2021
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 86 additions & 17 deletions app/code/core/Mage/Page/Block/Html/Head.php
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,13 @@ protected function _construct()
*
* @param string $name
* @param string $params
* @param string $referenceName
* @param bool $before
* @return $this
*/
public function addCss($name, $params = "")
public function addCss($name, $params = "", $referenceName = "*", $before = null)
{
$this->addItem('skin_css', $name, $params);
$this->addItem('skin_css', $name, $params, null, null, $referenceName, $before);
return $this;
}

Expand All @@ -61,11 +63,13 @@ public function addCss($name, $params = "")
*
* @param string $name
* @param string $params
* @param string $referenceName
* @param bool $before
* @return $this
*/
public function addJs($name, $params = "")
public function addJs($name, $params = "", $referenceName = "*", $before = null)
{
$this->addItem('js', $name, $params);
$this->addItem('js', $name, $params, null, null, $referenceName, $before);
return $this;
}

Expand All @@ -74,11 +78,13 @@ public function addJs($name, $params = "")
*
* @param string $name
* @param string $params
* @param string $referenceName
* @param bool $before
* @return $this
*/
public function addCssIe($name, $params = "")
public function addCssIe($name, $params = "", $referenceName = "*", $before = null)
{
$this->addItem('skin_css', $name, $params, 'IE');
$this->addItem('skin_css', $name, $params, 'IE', null, $referenceName, $before);
return $this;
}

Expand All @@ -87,11 +93,13 @@ public function addCssIe($name, $params = "")
*
* @param string $name
* @param string $params
* @param string $referenceName
* @param bool $before
* @return $this
*/
public function addJsIe($name, $params = "")
public function addJsIe($name, $params = "", $referenceName = "*", $before = null)
{
$this->addItem('js', $name, $params, 'IE');
$this->addItem('js', $name, $params, 'IE', null, $referenceName, $before);
return $this;
}

Expand Down Expand Up @@ -123,20 +131,41 @@ public function addLinkRel($rel, $href)
* @param string $params
* @param string $if
* @param string $cond
* @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)
* @param bool $before If true insert before the $referenceName instead of after
* @return $this
*/
public function addItem($type, $name, $params=null, $if=null, $cond=null)
public function addItem($type, $name, $params = null, $if = null, $cond = null, $referenceName = "*", $before = false)
{
if ($type==='skin_css' && empty($params)) {
// allow skipping of parameters in the layout XML files via empty-string
if ($params === '') {
$params = null;
}
if ($if === '') {
$if = null;
}
if ($cond === '') {
$cond = null;
}

if ($type === 'skin_css' && empty($params)) {
$params = 'media="all"';
}
$this->_data['items'][$type.'/'.$name] = array(
'type' => $type,
'name' => $name,
$this->_data['items'][$type . '/' . $name] = array(
'type' => $type,
'name' => $name,
'params' => $params,
'if' => $if,
'cond' => $cond,
);
'if' => $if,
'cond' => $cond,
);

// that is the standard behaviour
if ($referenceName === '*' && $before === false) {
return $this;
}

$this->_sortItems($referenceName, $before, $type);

return $this;
}

Expand Down Expand Up @@ -517,10 +546,50 @@ protected function _getFaviconFile()
* @param string $filename
* @return bool
*/
protected function _isFile($filename) {
protected function _isFile($filename)
{
if (Mage::helper('core/file_storage_database')->checkDbUsage() && !is_file($filename)) {
Mage::helper('core/file_storage_database')->saveFileToFilesystem($filename);
}
return is_file($filename);
}

/**
* @param string $referenceName
* @param string $before
* @param string $type
*/
protected function _sortItems($referenceName, $before, $type)
{
$items = $this->_data['items'];

// get newly inserted item so we do not have to reproduce the functionality of the parent
end($items);
$newKey = key($items);
$newVal = array_pop($items);

$newItems = array();

if ($referenceName === '*' && $before === true) {
$newItems[$newKey] = $newVal;
}

$referenceName = $type . '/' . $referenceName;
foreach ($items as $key => $value) {
if ($key === $referenceName && $before === true) {
$newItems[$newKey] = $newVal;
}

$newItems[$key] = $value;

if ($key === $referenceName && $before === false) {
$newItems[$newKey] = $newVal;
}
}

// replace items only if the reference was found (otherwise insert as last item)
if (isset($newItems[$newKey])) {
$this->_data['items'] = $newItems;
}
}
}