這是什么意思呢?我們知道在織夢系統里面標簽調用時,最歷害的二個標簽就是loop和sql了,這兩個可以調用織夢系統里面幾乎任意表中的數據。
下面將以loop標簽為例子:
例如:
{dede:loop table='dede_archives' orderway='asc' row='1' if='shorttitle=1'}
<h1><a href='[field:arcurl/]'>[field:title/]</a></h1>
{/dede:loop}
上面這個標簽調用一條,條件為shorttitle=1的文章內容,是在表dede_archives里面調用的。
但是,調用出來的結果是:<h1><a href=''>織夢教程網</a></h1>
也就是說無論用loop 還是用sql調出來的鏈接都是空的,如果這樣的話,這兩個標簽就沒有意義了。
所以,織夢官方這樣給出這樣的標簽調用:
{dede:loop table='dede_archives' orderway='asc' row='1' if='shorttitle=1'}
<h1><a href='/plus/view.php?aid=[field:id/]' target='_blank'>[field:title/]</a><br></h1>
{/dede:loop}
結果是:<h1><a href='/plus/view.php?aid=1'>織夢教程網</a></h1>
我們不希望在首頁調用出來的內容是動態(動態鏈接是/plus/view.php?aid=1)的,這樣可能對seo不好,因為,多了這個鏈接后,同樣一篇文章可能讓百度收錄二次,可能讓百度認為是我們作弊,懂seo都知道。
現在我們的目標是把底層模板[field:arcul/]的調用,跟在標簽{dede:arclist}調用出來一樣,即調用出來的是靜態的。
例如,<h1><a href='www.dede58.com/php/1.html'>織夢教程網</a></h1>
經過我的研究,既然是用loop就改他的標簽源碼文件: loop.lib.php
在這個文件里面找到這樣一行代碼:$dsql->SetQuery("SELECT * FROM $tablename $ifcase $sort LIMIT 0,$row");
注釋掉(或刪除掉)
然后,加上下面這行代碼:
$dsql->SetQuery("SELECT arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule, tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath FROM `$tablename` arc LEFT JOIN `dede_arctype` tp on arc.typeid=tp.id $ifcase $sort LIMIT 0,$row"); |
然后,
在代碼:
while($row = $dsql->GetArray())
{
里面加上下面這行代碼:
$row['arcurl'] = GetFileUrl($row['id'],$row['typeid'],$row['senddate'],$row['title'],$row['ismake'], $row['arcrank'],$row['namerule'],$row['typedir'],$row['money'],$row['filename'],$row['moresite'],$row['siteurl'],$row['sitepath']);
保存!
現在再來使用用標簽:
{dede:loop table='dede_archives' orderway='asc' row='1' if='shorttitle=1'}
<h1><a href='[field:arcurl/]'>[field:title/]</a></h1>
{/dede:loop}
結果是:
<h1><a href='www.dede58.com/php/1.html' >織夢教程網</a></h1>
已經變成靜態的了。
如果您想使用{dede:sql}標簽里面的[field:arcurl/]也變成靜態的,處理方法完全一樣,這里不再重復。