ホームページ > CMS チュートリアル > DEDECMS > Dreamweaver dedecms がアルファベット順のインデックス検索機能を実装

Dreamweaver dedecms がアルファベット順のインデックス検索機能を実装

(*-*)浩
リリース: 2019-12-27 14:43:21
オリジナル
2327 人が閲覧しました

Dreamweaver dedecms がアルファベット順のインデックス検索機能を実装

DEDE システムには「アルファベットインデックス」機能があります

実装方法は次のとおりです

ステップ 1: まず、データベース構造を変更し、ピンインを保存するフィールドを追加する必要があります。 (推奨される学習: (CMS )

DEDE_ARCHIVES テーブルを変更し、pytital、Varchar (250) を追加し、空にすることを許可します。以下はテーブルを作成するSQLです(参考まで) 赤い部分が新規部分で、phpmyadminでテーブル構造を直接変更することで実装できます。

CREATE TABLE `dede_archives` (
`ID` int(11) unsigned NOT NULL auto_increment,
`typeid` int(11) unsigned NOT NULL default ‘0′,
`typeid2` int(11) unsigned NOT NULL default ‘0′,
`sortrank` int(11) NOT NULL default ‘0′,
`iscommend` smallint(6) NOT NULL default ‘0′,
`ismake` smallint(6) NOT NULL default ‘0′,
`channel` int(11) NOT NULL default ‘1′,
`arcrank` smallint(6) NOT NULL default ‘0′,
`click` int(11) unsigned NOT NULL default ‘0′,
`money` smallint(6) NOT NULL default ‘0′,
`title` varchar(80) NOT NULL default ”,
`shorttitle` varchar(36) NOT NULL default ”,
`color` varchar(10) NOT NULL default ”,
`writer` varchar(30) NOT NULL default ”,
`source` varchar(50) NOT NULL default ”,
`litpic` varchar(100) NOT NULL default ”,
`pubdate` int(11) NOT NULL default ‘0′,
`senddate` int(11) NOT NULL default ‘0′,
`arcatt` smallint(6) NOT NULL default ‘0′,
`adminID` int(11) NOT NULL default ‘0′,
`memberID` int(11) unsigned NOT NULL default ‘0′,
`description` varchar(250) NOT NULL default ”,
`keywords` varchar(60) NOT NULL default ”,
`templet` varchar(60) NOT NULL default ”,
`lastpost` int(11) NOT NULL default ‘0′,
`postnum` int(11) NOT NULL default ‘0′,
`redirecturl` varchar(150) NOT NULL default ”,
`mtype` int(11) NOT NULL default ‘0′,
`userip` varchar(20) NOT NULL default ”,
`locklikeid` smallint(6) NOT NULL default ‘0′,
`likeid` varchar(240) default ”,
`pytitle` varchar(250) default NULL,
PRIMARY KEY (`ID`),
KEY `click` (`click`),
KEY `senddate` (`senddate`),
KEY `typeid` (`typeid`),
KEY `arcrank` (`arcrank`),
KEY `sortrank` (`sortrank`),
KEY `pubdate` (`pubdate`),
KEY `litpic` (`litpic`),
KEY `typeid2` (`typeid2`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk;
ログイン後にコピー

ステップ 2: 記事タイトルのピンインの最初の文字を取得し、データベースに保存します。

変更する必要があるファイルは次のとおりです。

article_add.php、article_add_action.php、article_edit.php、article_eidt_action.php
ログイン後にコピー

は、それぞれ新しい記事の追加と記事の変更によって制御される 4 つのファイルです。

article_add.php を次のように変更します:

        <td> <input name=”iscommend” type=”checkbox” id=”iscommend” value=”11″>
        推荐
        <input name=”isbold” type=”checkbox” id=”isbold” value=”5″>
        加粗
        <input name=”isjump” type=”checkbox” id=”isjump” value=”1″ onClick=”ShowUrlTr()”>
        跳转网址
        <input name=”upinyin” type=”checkbox” id=”upinyin” value=”1″ checked=”checked”>保存拼音 </td>
ログイン後にコピー

ピンインを保存するオプションを追加します。

article_edit.php を次のように変更します:

        <td> <input name=”iscommend” type=”checkbox” id=”iscommend” value=”11″<?php if($arcRow["iscommend"]>10) echo ” checked”;?>>
        推荐
        <input name=”isbold” type=”checkbox” id=”isbold” value=”5″<?php if($arcRow["iscommend"]==5||$arcRow["iscommend"]==16) echo ” checked”;?>>
        加粗
          <input name=”isjump” onClick=”ShowUrlTrEdit()” type=”checkbox” id=”isjump” value=”1″<?php echo $arcRow["redirecturl"]==”" ? “” : ” checked”;?>>
        跳转网址
        <input name=”upinyin” type=”checkbox” id=”upinyin” value=”1″<?php if($arcRow["pytitle"]<>”") echo ” checked”;?>>
保存拼音 </td>
ログイン後にコピー

上記と同じ。

article_add_action.php を次のように変更します:

//获得标题的拼音码
if($upinyin==1) $pytitle = str_replace(“_”,”",GetPinyin($title,1));
//加入数据库的SQL语句
//———————————-
$inQuery = “INSERT INTO dede_archives(
typeid,typeid2,sortrank,iscommend,ismake,channel,
arcrank,click,money,title,shorttitle,color,writer,source,litpic,
pubdate,senddate,arcatt,adminID,memberID,description,keywords,templet,redirecturl,pytitle)
VALUES (‘$typeid’,&#39;$typeid2′,’$sortrank’,&#39;$iscommend’,&#39;$ismake’,&#39;$channelid’,
‘$arcrank’,&#39;0′,’$money’,&#39;$title’,&#39;$shorttitle’,&#39;$color’,&#39;$writer’,&#39;$source’,&#39;$litpic’,
‘$pubdate’,&#39;$senddate’,&#39;$arcatt’,&#39;$adminID’,&#39;0′,’$description’,&#39;$keywords’,&#39;$templet’,&#39;$redirecturl’,‘$pytitle’);”;
ログイン後にコピー

システム関数 GetPingyin を通じて記事タイトルのピンイン イニシャルを取得し、挿入ステートメントを生成し、そのピンイン イニシャルを保存します。タイトルを pytitle フィールドに追加します。

同様に、article_eidt_action.php を次のように変更します。

//用拼音命名
if($upinyin==1) $pytitle = str_replace(“_”,”",GetPinyin($title,1));
//更新数据库的SQL语句
//———————————-
$inQuery = ”
update dede_archives set
typeid=’$typeid’,
typeid2=’$typeid2′,
sortrank=’$sortrank’,
redirecturl=’$redirecturl’,
iscommend=’$iscommend’,
ismake=’$ismake’,
arcrank=’$arcrank’,
money=’$money’,
title=’$title’,
color=’$color’,
writer=’$writer’,
source=’$source’,
litpic=’$litpic’,
pubdate=’$pubdate’,
description=’$description’,
keywords=’$keywords’,
templet=’$templet’,
shorttitle=’$shorttitle’,
arcatt=’$arcatt’,
pytitle=’$pytitle’
where ID=’$ID’; “;
ログイン後にコピー

3 番目のステップは、ホームページ テンプレート、またはこの関数を使用する必要がある他のテンプレートを変更することです。

<div>中文按声母排列:<a href=”/plus/search.php?keyword=a&searchtype=pytitle”>A</a> – <a href=”/plus/search.php?keyword=b&searchtype=pytitle”>B</a> – <a href=”/plus/search.php?keyword=c&searchtype=pytitle”>C</a> – <a href=”/plus/search.php?keyword=d&searchtype=pytitle”>D</a> – <a href=”/plus/search.php?keyword=e&searchtype=pytitle”>E</a> – <a href=”/plus/search.php?keyword=f&searchtype=pytitle”>F</a> – <a href=”/plus/search.php?keyword=g&searchtype=pytitle”>G</a> – <a href=”/plus/search.php?keyword=h&searchtype=pytitle”>H</a> – <a href=”/plus/search.php?keyword=j&searchtype=pytitle”>J</a> – <a href=”/plus/search.php?keyword=k&searchtype=pytitle”>K</a> – <a href=”/plus/search.php?keyword=l&searchtype=pytitle”>L</a> – <a href=”/plus/search.php?keyword=m&searchtype=pytitle”>M</a> – <a href=”/plus/search.php?keyword=n&searchtype=pytitle”>N</a> – <a href=”/plus/search.php?keyword=o&searchtype=pytitle”>O</a> – <a href=”/plus/search.php?keyword=p&searchtype=pytitle”>P</a> – <a href=”/plus/search.php?keyword=q&searchtype=pytitle”>Q</a> – <a href=”/plus/search.php?keyword=r&searchtype=pytitle”>R</a> – <a href=”/plus/search.php?keyword=s&searchtype=pytitle”>S</a> – <a href=”/plus/search.php?keyword=t&searchtype=pytitle”>T</a> – <a href=”/plus/search.php?keyword=w&searchtype=pytitle”>W</a> – <a href=”/plus/search.php?keyword=x&searchtype=pytitle”>X</a> – <a href=”/plus/search.php?keyword=y&searchtype=pytitle”>Y</a> – <a href=”/plus/search.php?keyword=z&searchtype=pytitle”>Z</a> <- 中文软件名按第一汉字声母排列</div>
ログイン後にコピー

重要な部分はkeyword=letter&searchtype=pytitleです。

4 番目のステップは、search.php による検索を実装することです。dedecms では 3 文字未満の検索が許可されていないため、変更する必要があります。

/plus/search.php ファイルを変更します。変更部分は赤色です:

//判断是否为声母搜索
if($searchtype<>”pytitle”){
if($keyword==”"||strlen($keyword)<3){
ShowMsg(“关键字不能小于3个字节!”,”-1″);
exit();
}
}
ログイン後にコピー

5 番目のステップは、検索を変更して実装することです。

/include/inc_arcsearch_view.php を変更します。目標:

文字キーワードを取得し、新しい検索条件を生成し、検索タイプのキーワード ($searchtype) を取得し、さまざまな表示テンプレートを呼び出します。

それでは、次のように変更を続けてみましょう。赤い部分が新規または変更された部分です。

関数 GetKeywordSql() 関数を変更して次を追加します:

//声母搜索支持
if($this->SearchType==”pytitle”){
  $kwsql .= ” And dede_archives.pytitle like ‘$this->Keywords%’ “;
}
ログイン後にコピー

これを foreach($ks as $k) の下に配置することをお勧めします{…}

ステップ 6、上記により、アルファベット順のインデックス付けが実装されましたが、システムの検索テンプレートが呼び出されます。これはアルファベット順のインデックス付けの特性に適していないため、さらに一歩進んで、新しいテンプレートのサポートを追加します。

1. /include/inc_arcsearch_view.php を変更し、関数 __construct() コンストラクターを変更します。対象:

if($this->SearchType==”pytitle”) $tempfile = $GLOBALS[&#39;cfg_basedir&#39;].$GLOBALS[&#39;cfg_templets_dir&#39;].”/”.$GLOBALS[&#39;cfg_df_style&#39;].”/”.$GLOBALS[&#39;cfg_templets_pysearch&#39;];
  else $tempfile = $GLOBALS[&#39;cfg_basedir&#39;].$GLOBALS[&#39;cfg_templets_dir&#39;].”/”.$GLOBALS[&#39;cfg_df_style&#39;].”/search.htm”;
ログイン後にコピー

目標は、$searchtype==pytitle がいつグローバル変数 cfg_templets_pysearch で定義されたテンプレートを呼び出すかを判断することです。

2. include/config_hand.php ファイルを変更します。グローバル変数 cfg_templets_pysearch を追加します。

//拼音搜索模板
$cfg_templets_pysearch = ‘pylist.htm’;
ログイン後にコピー

次に、テンプレート フォルダーに pylist.htm テンプレートを追加して、アルファベット順のリストの結果を表示できます。

ステップ 7、問題はまだ終わっていません。表示範囲を制限したい場合はどうすればよいですか?たとえば、ソフトウェアや特定のコラムだけを表示して、さらに一歩進めたいとします。

実際、検索では、$typeid (列番号)、$channeltype (記事タイプ番号)、$orderby (並べ替え方法) など、多くのパラメーターがサポートされています。これで、何をすればよいかわかりましたね。

まだわかりませんが、例を示します:

<a href=”/plus/search.php?keyword=a&searchtype=pytitle&typeid=2&$channeltype=3&$orderby=title”>A</a>
ログイン後にコピー

以上がDreamweaver dedecms がアルファベット順のインデックス検索機能を実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート