pakicle,
Magento is manged block positioning using before and after tags xml file ...
first check what is before and after tags in layout xml
name : This is the name by which other blocks can make reference to the block in which this attribute is assigned
.
before (and) after These are two ways to position a content block within a structural block. before="-" and after="-" are commands used to position the block accordingly at the very top or very bottom of a structural block.
As footer link are manged from below codes
Company:
<block type="cms/block" name="cms_footer_links" >
<action method="setBlockId"><block_id>footer_links_company</block_id></action>
</block>
Quick link:
<block type="page/template_links" name="footer_links" as="footer_links" template="page/template/links.phtml">
<action method="setTitle"><title>Quick Links</title></action>
</block>
Account:
<block type="page/template_links" name="footer_links2" as="footer_links2" template="page/template/links.phtml">
<action method="setTitle"><title>Account</title></action>
</block>
Connect with US:
<block type="cms/block" name="cms_footer_links_sm" after="footer_links2">
<action method="setBlockId"><block_id>footer_links_sm</block_id></action>
</block>
As you want footer link sort order
QuickLink>My Account>Connected with Us>Company
corresponding block id are footer_links>footer_links2>cms_footer_links_sm>cms_footer_links
Now i can ordering these link blocks using tags.
Connected with Us->cms_footer_links_sm
Company > cms_footer_links
I have add before......tags as cms_footer_links footer_links2
<block type="cms/block" name="cms_footer_links" after="footer_links2">
<action method="setBlockId"><block_id>footer_links_company</block_id></action>
</block>
know more about layout:
http://www.magentocommerce.com/design_guide/articles/intro-to-layouts
So what your trying to achieve is difficult because of the way widgets are added to the page, when a widget is saved it's layout XML update is automatically generated HOWEVER the name that is generated is just an random hash generated in the file below.
Mage_Widget_Model_Widget_Instance::generateLayoutUpdateXml
$hash = Mage::helper('core')->uniqHash();
$xml .= '<block type="' . $this->getType() . '" name="' . $hash . '"' . $template . '>';
This is then later saved to the database for example in my case the random name was 9d10a0d6931d18586a907b201633d878 which you can see is in the below image.
So although it's probably not very practical to do so in theory there is a way you could do this without touching any code you could create the widget search for the update record in the database table core_layout_update
get your new block name and then do for example <remove name="9d10a0d6931d18586a907b201633d878"/>
However if you make any change to the widget the XML and name will refresh and you would need to update the name references once again. I tried unsetChild and that didn't seem to work I suspect that is due to the order in which the XML is processed for widgets.
I think you have two real options:
1) Add a new text_list to the left column, right column or anywhere else you would want to add widgets and then mabey remove them on a page. You can do this in your themes local.xml like this.
<reference name="left">
<block type="core/text_list" name="widgets_left" as="widgets_left" translate="label">
<label>Widgets Left</label>
</block>
</reference>
This will add a new option in the backend as in the image which you can then add widget instances too or just remove if you need to by name as you have the widgets_left name as a reference.
e.g
You can then do either on the below in the specific category you'd like them removed from:
<reference name="left">
<action method="unsetChild"><name>widgets_left</name></action>
</reference>
<remove name="widgets_left"/>
2) Alternatively you could just add them in Via XML like below, but it sounds to me like you want as much control as possible via the CMS and why not for me widgets are underused.
<reference name="left">
<block type="cms/block" name="cms_left_block_name">
<action method="setBlockId"><block_id>my_block_identifier_from_magento_backend</block_id></action>
</block>
</reference>
You will then have a reference fixed as "cms_left_block_name" which you can use to either perform a remove or unsetChild.
Best Answer
There are two ways you can do this:
before="-"
.