Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

@リプライ(@mentions)を日本語に対応させる #5

Closed
yu-tang opened this issue Apr 28, 2011 · 1 comment
Closed

@リプライ(@mentions)を日本語に対応させる #5

yu-tang opened this issue Apr 28, 2011 · 1 comment
Assignees

Comments

@yu-tang
Copy link
Owner

yu-tang commented Apr 28, 2011

コメント中に @UserName と記述することによって、プロフィールへの自動リンクが張られる機能を指す。

「ユーザー名に日本語を許容する」課題(#4)に関連した課題。

現状

ASCII ユーザー名にしか対応していない。
日本語ユーザー名には、リンクが張られない。

拡張

日本語ユーザー名にもリンクが張られるように拡張する。

実装方法

リンク元の処理

/library/core/class.format.php

public static function Mentions($Mixed) {
   if (!is_string($Mixed)) {
      return self::To($Mixed, 'Mentions');
   } else {         
      // Handle @mentions.
      if(C('Garden.Format.Mentions')) {
         $Mixed = preg_replace(
            '/(^|[\s,\.>])@(\w{1,50})\b/i', //{3,20}
            '\1'.Anchor('@\2', '/profile/\\2'),
            $Mixed
         );
      }

上記の正規表現を変更する。
日本語ユーザー名の正規表現の条件は、 #4 を参照。

リンク先の処理

リンク元の処理を日本語ユーザー名に対応させても、そのままではジャンプ後に 404 エラーとなる。

/applications/dashboard/models/class.usermodel.php

public function GetByUsername($Username) {
   if ($Username == '')
      return FALSE;

   $this->UserQuery();
   $User = $this->SQL->Where('u.Name', $Username)->Get()->FirstRow();
   $this->SetCalculatedFields($User);
   return $User;
}

上記の Where() の実引数を変更する。

   $User = $this->SQL->Where('u.Name', urldecode($Username))->Get()->FirstRow();

これで、日本語ユーザー名でもプロフィールページが正常に表示されるようになる。

@リプライ ユーザー 一覧取得処理

モデルから呼び出されている。

/library/core/functions.general.php

if (!function_exists('GetMentions')) {
   function GetMentions($String) {
      $Mentions = array();

      // This one grabs mentions that start at the beginning of $String
      preg_match_all(
         '/(?:^|[\s,\.>])@(\w{3,20})\b/i',
         $String,
         $Matches
      );
      if (count($Matches) > 1) {
         $Result = array_unique($Matches[1]);
         return $Result;
      }
      return array();
   }
}

上記の正規表現を変更する。
日本語ユーザー名の正規表現の条件は、 #4 を参照。

これはコアハックではなく conf/bootstrap.before.php 内でオーバーライドできる。

その他留意事項

関連で、ハッシュタグサーチ (#検索語句 で検索リンクが張られる機能) も日本語対応する。
該当コードは Mentions() 内部。
課題は #6 を参照。

@ghost ghost assigned yu-tang Apr 28, 2011
@yu-tang
Copy link
Owner Author

yu-tang commented May 1, 2011

あれ。いま 2.0.17.9 でテストしたら、リンク先の処理を変更しなくても、404 エラーにならずにジャンプできるな。
昔はダメだったと思うんだけれど。どっかで処理が賢くなったのかな?
ハックしなくても大丈夫なら、余計なハックはしない方向で、とりあえずリンク先の処理は様子見にしよう。

@yu-tang yu-tang closed this as completed in 882f40b May 1, 2011
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant