タグ: PHP

  • PEARのインストールではまった→どうにか解決(mac with MAMP編)

    昨晩PEARをインストールしようとしてはまってしまって、どうにか解決したのでその内容をエントリー。

    いったいどこにPEARインストールしたの!?

    ひとまずターミナルから「pear」と打ち込んでみる。
    するとpearのコマンド一覧が出てきました。
    これは楽勝じゃんと「pear install PEAR」と打ち込んでPEARをインストール。
    その他諸々もインストール。
    この後「pear list」でインストールされているか確認。

    [shell]
    Installed packages, channel pear.php.net:
    =========================================
    Package Version State
    Archive_Tar 1.3.7 stable
    Console_Getopt 1.2.3 stable
    PEAR 1.9.1 stable
    Structures_Graph 1.0.4 stable
    XML_Util 1.2.1 stable
    [/shell]

    この時点では「OK, OK.」と思っていましたがこの後大きな間違いに気付く。

    Finderで確かめてみる

    ない!インストールしたはずのPEARとその他諸々がインストールしたと思っていた場所にありませんでした。

    これまでMAMPのPEARをインストールしていると思っていたのですが、実は今までの作業はMACにデフォルトで入っているPEARをインストールしていたのです。

    結論から言うと

    ターミナルでのコマンドを間違えていました。
    MAMPにPEARをインストールするにはインストール先のフォルダを指定しないと駄目なんですね。

    [shell]
    cd /Applications/MAMP/bin/php5.3/bin
    ./pear
    ./pear install PEAR
    ./pear list
    [/shell]

    1行目ではMAMPのPEARをインストールするディレクトリへ移動しています。
    2行目はpearのコマンド一覧の表示。
    3行目でPEARのインストール。
    4行目で確認。

    といきたいところですが、ここでまたしてもトラブル発生。

    [shell]
    pear: command not found
    php: Permission denied
    [/shell]

    というようなエラーが出ました。
    pearとphpの権限を変更する必要があるみたいなので

    [shell]
    sudo chmod 774 /Applications/MAMP/bin/php5.3/bin/pear
    sudo chmod 774 /Applications/MAMP/bin/php5.3/bin/php
    [/shell]

    を実行して「pear」と「php」のパーミッションを変更。
    ようやくPEARのインストールができました。

    以上が昨晩から今朝にかけての流れです。
    とりあえずインストールできたは良いものの、「PEAR使わないかも!?」という疑惑が発生しています。

  • WordPressでエントリーごとにkeywordsとdescriptionを自動で設置する方法

    WordPressのデフォルトテーマにはMETAタグの「keywords」と「description」 が設置されていないので、エントリーごとにdescriptionとkeywordsを自動で設置する方法を紹介します。

    概要

    • エントリーページの「keywords」には、そのエントリーが属するカテゴリーを入れる。
    • エントリーにタグが付けられていた場合「keywords」にタグも入れる。
    • エントリーページ以外の「keywords」には、デフォルトのキーワードを入れておく。
    • エントリーページの「description」には、抜粋に自分で作成した要約がある場合はそれを入れる。
    • 抜粋に何もない場合「description」には、エントリーの始めから60文字分を入れる。
    • エントリーページ以外の「description」には、一般設定のキャッチフレーズ(このサイトの簡単な説明)を入れる。

    設置方法

    以下のコートをheader.phpに追加します。

    [php]


    (さらに…)

  • MagpieRSSで外部RSSを表示

    ブログは外部のブログサービスを使っているんだけど自分のサイトにブログの更新情報を表示させたい。

    そんな時に使えるのが『MagpieRSS』です。

    MagpieRSSは外部のRSS Feedを取得して解析、そしてキャッシュまでしてくれるPHPで使えるRSSパーサーです。RSS0.9とRSS1.0、RSS 1.0のモジュールとRSS 2.0、Atomの一部に対応しています。

    MagpieRSSの使い方

    例えばindex.phpにブログの更新情報を表示させる場合。

    1. MagpieRSS(magpierss-0.72.tar.gz)をダウンロードして解凍。
    2. rss_cache.inc、rss_fetch.inc、rss_parse.inc、rss_utils.incの4つのファイルとextlibフォルダをindex.phpと同じディレクトリにアップロード。
    3. index.phpのディレクトリの下にcacheという名前でディレクトリを作成パーミッションを777に変更。
    4. index.phpのブログの更新情報を表示したい位置に以下のコードを記入します。

    [php]
    <?php
    error_reporting(E_ERROR); //エラーレポートを表示しない
    require_once ‘magpie/rss_fetch.inc’;
    $url = ‘RSSFeedのURL’; //RSS FeedのURL
    if($rss = fetch_rss($url)){ /RSS Feedがなければ終了
    $title = $rss->channel[‘title’];
    $title = mb_convert_encoding($title, "UTF-8", "auto");
    echo "<h4>$title</h4>\n";
    $rss->items = array_slice($rss->items, 0, 5); //RSS Feedの表示件数
    echo "<ul>";
    foreach ($rss->items as $item ) {
    $title = $item[title];
    $title = mb_convert_encoding($title, "’UTF-8", "auto");
    $url = $item[link];
    echo "<li>$title</li>\n";
    $description = $item[description];
    $description = mb_convert_encoding($description, "’UTF-8", "auto");
    echo "<li>$description</li>\n";
    };
    echo "</ul>";
    }
    ?>
    [/php]

    解説

    [php firstline=”4″]
    $url = ‘RSSFeedのURL’;
    [/php]
    ここに表示させたいRSS FeedのURLを記入してください。

    [php firstline=”9″]
    $rss->items = array_slice($rss->items, 0, 5);
    [/php]
    この場合だと最新から0件目までは非表示、その後の5件を表示します。

    MagpieRSSの文字化け対策

    一部のRSSが激しく文字化けすることがあるのでrss_fetch.incの358行目をISO-8859-1からUTF-8に変更します。

    本文が全部表示されるんですけど

    RSS Feedでエントリー内容を全文表示にしている場合、「$description」だと全文表示されてしまいます。

    「いやいや、エントリーの最初の何文字かだけでいいんだよ。」と仰る方は以下のコードを試してみてください。

    [php]
    <?php
    error_reporting(E_ERROR); //エラーレポートを表示しない
    require_once ‘magpie/rss_fetch.inc’;
    $url = ‘RSSFeedのURL’; //RSS FeedのURL
    if($rss = fetch_rss($url)){ /RSS Feedがなければ終了
    $title = $rss->channel[‘title’];
    $title = mb_convert_encoding($title, "UTF-8", "auto");
    echo "<h4>$title</h4>\n";
    $rss->items = array_slice($rss->items, 0, 5); //RSS Feedの表示件数
    echo "<ul>";
    foreach ($rss->items as $item ) {
    $title = $item[title];
    $title = mb_convert_encoding($title, "’UTF-8", "auto");
    $url = $item[link];
    echo "<li>$title</li>\n";
    $description = $item[description];
    $description = mb_convert_encoding($description, "’UTF-8", "auto");
    $description = strip_tags($description);
    $description = ereg_replace("(\r\n|\r|\n)", "", $description);
    $description = mb_substr($description, 0, 100). "…"; ?>
    echo "<li>$description</li>\n";
    };
    echo "</ul>";
    }
    ?>
    [/php]

    解説

    [php]
    $description = strip_tags($description);
    [/php]
    HTMLタグを取り除いています。

    [php]
    $description = ereg_replace("(\r\n|\r|\n)", "", $description);
    [/php]
    改行を取り除いています。

    [php]
    $description = mb_substr($description, 0, 100). "…"; ?>
    [/php]
    この場合だと、文字列「$description」の最初から100文字目までを最後に「…」を付けて表示します。

    PRとかADとかも表示されるんですけど…

    外部のブログサービスのRSS Feedを読み込むとPRとかADとか広告も一緒に表示されてしまったりします。Amebaブログとか。
    「そんなのはいらん!」と仰る方は以下のコードを試してみてください。

    [php]
    <?php
    error_reporting(E_ERROR); //エラーレポートを表示しない
    require_once ‘magpie/rss_fetch.inc’;
    define(‘MAGPIE_OUTPUT_ENCODING’, ‘UTF-8’);
    $url = ‘RSS FeedのURL’; //RSS FeedのURL
    if($rss = fetch_rss($url)){ //RSS Feedがなければ終了
    $title = $rss->channel[‘title’];
    echo "<h2>$title</h2>\n";
    $rss->items = array_slice($rss->items, 0, 6); //RSS Feedの表示件数
    echo "<ul>\n";
    foreach ($rss->items as $item ) {
    $title = $item[title];
    $date = Date("Y.m.d",$item[date_timestamp]);
    $url = $item[link];
    if (strstr($item[link],"表示したいブログのURL") == false) { //特定のURL以外は表示しない
    echo "";
    }
    else {
    echo "<li>$date <a href=\"$url\">$title</a></li>\n";
    }
    };
    echo "</ul>";
    }
    ?>
    [/php]

    解説

    [php firstline=”9″]
    $rss->items = array_slice($rss->items, 0, 6);
    [/php]
    Amebaブログ場合だと5件に1件の割合で広告が入ってくるので5件表示させたい場合は6件分表示させときます。

    [php firstline=”15″]
    if (strstr($item[link],"表示したいブログのURL") == false) {
    [/php]
    ここに記入したURLのRSS Feedだけを表示します。

    関連サイト

  • WP-PageNaviを使わずナビゲーション表示

    WordPressの通常のページナビゲーションは「« Previous Page Next Page » 」と表示されるだけで、今見ているページがエントリー全体の何ページ目で、あとどのくらいのエントリーがあるのかが直感的に把握できません。
    そこで、ユーザビリティ・アクセシビリティの向上という点で人気のあるのが『WP-PageNavi』というプラグインです。

    Example:

    Pages (17): [1] 2 3 4 » ... Last »

    今回はプラグインを使わずに直感的にわかりやすいページナビゲーションを表示させる方法です。

    WP-PageNavi を使わずにナビゲーション表示

    PageNaviの表示方法

    下記のコードを使用中のテーマ内のfunctions.phpに書き加えます。

    [php]
    <?php
    function bmPageNav() {
    global $wp_rewrite;
    global $wp_query;
    global $paged;

    $paginate_base = get_pagenum_link(1);

    if(($wp_query->max_num_pages) > 1):
    if (strpos($paginate_base, ‘?’) || ! $wp_rewrite->using_permalinks()) {
    $paginate_format = ”;
    $paginate_base = add_query_arg(‘paged’, ‘%#%’);
    } else {
    $paginate_format = (substr($paginate_base, -1 ,1) == ‘/’ ? ” : ‘/’) .
    user_trailingslashit(‘page/%#%/’, ‘paged’);;
    $paginate_base .= ‘%_%’;
    }
    $result = paginate_links( array(
    ‘base’ => $paginate_base,
    ‘format’ => $paginate_format,
    ‘total’ => $wp_query->max_num_pages,
    ‘mid_size’ => 5,
    ‘current’ => ($paged ? $paged : 1),
    ));
    echo ‘<p class="pageNav">’."\n".$result."\n</p>\n";
    endif;
    }
    ?>
    [/php]

    下記のコードをページナビゲーションを表示させたいテンプレートに書いて呼び出します。

    [php]
    <?php bmPageNav(); ?>
    [/php]

    以下は、CSSでのスタイリング例。

    [css]
    .pageNav {
    color: #2583ad;
    background:white;
    margin: 1em auto;
    line-height:2em;
    text-align:center;
    }

    a.page-numbers, .pageNav .current {
    color: #00019b;
    padding: 2px .4em;
    border:solid 1px #ccc;
    text-decoration:none;
    font-size:smaller;
    }

    a.page-numbers:hover {
    color:white;
    background: #328ab2;
    }

    .pageNav .current {
    color: white;
    background: #328ab2;
    border-color: #328ab2;
    font-weight:bold:
    }

    .pageNav .next, .pageNav .prev {
    border:0 none;
    background:transparent;
    text-decoration:underline;
    font-size:smaller;
    font-weight:bold;
    }
    [/css]

    プラグインを必要最小限にしたい方にオススメです。

  • WordPressにプラグインなしでパンくずリストを表示させる方法

    サイト訪問者がサイト内での現在位置を直感的に把握するのに便利なパンくずリスト。
    ユーザビリティ・アクセシビリティの向上という点においてパンくずリストを表示させることはスタンダードな要素になります。
    Wordpress の場合、『Breadcrumb NavXT』というプラグインを使って表示させることが可能ですが、今回はプラグインを使わずに表示させる方法です。

    Example:

    Demo » Parent Category I » Child Category II » A Post With Everything in it

    パンくずリストの表示方法

    下記のコードを使用中のテーマ内のfunctions.phpに書き加えます。

    [php]
    <?php
    function get_breadcrumbs(){
    global $wp_query;

    if ( !is_home() ){

    // Start the UL
    echo ‘<ul>’;
    // Add the Home link
    echo ‘<li><a href="’. get_settings(‘home’) .’">’. get_bloginfo(‘name’) .'</a></li>’;

    if ( is_category() )
    {
    $catTitle = single_cat_title( "", false );
    $cat = get_cat_ID( $catTitle );
    echo "<li> &raquo; ". get_category_parents( $cat, TRUE, " &raquo; " ) ."</li>";
    }
    elseif ( is_archive() && !is_category() )
    {
    echo "<li> &raquo; Archives</li>";
    }
    elseif ( is_search() ) {

    echo "<li> &raquo; Search Results</li>";
    }
    elseif ( is_404() )
    {
    echo "<li> &raquo; 404 Not Found</li>";
    }
    elseif ( is_single() )
    {
    $category = get_the_category();
    $category_id = get_cat_ID( $category[0]->cat_name );

    echo ‘<li> &raquo; ‘. get_category_parents( $category_id, TRUE, " &raquo; " );
    echo the_title(”,”, FALSE) ."</li>";
    }
    elseif ( is_page() )
    {
    $post = $wp_query->get_queried_object();

    if ( $post->post_parent == 0 ){

    echo "<li> &raquo; ".the_title(”,”, FALSE)."</li>";

    } else {
    $title = the_title(”,”, FALSE);
    $ancestors = array_reverse( get_post_ancestors( $post->ID ) );
    array_push($ancestors, $post->ID);

    foreach ( $ancestors as $ancestor ){
    if( $ancestor != end($ancestors) ){
    echo ‘<li> &raquo; <a href="’. get_permalink($ancestor) .’">’. strip_tags( apply_filters( ‘single_post_title’, get_the_title( $ancestor ) ) ) .'</a></li>’;
    } else {
    echo ‘<li> &raquo; ‘. strip_tags( apply_filters( ‘single_post_title’, get_the_title( $ancestor ) ) ) .'</li>’;
    }
    }
    }
    }

    // End the UL
    echo "</ul>";
    }
    }
    ?>
    [/php]

    下記のコードをパンくずリストを表示させたいテンプレートに書いて呼び出します。

    [php]
    <?php get_breadcrumbs(); ?>
    [/php]

    CSSでのスタイリングもしてありますので、デザインのカスタマイズも出来ます。

    [css]
    ul.breadcrumbs {
    list-style: none;
    padding: 0;
    margin: 0;
    font-size:12px;
    }
    ul.breadcrumbs li {
    float: left;
    margin: 0 5px 0 0;
    padding: 0;
    }
    [/css]