View Single Post
  #13  
Old 02-10-2010, 09:15 AM
 
bionuts bionuts is offline
 

Advanced Member
  
Join Date: Oct 2008
Location: At my desk, probably scratching my head over an X Cart problem....
Posts: 85
 

Default Re: Adding a second 'categories' section

I've experienced the problem of a second menu not displaying on search result pages whilst trying to get a second category menu to appear in my 4.3 installation. I managed to solve the problem, so thought I'd share what I did in case others might find it useful. Please note, though, that I have only tried this on 4.3 and do not know if it will be backwards compatible. In addition, I'm not a programmer, so before you try my solution make sure you've got a working back up of all your files - better safe than sorry.

First of all, I copied customer/categories.tpl and created a new file called customer/categories_type.tpl. In each file I changed the {foreach} loop to be either (code I've added is highlighted):

Code:
{foreach from=$categories_menu_list item=c name=categories} {if $c.order_by lt 500} <li{interline name=categories}><a href="home.php?cat={$c.categoryid}" title="{$c.category|escape}">{$c.category}</a></li> {/if} {/foreach}
or

Code:
{foreach from=$categories_menu_list item=c name=categories} {if $c.order_by gt 501} <li{interline name=categories}><a href="home.php?cat={$c.categoryid}" title="{$c.category|escape}">{$c.category}</a></li> {/if} {/foreach}
depending on which file it was in. I then added:

Code:
{include file="customer/categories_type.tpl"}

to my customer/home.tpl in the right place for where I wanted the second menu to display. Lastly, I created a new variable in my language file so that I could give the new menu a different name. With the category position order sorted out, this displays my two category menus exactly where I want them, and with the right categories in each one.

Except on the search results page, that is. For some reason, the search results page (and the advanced search page) ignores the foregoing code and displays all of the categories in the original menu - even the ones that should be in the second menu. The second menu is empty, although the heading is still displayed.

From experimenting, it appears that the search results will ignore the {if} statement added to the categories.tpl and categories_type.tpl files if you use $c.order_by to define it. The only way I can get it to work is to use $c.categoryid instead. This is the number that is assigned to the category upon creation, and which you can only see if you look at your SQL database in something like PHPMyAdmin.

Looking at my database, the first category has $c.categoryid 10 and then all the others are numbered sequentially from there - with gaps for some that have been deleted. The $c.categoryid is completely unrelated to the position order that you assign to categories in your X Cart admin.

So, armed with the necessary $c.categoryid information, I've changed my {foreach} loops to be:

Code:
{foreach from=$categories_menu_list item=c name=categories} {if $c.categoryid lt 32 or $c.categoryid eq 50 or $c.categoryid eq 51} <li{interline name=categories}><a href="home.php?cat={$c.categoryid}" title="{$c.category|escape}">{$c.category}</a></li> {/if} {/foreach}
which displays categories 10 to 31, 50 and 51 in the first menu and

Code:
{foreach from=$categories_menu_list item=c name=categories} {if $c.categoryid gte 32 and $c.categoryid ne 50 and $c.categoryid ne 51} <li{interline name=categories}><a href="home.php?cat={$c.categoryid}" title="{$c.category|escape}">{$c.category}</a></li> {/if} {/foreach}
which displays categories 32 onwards (except for 50 and 51) in the second menu.

Done this way, the correct categories show up in the correct menus and are visible on every page - including search results pages.

It's more of a fiddle to do it this way, as there is no reference to the $c.categoryid in the X Cart admin, and when you add new categories their $c.categoryid will always be the next sequential number - which makes it less easy to assign them to the correct menu, without changing your {if} statements. But it does display as needed and doesn't seem to mess anything else up.
__________________
Currently transitioning to X-Cart 5.4.x.x. Oh the joy
Reply With Quote