Question

In Magento 1.8, I'm looking to overwrite a function from Sitemap/Module/Resource/Cms/Page.php, the getCollection($storeId) function to remove specific pages from the generated sitemap.

But something isn't working.

In local/Extender/Sitemap/etc/config.xml I have:

<?xml version="1.0"?>
<config>
    <modules>
        <Extender_Sitemap>
            <version>1.0.1</version>
        </Extender_Sitemap>
    </modules>
    <global>
        <modules>
            <sitemap_resource>
                <rewrite>
                    <sitemap_cms_page>Extender_Sitemap_Model_Resource_Cms_Page</sitemap_cms_page>
                </rewrite>
            </sitemap_resource>
        </modules>
    </global>
</config>

My getCollection() function is in local/Extender/Sitemap/Model/Resource/Cms/Page.php:

class Extender_Sitemap_Model_Resource_Cms_Page extends Mage_Core_Model_Resource_Db_Abstract
{
    public function getCollection($storeId)
    {
        $pages = array();

        $select = $this->_getWriteAdapter()->select()
            ->from(array('main_table' => $this->getMainTable()), array($this->getIdFieldName(), 'identifier AS url'))
            ->join(
                array('store_table' => $this->getTable('cms/page_store')),
                'main_table.page_id=store_table.page_id',
                array()
            )
            ->where('main_table.identifier NOT IN (?)', array('homepage')) 
            ->where('main_table.is_active=1')
            ->where('store_table.store_id IN(?)', array(0, $storeId));

        $query = $this->_getWriteAdapter()->query($select);

        while ($row = $query->fetch()) {
            if ($row['url'] == Mage_Cms_Model_Page::NOROUTE_PAGE_ID) {
                continue;
            }
            $page = $this->_prepareObject($row);
            $pages[$page->getId()] = $page;
        }

        return $pages;
    }
}

I activated the module in etc/modules/Extender_All.xml:

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Extender_Sitemap>
            <active>true</active>
            <codePool>local</codePool>
        </Extender_Sitemap>
    </modules>
</config>

I also have the following empty pages:

In local/Extender/Sitemap/Model/Sitemap.php:

class Extender_Sitemap_Model_Sitemap extends Mage_Core_Model_Abstract
{

}

In local/Extender/Sitemap/Model/Resource/Sitemap.php:

class Extender_Sitemap_Model_Resource_Sitemap extends Mage_Core_Model_Resource_Db_Abstract
{

}
Was it helpful?

Solution

Rewrite correctly the class you override in app/code/local/Yourcompany/Yourmodule/etc/config.xml

<config>
    <global>
        <models>
            <sitemap_resource>
                <rewrite>
                    <cms_page>Yourcompany_Yourmodulename_Sitemap_Model_Resource_Cms_Page</cms_page>
                </rewrite>
            </sitemap_resource>
        </models>
    </global>
</config>

and then in app/code/local/Yourcompany/Yourmodule/Sitemap/Model/Resource/Cms/Page.php you must extend like this:

class Yourcompany_Yourmodulename_Sitemap_Model_Resource_Cms_Page extends Mage_Sitemap_Model_Resource_Cms_Page { ... }

Similarly in etc/modules/Yourcompany_Yourmodule.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Yourcompany_Yourmodule>
            <active>true</active>
            <codePool>local</codePool>
        </Yourcompany_Yourmodule>
    </modules>
</config>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top