ブログやホームページなどで必ず必要になってくる続きを読む機能を実装してみました。
index.php
<?php
//データベースに接続する
$dsn="mysql:dbname=test;host=localhost;charset=utf8";
$user="root";
$pass="root";
try{
$pdo=new PDO($dsn,$user,$pass);
}catch(Exception $e){
echo 'error' .$e->getMesseage;
die();
}
//エラーがあった場合に知らせてくれる
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
//DBからデータを取得するSQL文を発行する
$sql="SELECT * FROM post";
$stmt=$pdo->query($sql);
$post=$stmt->fetchAll();
?>
これで接続と取得が終わりました。
次に表示するviewの部分です。
index_view.php
<div class="post cf">
<h2><?php echo $post['title'] ?></h2>
<!-- mb_strimwidthは文字数を制限してくれます。第1引数で制限する文字列を指定します。第2引数で制限する文字列のスタート位置を指定します。第3引数では制限した後に表示するものを指定します。例えば・・・とか...とか続きを読むとかです。僕の場合は何も出力したくないので空欄にしてあります。第4引数で文字コードを指定してあります。 -->
<p><?php echo mb_strimwidth($post['content'],0,50,'',utf8); ?></p>
<!-- 続きを読むを内容の全文を表示するファイルのリンクにします。 -->
<a href="single.php?no=<?php echo $post['no'] ?>">続きを読む</a>
</div>
viewのこの部分だけで続きを読む機能が実装できます。
これで見事続きを読む機能が実装できました。
今回の重要な関数mb_strimwidth関数
mb_strimwidthは、文字列を第2引数で指定した文字数にを加工してくれる関数。
素朴な疑問
SQL文で文字数を制限してデータを取得できないものかな?
できればリンクの1文ですむんだけど・・・
追記
SELECTで直接文字数を指定して持ってくる。
コメントを参考にさせていただいたのとやっと理解することができました。
select.sql
--これでphpでmb_strimwidthなんてものを使わなくてよくなった。asで名前を指定しておかないとLEFT()までがコンテンツ名になってしまうので指定しておこう。
SELECT * , LEFT(content,50) as con FROM post;