[SOLVED] News & Pretty URL's with MLE & hierarchy Off

This is a FORK of the CMS Made Simple project and is not oficially supported in any way by the CMS Made Simple development team.
Locked
beattie
Forum Members
Forum Members
Posts: 98
Joined: Sun Dec 21, 2008 11:35 pm

[SOLVED] News & Pretty URL's with MLE & hierarchy Off

Post by beattie »

Many thanks to Owens for providing the solution to having nice URLs with the News Modules for users with multinlingual sites using MLE and with hierarchy set to false in the config file.

See also this post for information on the origins of this post:
http://forum.cmsmadesimple.org/index.php/topic,43037.0.html

I have a site in English and Spanish. You may have to tweak some of the below code to get it to work for you, but this might help someone who finds themselves in my situation. Just to be clear, the below code has been kindly provided by Owens, I am just grouping it together to make it easier for MLE users to implement.

Step 1
Add the below code to your .htaccess file:

Code: Select all

RewriteCond %{HTTP_HOST} ^yoursite.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.yoursite.com$
# News Pretty URL Fix
RewriteRule ^news/([^/][0-9]+)/([^/][a-zA-Z]+_[a-zA-Z]+)/([^/][0-9]+)/([^/][a-zA-Z]+)/(.+)$ index.php?mact=News,cntnt01,detail,0&cntnt01articleid=$1&cntnt01lang=$2&cntnt01returnid=$3&hl=$4 [NC,L]
RewriteRule ^news/([^/][0-9]+)/([^/][0-9]+)/([^/][a-zA-Z]+)/(.+)$ index.php?mact=News,cntnt01,detail,0&cntnt01articleid=$1&cntnt01returnid=$2&hl=$3 [NC,L]


Step 2
Create a User Defined Tag (UDT) and name it news_no_hierarchy_url
(you can create a UDT in admin under the Extensions menu).
Copy and paste the below code and save your UDT.

Code: Select all

preg_match('/articleid=[0-9]*/i',$params['ugly'], $matches);
$id = preg_replace('/articleid=/i','',$matches[0]);
preg_match('/lang=[a-zA-Z\{2}_[a-zA-Z]{2}/i',$params['ugly'], $matches);
$lang = preg_replace('/lang=/i','',$matches[0]);
preg_match('/returnid=[0-9]*/i',$params['ugly'], $matches);
$rid = preg_replace('/returnid=/i','',$matches[0]);
preg_match('/hl=[a-z]*/i',$params['ugly'], $matches);
$hl = preg_replace('/hl=/i','',$matches[0]);
$title = preg_replace('/ /','-',$params['title']);
if ($lang != '') {
  echo '/news/'.$id.'/'.$rid.'/'.$hl.'/'.$title.'.html';
} else {
  echo '/news/'.$id.'/'.$rid.'/'.$hl.'/'.$title.'.html';
}


Step 3
Add the below code to your news summary template just below the code {foreach from=$items item=entry}

Code: Select all

{capture assign="cleantitle"}{$entry->title|cms_escape:htmlall}{/capture}
{capture assign="uglyurl"}{$entry->moreurl}{/capture}


Step 4
Replace this code:

Code: Select all

<a href="{$entry->moreurl}" title="{$entry->title|cms_escape:htmlall}">


With this code:

Code: Select all

<a href="{news_no_hierarchy_url ugly="$uglyurl" title="$cleantitle"}">


Here is a copy of my news summary template for your information:

Code: Select all

<!-- Start News Display Template -->
{if $pagecount > 1}
  <p><strong>More articles:</strong>
{if $pagenumber > 1}
{$firstpage} {$prevpage} 
{/if}
{$pagetext} {$pagenumber} {$oftext} {$pagecount}
{if $pagenumber < $pagecount}
 {$nextpage} {$lastpage}
{/if}
</p>
{/if}

{foreach from=$items item=entry}

{capture assign="cleantitle"}{$entry->title|cms_escape:htmlall}{/capture}
{capture assign="uglyurl"}{$entry->moreurl}{/capture}


<div>

<div style="color:#ec008c;padding-top:8px;"><h2>
<a href="{news_no_hierarchy_url ugly="$uglyurl" title="$cleantitle"}">{$entry->title|cms_escape:htmlall}</a></h2></div>

{if $entry->writer}
   <div>
       {$entry->writer}
   </div>
{/if}

{if $entry->postdate}   
      <div style="padding-top:5px;"><strong>{$entry->postdate|cms_date_format}</strong> </div>
{/if}
<div style="padding-top:5px;"><em>{$category_label} {$entry->category}</em><br></div>

{if $entry->article_summary}
   <div style="padding-top:5px;">
      {eval var=$entry->article_summary}
   </div>


<div style="padding-top:10px">

      <img src="images/bullet.gif" alt="bullet"> <a href="{news_no_hierarchy_url ugly="$uglyurl" title="$cleantitle"}">full article</a> <img src="images/bullet.gif" alt="bullet">
   
</div>

{else if $entry->content}

      {eval var=$entry->content}
   
{/if}



<div style="border-bottom: 1px dashed #ec008c; width:100%;padding-top:20px;"></div>
</div>
{/foreach}
{if $pagecount > 1}
  <p><strong>More articles:</strong>
{if $pagenumber > 1}
{$firstpage} {$prevpage} 
{/if}
{$pagetext} {$pagenumber} {$oftext} {$pagecount}
{if $pagenumber < $pagecount}
 {$nextpage} {$lastpage}
{/if}
</p>
{/if}
<!-- End News Display Template -->
Locked

Return to “[locked] CMSMS MLE fork”