言語切替で対応言語の個別ページが存在しない場合はその言語のトップページへ飛ぶハック

提供: GeeklogJpWiki


目次

開発の背景

言語切替しても該当言語のページがない

次のような言語切替メニューを設置していて日本語ページからENGLISHを押しても英語のメニューとフッターしかない内容の無いページが表示される。あるいは「No Hits」だけのレイアウトがくずれたページが表示される。

    <a href="/switchlang.php/ja">日本語</a> | <a href="/switchlang.php/en">ENGLISH</a>

ハック概要

このような日本語のページ(sample_ja)はあるが英語のページ(sample_en)がない場合に「日本語|English」のリンクをクリックした場合に英語のトップページを表示するハックです。

  • 対応言語のデータが有るかないかのチェックは静的ページプラグインとDataBoxプラグインに対応しています。
  • 現在のバージョンでは記事やアーカイブ等は未検証となっております。

多言語サイト用対応言語のページがないときにトップページに飛ぶハック

<public_html>/switchlang.php

46行目「global $_CONF;」の下に次のコードを追加します。

// 2015/08 add hiroron
    global $_PLUGINS,$_TABLES;


89行目から始まる次のコード

                    if (substr($p[$i + 1], -($lang_len + 1)) == '_' . $oldlang) {
                        $p[$i + 1] = substr_replace($p[$i + 1], $newlang,
                                                    -$lang_len);
                        $changed = true;
                    }

この下に次のコードを追加します。

                    // 2015/08 add hiroron
                    if ($changed) {
                        $chkplgin = 'core';
                        $chkid = $p[$i + 1];
                        if (isset($p[$i - 1])) {
                            $chkplgin = $p[$i - 1];
                        }
                        if ($chkplgin == 'databox') {
                            if (in_array("databox", $_PLUGINS)){
                                $chkval = DB_getItem($_TABLES['DATABOX_base'],'id',"code='{$chkid}'");
                                if( empty($chkval) ) {
                                    return '';
                                }
                            }
                        } elseif ($chkplgin == 'staticpages') {
                            if (in_array("staticpages", $_PLUGINS)){
                                $chkval = DB_getItem($_TABLES['staticpage'],'sp_id',"sp_id='$chkid'");
                                if( empty($chkval) ) {
                                    return '';
                                }
                            }
                        }
                    }


多言語サイトの運用にはあわせて多言語サイトでURLが_ja(日本語コンテンツ)なのに英語メニューが表示されたりしないようURLベースでメニューを固定するハックもおすすめいたします。

個人用ツール