happilyUnStuck
happilyUnStuck

Reputation: 372

joomla category list override to add id to each list item

I am trying to add a custom style to each list item within Joomla!s Category List output which gives me the following html

<div class="blog">
  <div class="cat-children">    
    <ul>
      <li class="first">
        <span class="item-title"><a href="/hyt-hand-held-license-free">HYT</a>
        </span>
      </li>
      <li></li>
    </ul>
  </div>
</div>

I think what I need to do is add something like:

<li id="myID<?php echo $this->item->catid; ?> ">

The trouble is I can't find which file to override. I have looked in /templates/mytemplate/html/com_content/category/ as well as /components/com_content/views/category/tmpl yet none of the files seem to have a an unordered list within them that relates to cat-chidren.

So my first question is which file should I edit? And my second is what is the best syntax of this->item->[correct'Method'?] (is method the correct term or variable, I'm a little shaky on this!) to use so that each list item will have an id="myID[nameofarticle/subcatagory]"

Upvotes: 5

Views: 2453

Answers (3)

marcanuy
marcanuy

Reputation: 23972

As your HTML code shows you are using Category Blog view, each article instance in the category is being rendered by blog_children.php file, as it shows /components/com_content/views/category/tmpl/blog.php

<?php echo $this->loadTemplate('children'); ?>

So /components/com_content/views/category/tmpl/blog_children.php is the file you need to edit or override in template html directory.

Then you can apply custom styling adding an id or class for each article with $child->id.

Upvotes: 0

Trev
Trev

Reputation: 851

You'll see cat-children in /components/com_content/views/category/tmpl/default.php

The ul is in another loaded subtemplate, loadTemplate('children'); ?> , i.e.

/components/com_content/views/category/tmpl/default_children.php

If you want to modify the li class you could stick something like this at line 26 (of your override not core file - but fine to just test on a core file)

<?php $class = ' class="cmyId' . $this->escape($child->title) . '"';?>

That would make each li appear as

So this

<li<?php echo $class; ?>>
    <?php $class = ''; ?>

becomes this

<?php $class =  ' class="cmyId' . $this->escape($child->title) . '"';?>
    <li<?php echo $class; ?>>
    <?php //$class = ''; ?>

Have tested it out on a 2.5 installation.

Upvotes: 1

don
don

Reputation: 4532

You should override several files stored in components/com_content/views/ Depending on the list you want to edit, you should then look in the folders: - article - category - categories - featured In each of these folders you'll see a subfolder called 'tmpl', inside which there is a 'default.php' file. That's what you're looking for.

If you want to override the files remember that the best practice is to place the alternative files in your template's folder, building a similar path as the one in which the original file is (e.g. for the article folder: templates/YOURTEMPLATEFOLDER/html/com_content/article/default.php - NO tmpl folder needed, nor views folder).

An alternative and, in my opinion, easier way could be setting different templates for each category, and then assigning to each the list styles you prefer.

Or, even easier, you could simply edit your index.php file in the template's folder so that it echoes a specific css stylesheet depending on the $catId.

Upvotes: 0

Related Questions