For this you need to create a structural block only for category pages. Steps to do this is given below.
1. Define your structural block
File : app\design\frontend\{package}\{theme}\layout\local.xml
<layout>
<catalog_category_view>
<reference name="root">
<block type="core/template" name="category.top.banner" as="category_top_banner" template="custom/category/top_banner.phtml"></block>
</reference>
</catalog_category_view>
</layout>
Here <catalog_category_view />
is a specific layout update handle node for category pages. ie Magento process this layout handle only when it renders a category page. Our structural block is category.top.banner
and it is added to root
block.
2. Call Our Block in Root Template
File : app\design\frontend\{package}\{theme}\template\page\3columns.phtml
...
<div class="main">
<?php echo $this->getChildHtml('breadcrumbs') ?>
<?php echo $this->getChildHtml('category_top_banner') ?>
..
As you can see, we are calling our block just below breadcrumbs
block. Follow the same step in every page layout template files (ie files inside page\
directory) in order to obtain the same result in every page layout.