Hi recently we are getting a lot of these errors in system.log, can anyone shed any light on this?
2017-09-04T13:50:17+00:00 ERR (3): Notice: Array to string conversion in /var/www/html/app/code/core/Mage/Page/Block/Html/Head.php on line 133
2017-09-04T13:50:17+00:00 ERR (3): Warning: Illegal offset type in /var/www/html/app/code/core/Mage/Page/Block/Html/Head.php on line 177
Many thanks
Tony
Can you share your app/code/core/Mage/Page/Block/Html/Head.php file please?
Hi Tom, I've just used WinMerge to compare our file against one from a fresh
Magento download and they are identical....
<?php
/**
* Magento
*
* NOTICE OF LICENSE
*
* This source file is subject to the Open Software License (OSL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/osl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@magento.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade Magento to newer
* versions in the future. If you wish to customize Magento for your
* needs please refer to http://www.magento.com for more information.
*
* @category Mage
* @package Mage_Page
* @copyright Copyright (c) 2006-2017 X.commerce, Inc. and affiliates (http://www.magento.com)
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
*/
/**
* Html page block
*
* @category Mage
* @package Mage_Page
* @author Magento Core Team <core@magentocommerce.com>
*/
class Mage_Page_Block_Html_Head extends Mage_Core_Block_Template
{
/**
* Initialize template
*
*/
protected function _construct()
{
$this->setTemplate('page/html/head.phtml');
}
/**
* Add CSS file to HEAD entity
*
* @param string $name
* @param string $params
* @return Mage_Page_Block_Html_Head
*/
public function addCss($name, $params = "")
{
$this->addItem('skin_css', $name, $params);
return $this;
}
/**
* Add JavaScript file to HEAD entity
*
* @param string $name
* @param string $params
* @return Mage_Page_Block_Html_Head
*/
public function addJs($name, $params = "")
{
$this->addItem('js', $name, $params);
return $this;
}
/**
* Add CSS file for Internet Explorer only to HEAD entity
*
* @param string $name
* @param string $params
* @return Mage_Page_Block_Html_Head
*/
public function addCssIe($name, $params = "")
{
$this->addItem('skin_css', $name, $params, 'IE');
return $this;
}
/**
* Add JavaScript file for Internet Explorer only to HEAD entity
*
* @param string $name
* @param string $params
* @return Mage_Page_Block_Html_Head
*/
public function addJsIe($name, $params = "")
{
$this->addItem('js', $name, $params, 'IE');
return $this;
}
/**
* Add Link element to HEAD entity
*
* @param string $rel forward link types
* @param string $href URI for linked resource
* @return Mage_Page_Block_Html_Head
*/
public function addLinkRel($rel, $href)
{
$this->addItem('link_rel', $href, 'rel="' . $rel . '"');
return $this;
}
/**
* Add HEAD Item
*
* Allowed types:
* - js
* - js_css
* - skin_js
* - skin_css
* - rss
*
* @param string $type
* @param string $name
* @param string $params
* @param string $if
* @param string $cond
* @return Mage_Page_Block_Html_Head
*/
public function addItem($type, $name, $params=null, $if=null, $cond=null)
{
if ($type==='skin_css' && empty($params)) {
$params = 'media="all"';
}
$this->_data['items'][$type.'/'.$name] = array(
'type' => $type,
'name' => $name,
'params' => $params,
'if' => $if,
'cond' => $cond,
);
return $this;
}
/**
* Remove Item from HEAD entity
*
* @param string $type
* @param string $name
* @return Mage_Page_Block_Html_Head
*/
public function removeItem($type, $name)
{
unset($this->_data['items'][$type.'/'.$name]);
return $this;
}
/**
* Get HEAD HTML with CSS/JS/RSS definitions
* (actually it also renders other elements, TODO: fix it up or rename this method)
*
* @return string
*/
public function getCssJsHtml()
{
// separate items by types
$lines = array();
foreach ($this->_data['items'] as $item) {
if (!is_null($item['cond']) && !$this->getData($item['cond']) || !isset($item['name'])) {
continue;
}
$if = !empty($item['if']) ? $item['if'] : '';
$params = !empty($item['params']) ? $item['params'] : '';
switch ($item['type']) {
case 'js': // js/*.js
case 'skin_js': // skin/*/*.js
case 'js_css': // js/*.css
case 'skin_css': // skin/*/*.css
$lines[$if][$item['type']][$params][$item['name']] = $item['name'];
break;
default:
$this->_separateOtherHtmlHeadElements($lines, $if, $item['type'], $params, $item['name'], $item);
break;
}
}
// prepare HTML
$shouldMergeJs = Mage::getStoreConfigFlag('dev/js/merge_files');
$shouldMergeCss = Mage::getStoreConfigFlag('dev/css/merge_css_files');
$html = '';
foreach ($lines as $if => $items) {
if (empty($items)) {
continue;
}
if (!empty($if)) {
// open !IE conditional using raw value
if (strpos($if, "><!-->") !== false) {
$html .= $if . "\n";
} else {
$html .= '<!--[if '.$if.']>' . "\n";
}
}
// static and skin css
$html .= $this->_prepareStaticAndSkinElements('<link rel="stylesheet" type="text/css" href="%s"%s />'."\n",
empty($items['js_css']) ? array() : $items['js_css'],
empty($items['skin_css']) ? array() : $items['skin_css'],
$shouldMergeCss ? array(Mage::getDesign(), 'getMergedCssUrl') : null
);
// static and skin javascripts
$html .= $this->_prepareStaticAndSkinElements('<script type="text/javascript" src="%s"%s></script>' . "\n",
empty($items['js']) ? array() : $items['js'],
empty($items['skin_js']) ? array() : $items['skin_js'],
$shouldMergeJs ? array(Mage::getDesign(), 'getMergedJsUrl') : null
);
// other stuff
if (!empty($items['other'])) {
$html .= $this->_prepareOtherHtmlHeadElements($items['other']) . "\n";
}
if (!empty($if)) {
// close !IE conditional comments correctly
if (strpos($if, "><!-->") !== false) {
$html .= '<!--<![endif]-->' . "\n";
} else {
$html .= '<![endif]-->' . "\n";
}
}
}
return $html;
}
/**
* Merge static and skin files of the same format into 1 set of HEAD directives or even into 1 directive
*
* Will attempt to merge into 1 directive, if merging callback is provided. In this case it will generate
* filenames, rather than render urls.
* The merger callback is responsible for checking whether files exist, merging them and giving result URL
*
* @param string $format - HTML element format for sprintf('<element src="%s"%s />', $src, $params)
* @param array $staticItems - array of relative names of static items to be grabbed from js/ folder
* @param array $skinItems - array of relative names of skin items to be found in skins according to design config
* @param callback $mergeCallback
* @return string
*/
protected function &_prepareStaticAndSkinElements($format, array $staticItems, array $skinItems,
$mergeCallback = null)
{
$designPackage = Mage::getDesign();
$baseJsUrl = Mage::getBaseUrl('js');
$items = array();
if ($mergeCallback && !is_callable($mergeCallback)) {
$mergeCallback = null;
}
// get static files from the js folder, no need in lookups
foreach ($staticItems as $params => $rows) {
foreach ($rows as $name) {
$items[$params][] = $mergeCallback ? Mage::getBaseDir() . DS . 'js' . DS . $name : $baseJsUrl . $name;
}
}
// lookup each file basing on current theme configuration
foreach ($skinItems as $params => $rows) {
foreach ($rows as $name) {
$items[$params][] = $mergeCallback ? $designPackage->getFilename($name, array('_type' => 'skin'))
: $designPackage->getSkinUrl($name, array());
}
}
$html = '';
foreach ($items as $params => $rows) {
// attempt to merge
$mergedUrl = false;
if ($mergeCallback) {
$mergedUrl = call_user_func($mergeCallback, $rows);
}
// render elements
$params = trim($params);
$params = $params ? ' ' . $params : '';
if ($mergedUrl) {
$html .= sprintf($format, $mergedUrl, $params);
} else {
foreach ($rows as $src) {
$html .= sprintf($format, $src, $params);
}
}
}
return $html;
}
/**
* Classify HTML head item and queue it into "lines" array
*
* @see self::getCssJsHtml()
* @param array &$lines
* @param string $itemIf
* @param string $itemType
* @param string $itemParams
* @param string $itemName
* @param array $itemThe
*/
protected function _separateOtherHtmlHeadElements(&$lines, $itemIf, $itemType, $itemParams, $itemName, $itemThe)
{
$params = $itemParams ? ' ' . $itemParams : '';
$href = $itemName;
switch ($itemType) {
case 'rss':
$lines[$itemIf]['other'][] = sprintf('<link href="%s"%s rel="alternate" type="application/rss+xml" />',
$href, $params
);
break;
case 'link_rel':
$lines[$itemIf]['other'][] = sprintf('<link%s href="%s" />', $params, $href);
break;
}
}
/**
* Render arbitrary HTML head items
*
* @see self::getCssJsHtml()
* @param array $items
* @return string
*/
protected function _prepareOtherHtmlHeadElements($items)
{
return implode("\n", $items);
}
/**
* Retrieve Chunked Items
*
* @param array $items
* @param string $prefix
* @param int $maxLen
* @return array
*/
public function getChunkedItems($items, $prefix = '', $maxLen = 450)
{
$chunks = array();
$chunk = $prefix;
foreach ($items as $item) {
if (strlen($chunk.','.$item)>$maxLen) {
$chunks[] = $chunk;
$chunk = $prefix;
}
$chunk .= ','.$item;
}
$chunks[] = $chunk;
return $chunks;
}
/**
* Retrieve Content Type
*
* @return string
*/
public function getContentType()
{
if (empty($this->_data['content_type'])) {
$this->_data['content_type'] = $this->getMediaType().'; charset='.$this->getCharset();
}
return $this->_data['content_type'];
}
/**
* Retrieve Media Type
*
* @return string
*/
public function getMediaType()
{
if (empty($this->_data['media_type'])) {
$this->_data['media_type'] = Mage::getStoreConfig('design/head/default_media_type');
}
return $this->_data['media_type'];
}
/**
* Retrieve Charset
*
* @return string
*/
public function getCharset()
{
if (empty($this->_data['charset'])) {
$this->_data['charset'] = Mage::getStoreConfig('design/head/default_charset');
}
return $this->_data['charset'];
}
/**
* Set title element text
*
* @param string $title
* @return Mage_Page_Block_Html_Head
*/
public function setTitle($title)
{
$this->_data['title'] = Mage::getStoreConfig('design/head/title_prefix') . ' ' . $title
. ' ' . Mage::getStoreConfig('design/head/title_suffix');
return $this;
}
/**
* Retrieve title element text (encoded)
*
* @return string
*/
public function getTitle()
{
if (empty($this->_data['title'])) {
$this->_data['title'] = $this->getDefaultTitle();
}
return htmlspecialchars(html_entity_decode(trim($this->_data['title']), ENT_QUOTES, 'UTF-8'));
}
/**
* Retrieve default title text
*
* @return string
*/
public function getDefaultTitle()
{
return Mage::getStoreConfig('design/head/default_title');
}
/**
* Retrieve content for description tag
*
* @return string
*/
public function getDescription()
{
if (empty($this->_data['description'])) {
$this->_data['description'] = Mage::getStoreConfig('design/head/default_description');
}
return $this->_data['description'];
}
/**
* Retrieve content for keyvords tag
*
* @return string
*/
public function getKeywords()
{
if (empty($this->_data['keywords'])) {
$this->_data['keywords'] = Mage::getStoreConfig('design/head/default_keywords');
}
return $this->_data['keywords'];
}
/**
* Retrieve URL to robots file
*
* @return string
*/
public function getRobots()
{
if (empty($this->_data['robots'])) {
$this->_data['robots'] = Mage::getStoreConfig('design/head/default_robots');
}
return $this->_data['robots'];
}
/**
* Get miscellanious scripts/styles to be included in head before head closing tag
*
* @return string
*/
public function getIncludes()
{
if (empty($this->_data['includes'])) {
$this->_data['includes'] = Mage::getStoreConfig('design/head/includes');
}
return $this->_data['includes'];
}
/**
* Getter for path to Favicon
*
* @return string
*/
public function getFaviconFile()
{
if (empty($this->_data['favicon_file'])) {
$this->_data['favicon_file'] = $this->_getFaviconFile();
}
return $this->_data['favicon_file'];
}
/**
* Retrieve path to Favicon
*
* @return string
*/
protected function _getFaviconFile()
{
$folderName = Mage_Adminhtml_Model_System_Config_Backend_Image_Favicon::UPLOAD_DIR;
$storeConfig = Mage::getStoreConfig('design/head/shortcut_icon');
$faviconFile = Mage::getBaseUrl('media') . $folderName . '/' . $storeConfig;
$absolutePath = Mage::getBaseDir('media') . '/' . $folderName . '/' . $storeConfig;
if(!is_null($storeConfig) && $this->_isFile($absolutePath)) {
$url = $faviconFile;
} else {
$url = $this->getSkinUrl('favicon.ico');
}
return $url;
}
/**
* If DB file storage is on - find there, otherwise - just file_exists
*
* @param string $filename
* @return bool
*/
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);
}
}
Any idea's Tom?
Well done the upgrade to 1.9.3.6 and waited and still getting the same issues...
2017-09-16T08:25:43+00:00 ERR (3): Notice: Array to string conversion in /var/www/html/app/code/core/Mage/Page/Block/Html/Head.php on line 133 2017-09-16T08:25:43+00:00 ERR (3): Warning: Illegal offset type in /var/www/html/app/code/core/Mage/Page/Block/Html/Head.php on line 177 2017-09-16T08:43:13+00:00 ERR (3): Notice: Array to string conversion in /var/www/html/app/code/core/Mage/Page/Block/Html/Head.php on line 133 2017-09-16T08:43:13+00:00 ERR (3): Warning: Illegal offset type in /var/www/html/app/code/core/Mage/Page/Block/Html/Head.php on line 177
Can anyone help?
Exactly the same situation here.
I hoped someone had a solution already
Hello,
Please add isset condition before that.
It happens when xml format is wrong for add js and CSS file
please add isset condition and else condition print_r that.
so you can find for which js or css is not added right way.
Hope it will help you.