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

提供: Geeklog Japan
移動先: 案内検索
(ページの作成:「* Modified Date: 2015/10/28 * Author: ひろろん * Presented by: [http://e-adeliae.com/ Adeliae Planning Inc.] * 検証済み対応バージョン: Geeklog2.1 ==...」)
 
(ページの白紙化)
 
1行目: 1行目:
* Modified Date: 2015/10/28
 
* Author: [[ひろろん]]
 
* Presented by: [http://e-adeliae.com/ Adeliae Planning Inc.]
 
* 検証済み対応バージョン: Geeklog2.1
 
  
 
== 開発の背景 ==
 
 
=== 言語切替しても該当言語のページがない ===
 
 
次のような言語切替メニューを設置していて日本語ページからENGLISHを押しても英語のメニューとフッターしかない内容の無いページが表示される。あるいは「No Hits」だけのレイアウトがくずれたページが表示される。
 
 
<pre>
 
    <a href="/switchlang.php/ja">日本語</a> | <a href="/switchlang.php/en">ENGLISH</a>
 
</pre>
 
 
=== ハック概要 ===
 
 
このような日本語のページ(sample_ja)はあるが英語のページ(sample_en)がない場合に「日本語|English」のリンクをクリックした場合に英語のトップページを表示するハックです。
 
* 対応言語のデータが有るかないかのチェックは静的ページプラグインとDataBoxプラグインに対応しています。
 
* 現在のバージョンでは記事やアーカイブ等は未検証となっております。
 
 
== 多言語サイト用対応言語のページがないときにトップページに飛ぶハック ==
 
 
=== <public_html>/switchlang.php ===
 
 
46行目「global $_CONF;」の下に次のコードを追加します。
 
 
<pre>
 
// 2015/08 add hiroron
 
    global $_PLUGINS,$_TABLES;
 
</pre>
 
 
 
89行目から始まる次のコード
 
 
<pre>
 
                    if (substr($p[$i + 1], -($lang_len + 1)) == '_' . $oldlang) {
 
                        $p[$i + 1] = substr_replace($p[$i + 1], $newlang,
 
                                                    -$lang_len);
 
                        $changed = true;
 
                    }
 
</pre>
 
 
この下に次のコードを追加します。
 
 
<pre>
 
                    // 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 '';
 
                                }
 
                            }
 
                        }
 
                    }
 
</pre>
 
 
 
多言語サイトの運用にはあわせて[[多言語サイトでURLが_ja(日本語コンテンツ)なのに英語メニューが表示されたりしないようURLベースでメニューを固定するハック]]もおすすめいたします。
 

2020年7月1日 (水) 07:24時点における最新版