I need to get list of all categories and their ids on product page in Prestashop (I am using v 1.6.0.9).
I tried to do something like this:
$other_categories = $something->getCategories($this->context->language->id, 1, 100);
foreach($other_categories as something)
{
// now if the id of the category isnt "1", display name of category
if($category->id != "1") { $category->name }
}
But, this is not working.
$category->name
gives me only the name of current open category, not the name of each category in the list. I don't know what to put instead of something
? And it works only, when I use $category->getProducts
. Here you have my shop (see "related products").
It is my third shop and I am struggling with this problem for two days.
In PS 1.6 there is a Category
class, it contains some handy static methods usable in your controller: getCategories(...)
, getNestedCategories(...)
, getSimpleCategories
- these are all static (and public) sou you call them like Category::funcName(...)
For your purpose I thing the best option would be getNestedCategories()
which has this header:
public static function getNestedCategories(
$root_category = null,
$id_lang = false,
$active = true,
$groups = null,
$use_shop_restriction = true,
$sql_filter = '',
$sql_sort = '',
$sql_limit = ''
)
In your controller you could do something like:
$allCategories = Category::getNestedCategories(null, $this->context->language->id);
$this->context->smarty->assign( 'allCategories' , $allCategories );
Then in your template file something like
{foreach from=$allCategories item=mainCategory}
<div class="categoryBox">
<h2>{$mainCategory.name}</h2>
<p>{$mainCategory.description}</p>
</div>
{foreach from=$mainCategory.children item=subCategory}
<div class="categoryBox">
<h3>{$subCategory.name}</h3>
<p>{$subCategory.description}</p>
</div>
{/foreach}
{/foreach}
If you would like to have only subcategories of Home category, you can use getHomeCategories($id_lang, $active = true, $id_shop = false)
:
$allCategories = Category::getHomeCategories( $this->context->language->id );
Also handy one is static function getCategoryInformations($ids_category, $id_lang = null)
=> VERY useful when you have a list of some particular ids of categories you want to get - you just pass them as array - example of usage:
$myCustomCatIDs = array( 5 , 20 , 7);
$myCustomCats = Category::getCategoryInformations( $myCustomCatIDs );