categories as tags

5 posts by 2 authors in: Forums > CMS Builder
Last Post: November 9, 2012   (RSS)

By rez - November 8, 2012 - edited: November 8, 2012

The bottom line is that I want to make <?php echo join(', ', $record['category:labels']); ?>
a list of links.


For a portfolio, I have a category menu setup. So far, its all one level. (project categories)

I have projects in another editor using these categories from an advanced list, num for value, breadcrumb for label.

I have my categories showing up in a navigation list and showing / searching ok in the address bar (setup in viewer urls to show projects and details on the same page), like:
mysite.com/portfolio.php?chairs-18

Each item / project can be assigned to multiple categories (checkboxes) in the project editor (advanced list mentioned above).

The display code (from code generator) for a project uses:
<?php echo join(', ', $record['category:labels']); ?>
to list all the categories a project is assigned to with a checkbox.

This is all working great. What I simply want to do is make each of the categories that are checked and already displaying per project, a link to that category (a tag). The same way my sidebar navigation list is working to load a category but in the display code per project, I dont know how to make that happen in the array (if that's the way to do it)


list($categoryRecords, $selectedCategory) = getCategories(array(
'tableName' => 'project_cats',
//'selectedCategoryNum' => '', // defaults to getNumberFromEndOfUrl()
'categoryFormat' => 'showall', // showall, onelevel, twolevel
));


// if there is a category selected, make the multi selections
if ($selectedCategory):
list($itemsRecords, $itemsMetaData) = getRecords(array(
'tableName' => 'projects',
'where' => "category LIKE '%\t{$selectedCategory['num']}\t%'",
'perPage' => '16',
//'debugSql' =>'true'
));
endif;
list($blockRecords, $blockMetaData) = getRecords(array(
'tableName' => 'projects',
'orderBy' => 'RAND()',
//'debugSql' =>'true'
));

<?php if (!$selectedCategory): ?>
<?php foreach ($blockRecords as $block): ?>
show random projects
<?php endforeach ?><?php endif ?>

<?php if ($selectedCategory): ?>
<?php foreach ($itemsRecords as $itemRecord): ?>
<?php foreach ($itemRecord['image'] as $index => $upload): ?>
<a href="<?php echo $upload['urlPath'] ?>" class="thumb" data-lightbox="fancybox[215]" title="<?php echo htmlencode($itemRecord['title']) ?>">
<img src="<?php echo $upload['thumbUrlPath'] ?>" class="attachment-ci_listing_thumb" alt="<?php echo htmlencode($itemRecord['title']) ?>" title="<?php echo htmlencode($itemRecord['title']) ?>"></a>
<?php endforeach ?>

<div class="tags">
<?php echo join(', ', $itemRecord['category:labels']); ?>
</div>
<?php endforeach ?><?php endif ?>

Re: [rez] categories as tags

By rez - November 8, 2012 - edited: November 8, 2012

by the way, here is my sidebar code that loads categories to this portfolio page the same way the tags should. Some categories are currently empty (no projects with a category checkbox selected in the projects editor) How can I skip displaying empty category links in this nav menu?

<ul class="style6">
<?php foreach ($categoryRecords as $categoryRecord): ?>
<?php echo $categoryRecord['_listItemStart'] ?>
<?php if ($categoryRecord['_isSelected']): ?>
<strong>
<?php if (!$categoryRecord['_hasChild']):?>
<a href="<?php echo $categoryRecord['_link'] ?>">
<?php endif; ?>
<?php echo $categoryRecord['name'] ?>
<?php if (!$categoryRecord['_hasChild']):?>
</a>
<?php endif; ?>
</strong>
<?php else: ?>
<?php if (!$categoryRecord['_hasChild']):?>
<a href="<?php echo $categoryRecord['_link'] ?>">
<?php endif; ?>
<?php echo $categoryRecord['name'] ?>
<?php if (!$categoryRecord['_hasChild']):?>
</a>
<?php endif; ?>
<?php endif ?>
<?php echo $categoryRecord['_listItemEnd'] ?>
<?php endforeach; ?>
</ul>

Re: [rez] categories as tags

By gregThomas - November 8, 2012

Hi Rez,

I would create the category links to the portfolio page like this:

<?php $linkArray = array_combine($itemRecord['category:values'], $itemRecord['category:labels']); ?>

<?php foreach($linkArray as $link => $title): ?>
<a href="http://mysite.com/portfolio.php?num=<?php echo $link; ?>" ><?php echo $title; ?></a>,
<?php endforeach; ?>


So first I've combined the array category labels and keys into one array. Then I've used a foreach loop to cycle through them, and display a link to the portfolio page.

Do you mean that the $categoryRecords array is sometimes returned with nothing in it? You can check if the categories array is currently empty like this:

<?php if($categoryRecords): ?>
<ul class="style6">
<?php foreach ($categoryRecords as $categoryRecord): ?>
<?php echo $categoryRecord['_listItemStart'] ?>
<?php if ($categoryRecord['_isSelected']): ?>
<strong>
<?php if (!$categoryRecord['_hasChild']):?>
<a href="<?php echo $categoryRecord['_link'] ?>">
<?php endif; ?>
<?php echo $categoryRecord['name'] ?>
<?php if (!$categoryRecord['_hasChild']):?>
</a>
<?php endif; ?>
</strong>
<?php else: ?>
<?php if (!$categoryRecord['_hasChild']):?>
<a href="<?php echo $categoryRecord['_link'] ?>">
<?php endif; ?>
<?php echo $categoryRecord['name'] ?>
<?php if (!$categoryRecord['_hasChild']):?>
</a>
<?php endif; ?>
<?php endif ?>
<?php echo $categoryRecord['_listItemEnd'] ?>
<?php endforeach; ?>
</ul>
<?php endif; ?>


So if the $categoryRecords array is empty then the the foreach loop will not execute.

Thanks!
Greg Thomas







PHP Programmer - interactivetools.com

Re: [greg] categories as tags

By rez - November 8, 2012 - edited: November 8, 2012

The first solution works great. I need array experience, nice.

For the second part, no there will always be categories that have projects so your code would always be true. What I need to do is when listing every category in that sidebar navigation, skip the empty categories that don't have any projects assigned to them (with a checkbox in the project editor).

I'll try this again but would appreciate any help when you can. thanks!