2021/05/10 14:13 JST

Geeklog Japan Forums

一般登録者(管理者以外)が記事投稿するときに,記事IDを付けられない

ページナビゲーション


状態: オフライン

yn

Forum User
Chatty
登録日: 2011/02/23
投稿数: 37
再び,行き詰まりました。どうぞ,お助けください。 多言語環境で「記事」投稿を色々と試しているところです。 Admin 等の管理者ではない「一般の登録者」が記事投稿 をしようとしても,インタフェースには「記事ID」を 記す箇所が現れません。 結果として,不具合が生じます。例えば,「検索」を かけたときに「確かに存在している文言」なのにヒット してくれません。 宜しくお願いいたします。

状態: オフライン

mystral-kk

Site Admin
管理者
登録日: 2006/03/23
投稿数: 1022
場所:福岡県

たぶん、検索の機能のバグだと思うのですが、以下の対策で検索可能になるか試してみてください。非公開領域/system/classes/search.class.phpの337行目の

PHP Formatted Code


        $sql .= COM_getPermSQL('AND') . COM_getTopicSQL('AND') . COM_getLangSQL('sid', 'AND') . ' ';
 

PHP Formatted Code


        $sql .= COM_getPermSQL('AND') . COM_getTopicSQL('AND') . COM_getLangSQL('tid', 'AND') . ' ';
 

に、同じく370行目の

PHP Formatted Code


        $sql .= COM_getPermSQL('AND',0,2,'s').COM_getTopicSQL('AND',0,'s').COM_getLangSQL('sid','AND','s').') ';
 

PHP Formatted Code


        $sql .= COM_getPermSQL('AND',0,2,'s').COM_getTopicSQL('AND',0,'s').COM_getLangSQL('tid','AND','s').') ';
 

に変える。


-- mystral-kk, "Every cloud has a silver lining."

状態: オフライン

yn

Forum User
Chatty
登録日: 2011/02/23
投稿数: 37
mystral-kk 様, ご丁寧に教えてくださり,有難うございます。 ご教示通りの変更を施してみました。なるほど,確かに「日本語」環境では「検索」の際ヒットするようになります。 しかし,他にも,先に Ivy さんが教えてくださった(「多言語切り替えの際の「記事のトップページ表示」について」記事参照)ように, 「記事、静的ページの言語切り替え機能においては、言語IDなしで、共通コンテンツにするというしくみが残念ながらありません」 ということでしたので,検索以外に,たとえば「記事一覧」などの箇所でも不具合が出ます。つまり,記事IDのない一般投稿者による記事は「記事一覧に出現しない」のです。また,管理者が時限を区切って「自動アーカイブ」させた「日本語ID」記事(記事一覧に格納されるようです)も一般投稿者による検索の対象から外れます。 「投稿の際に、主言語の記事と、ローカルな言語の記事 この2つで投稿していただくように、サイト運営ルールを徹底していただくしかありません」 という Ivy さんのご助言を納得しましたので,管理者ではない一般投稿者の投稿の際にも「(言語別の)記事ID」を付けられるのが理想ですが,それがさしあたってはできない場合,何か別のアイディア等を頂戴できませんでしょうか。 8言語でのサイト運営が必要で,どうしても Geeklog を使いたいと思います。宜しくお願いいたします。

状態: オフライン

mystral-kk

Site Admin
管理者
登録日: 2006/03/23
投稿数: 1022
場所:福岡県
Quote by: yn (snip) という Ivy さんのご助言を納得しましたので,管理者ではない一般投稿者の投稿の際にも「(言語別の)記事ID」を付けられるのが理想ですが,それがさしあたってはできない場合,何か別のアイディア等を頂戴できませんでしょうか。

以下、自己責任でお試しください。非公開領域/system/classes/story.class.phpの1043行目を

PHP Formatted Code


                        "{$this->_sid},'{$this->_tid}',{$this->_uid},'{$this->_title}'," .
 

から

PHP Formatted Code


                        "'{$this->_sid}','{$this->_tid}',{$this->_uid},'{$this->_title}'," .
 

に変えます。次に、同じファイルの1036行目の

PHP Formatted Code


        $T = DB_fetchArray($result);
 

の前に

PHP Formatted Code


                // Appends the current user's language id automatically
                $lang_id = COM_getLanguageId();
                $len_id  = strlen($lang_id);
               
                if (($len_id > 0) AND (substr($this->_sid, - $len_id) != $lang_id)) {
                        $this->_sid .= '_' . $lang_id;
                        $len = strlen($this->_sid);
                       
                        if ($len > 20) {
                                $this->_sid = substr($this->_sid, 0, 8) . substr($this->_sid, -12);
                        }
                }
 

