After adding a new theme and uploading a big number of records to a fresh Magento install, I see the following error in the log files:
Invalid argument supplied for foreach() in /home/content/07/6268407/html/app/design/frontend/MYTHEME/template/catalog/product/list/toolbar.phtml on line 63
After much digging around, I realized that this error is due to change in Magento on how the pagination works now in 1.4 as compared to earlier versions. The theme I used was clearly not compatible with Magento1.4 and hence this issue. To resolve this problem, here are the steps I took:
1. Create Template file for Pagination
Create a new file for handling pagination according to the new way. Create a new file called
pager.phtml in the
/template/catalog/product/list/ folder inside your theme folder. Now write the below code into this new file:
<?php if($this->getCollection()->getSize()): ?>
<?php if($this->getLastPageNum()>1): ?>
<td class="pages">
<strong><?php echo $this->__('Page:') ?></strong>
<ol>
<?php if (!$this->isFirstPage()): ?>
<li><a href="<?php echo $this->getPreviousPageUrl() ?>"><img src="<?php echo $this->getSkinUrl('images/pager_arrow_left.gif') ?>" alt="<?php echo $this->__('Previous Page'); ?>" /></a></li>
<?php endif ?>
<?php foreach ($this->getPages() as $_page): ?>
<?php if ($this->isPageCurrent($_page)): ?>
<li><span class="on"><?php echo $_page ?></span></li>
<?php else: ?>
<li><a href="<?php echo $this->getPageUrl($_page) ?>"><?php echo $_page ?></a></li>
<?php endif ?>
<?php endforeach;; ?>
<?php if (!$this->isLastPage()): ?>
<li><a href="<?php echo $this->getNextPageUrl() ?>"><img src="<?php echo $this->getSkinUrl('images/pager_arrow_right.gif') ?>" alt="<?php echo $this->__('Next Page'); ?>" /></a></li>
<?php endif ?>
</ol>
</td>
<?php endif; ?>
<?php endif ?>
2. Call this Pagination code in Layout
Edit the catalog layout xml file to include this new pagination code. Open the file
catalog.xml in the
/layout/ folder inside your theme folder. Now search for this line of code:
<block type="catalog/product_list_toolbar" name="product_list_toolbar" template="catalog/product/list/toolbar.phtml">
Below this line, add the following new line to call the pager file that you created in step 1 above:
<block type="page/html_pager" name="product_list_toolbar_pager" template="catalog/product/list/pager.phtml" />
3. Call this Pagination code in Toolbar
Edit the toolbar html file to include this new pagination code. Open the file
toolbar.phtml in the
/template/catalog/product/list/ folder inside your theme folder. Now search for the below block of code approximately around lines 42 - 63:
<?php if($this->getLastPageNum()>1 && is_array($this->getPages())): ?>
...
...
...
<?php endif; ?>
Now replace this block of code with the following single line of code:
<?php echo $this->getPagerHtml(); ?>
If you follow these 3 steps to the 'T' it should definitely resolve your problem!
To find out details of errors, please go through this post on
Debugging Magento.