0
votes

How can I retrieve the SEF link of an article by its ID?

I think about a thing like this:

$link = get_link(34); // where 34 is the article ID

<a href="<?php echo $link; ?>">Article link</a>

UPDATE My code is this (updated with Rikesh code):

Mysql query: "SELECT id, title, extra_fields FROM xxxxx_k2_items WHERE catid = ".$catid

$n=0; //counter
while($row = mysql_fetch_array($result)){
  $titles[$n] = $row['title'];
  $links[$n] = JRoute::_(ContentHelperRoute::getArticleRoute($row['id'], $catid));
  $n++;
}

Ok, now this retrieves links like /joomla/index.php/currentpage?id=4 where 4 is the correct id but the link doesn't work! It goes to a wrong page. My doubt is: your code works also for K2 articles? Because I'm working with K2 articles not default joomla articles. Edit: yes, I've checked my doubt, your code links to the Joomla articles by ID, but the IDs i'm using are for K2 articles! Notice: I'd need of the SEF link

1
If you are working with K2 articles then use the K2 router. For more information have a look at the K2 content module.Shaz

1 Answers

1
votes

you should include the K2 route

require_once(JPATH_SITE.DS.'components'.DS.'com_k2'.DS.'helpers'.DS.'route.php');

and you should update both the mysql query and the PHP code because you need info also from the k2 categories table, here is an example

$db = JFactory::getDBO();
$query = '
    SELECT 
        a.id AS id,
        a.extra_fields AS extrafields,
        a.catid AS catid,
        a.title AS title,
        a.introtext AS introtext,
        a.alias AS alias,
        c.alias AS catalias
    FROM 
        #__k2_items AS a 
        LEFT JOIN #__k2_categories AS c ON ( a.catid = c.id ) 
        WHERE a.published = 1 AND a.catid = '.$catid;
$db->setQuery($query);
$articles = $db->loadObjectList();
$n=0;
foreach ($articles as $article) {
    $titles[$n] = $article->title;
    $links[$n] = K2HelperRoute::getItemRoute($article->id.':'.urlencode($article->alias),$article->catid.':'.urlencode($article->catalias));
    $n++;
}