を追加します。これで一般ユーザーが投稿した記事IDの末尾に言語IDが自動的に付加されるようになります。Geelog本体を改造するので、バージョンするたびに同様の改造が必要になります。


-- mystral-kk, "Every cloud has a silver lining."

状態: オフライン

yn

Forum User
Chatty
登録日: 2011/02/23
投稿数: 37
mystral-kk 様, 有難うございます。おかげさまで,教えてくださった方法で望み通り になりました。 自分にはこのような改変をするスキルがありませんので,本当に感謝 しています。 虫が良すぎるかもしれませんが,「管理者」の記事投稿における ユーザーインターフェースでも同様に,「管理者の言語環境」に 対応して自動的に「言語ID」が付くようなカスタマイズを教えて くださいませんでしょうか? 無知を良いことに,とんでもない要求をしているようでしたら, どうぞお許しください。

状態: オフライン

mystral-kk

Site Admin
管理者
登録日: 2006/03/23
投稿数: 1022
場所:福岡県

同じく自己責任でお願いします。非公開領域/system/classes/story.class.phpの463行目付近にある

PHP Formatted Code

            $this->_sid = COM_makesid();
            $this->_old_sid = $this->_sid;
 

PHP Formatted Code

            $this->_sid = COM_makesid();
                       
            // Appends the current user's language id automatically
            $lang_id = COM_getLanguageId();
            $len_id  = strlen($lang_id);
                       
            if (($len_id > 0) AND (substr($this->_sid, - $len_id) != $lang_id)) {
                $this->_sid .= '_' . $lang_id;
                $len = strlen($this->_sid);
                       
                if ($len > 20) {
                    $this->_sid = substr($this->_sid, 0, 8) . substr($this->_sid, -12);
                }
            }
                       
            $this->_old_sid = $this->_sid;
 

に変更します。


-- mystral-kk, "Every cloud has a silver lining."

状態: オフライン

yn

Forum User
Chatty
登録日: 2011/02/23
投稿数: 37
mystral-kk 様, 何とお礼を申し上げればよいのでしょう! 素晴らしい!! お蔭さまで望み通りとなりました。有難うございます。

状態: オフライン

Ivy

Site Admin
管理者
登録日: 2004/01/01
投稿数: 5967
場所:Tokyo
一般ユーザが記事IDをつけられないのはGeeklogの一般的な仕様みたいですね。 記事IDを設定できるのは管理者だけ。 ユニークなIDをつけなければなりません。 IDを一般ユーザに付けてもらうことで一般ユーザの仕事量を増やして混乱させる ことにもなるので、つける場合は、当面ハック対応でよいかもしれませんね。 (本家へフィードバックしてコンフィギュレーションにモードを追加してもらうまでもない、という意味)

状態: オフライン

yn

Forum User
Chatty
登録日: 2011/02/23
投稿数: 37
Ivy 様, 有難うございます。ご返答に感謝いたします。 私が「こうなれば便利だな」と考えているのは,記事IDそのものというより,その「後」にぶらさがる「一意な言語識別子が自動的に付く」という機能です。 この点については,mystral-kk さんが見事に解決策を示してくださいましたが,こうした機能は,多言語環境でのユーザであれば,たとえ「管理者」であっても,当然「そもそも」欲しい機能ではないでしょうか? デフォルトでは,管理者が「わざわざ自分の使用言語を意識して,追加的(明示的)に言語識別子を付け」なくてはなりません。明らかに煩瑣です。間違いも起こり得るでしょう。(一般ユーザにはその「機会さえありません」でした。) しかし,一般ユーザの場合は(意識しなくとも)バックグラウンドで自動的に「言語識別子」が付与され,管理者であっても同じく目に見える形で自動的に言語識別子が付くような仕様となれば,その方がユーザフレンドリだと思うのですが。

状態: オフライン

Ivy

Site Admin
管理者
登録日: 2004/01/01
投稿数: 5967
場所:Tokyo
おっしゃるように、自動的につくと便利ですね。 とはいってもそれではまだ不十分かもしれません。 多言語の場合は、記事、静的ページ、話題 それぞれで、 言語のプルダウンが追加されて、ユーザは、接尾子を 意識しなくてもすむようになるのが理想的ですね。 投稿申請の場合も、少なくとも言語は、投稿者が選べれば よいと思います。

ページナビゲーション

時刻はすべて JST , 現在の時刻は 02:13 PM

  • 通常
  • 注目トピック
  • ロック済
  • 新着
  • 注目トピック 新着
  • ロック済トピック 新着
  •  ゲストユーザの投稿を見る
  •  投稿可能
  •  一部のHTMLを許可
  •  バッドワードをチェック