راکت

نحوه تگ کردن یک اسم در یک متن مثل اینستا

5 پاسخ

سلام دوستان
من چطور میتونم مثلا اسم کاربری رو تگ کنم به نحوی که بعد تگ مثل همین سایت راکت یا اینستاگرام که اسم تگ شده مثل لینک عمل کنه اونم داخل یه text
ممنون میشم راهنمایی کنید

arazsalmasi
arazsalmasi
@araz2salmasi
ثبت پرسش جدید

پاسخ‌ها

5
حسام موسوی
حسام موسوی
@hesammousavi

تخصص: طراح و برنامه نویس

اول باید username برای کاربراتون تعریف کنید بعدم
دو بخش داره
یک frontend
و دو backend
فرانت اند بخاطر اینکه بعد از @ بتونید username مورد نظر کاربرتون رو وارد کنید
و بک اند بخاطر اینکه بتونید زمانی که مثلا @hesammousavi رو به سمت سرور میفرستید بتونه کاربر رو شناسایی کنه و براش نوتیفیکیشن ارسال کنه

arazsalmasi
arazsalmasi
@araz2salmasi

خیلی ممنون
کاربراس من یوزر نیم دارن و یونیک هم هست
منظور من اینه مثلا تو یه تکس مثل همین پاسخ که کلی جمله و کلمه هست و باید
چه مدل جستجویی بنویسم که بین کلی رشته و متن @hesammousavi رو پیدا کنه و حتی اونو توی فرانت اند مثل لینک نشون بده
@hesammousavi

شاید پاسخ شما همین‌جا باشد

امیر اردکانی
امیر اردکانی
@AmirArdakani

تخصص: طراح و برنامه نویس وب

سلام
@araz2salmasi
شما میتونی از Regex استفاده کنی , نمونه کد رو براتون میذارم :

    /**
     * Filter the mention usernames.
     * 
     * @return array
     */
    public function getMentionedUsername()
    {
        preg_match_all("/(\S*)\@([^\r\n\s]*)/i", $this->content, $atlist_tmp);

        $usernames = [];

        foreach ($atlist_tmp[2] as $k=>$v) {
            if ($atlist_tmp[1][$k] || strlen($v) >25) {
                continue;
            }
            $usernames[] = $v;
        }
        return array_unique($usernames);
    }

    /**
     * Replace the `@{user}` by the user link
     */
    public function replace()
    {
        $this->content_parsed = $this->content;

        foreach ($this->users as $user) {
            $search = '@' . $user->name;

            $place = '[' . $search . '](' . url('user', $user->name) . ')';

            $this->content_parsed = str_replace($search, $place, $this->content_parsed);
        }
    }

    /**
     * Parse the `@` mention user in content.
     * 
     * @param  string $content
     * @return string
     */
    public function parse($content)
    {
        $this->content = $content;

        $this->usernames = $this->getMentionedUsername();

        count($this->usernames) > 0 && $this->users = User::whereIn('name', $this->usernames)->get();

        $this->replace();

        return $this->content_parsed;
    }
arazsalmasi
arazsalmasi
@araz2salmasi

@AmirArdakani
خیلی ممنون
دوست عزی منظور منه اینه مثلا در این متن :

فرانت اند بخاطر اینکه بعد از @ بتونید username مورد نظر کاربرتون رو وارد کنید
و بک اند بخاطر اینکه بتونید زمانی که مثلا @hesammousavi رو به سمت سرور میفرستید بتونه کاربر رو شناسایی کنه و براش نوتیفیکیشن ارسال کنه

چطور جستجویی بنویسم که هم متن رو بیاره و هم وقتی اسم کاربری تگ میشه بفهمه این اسم کاربر هست
والا با کد های بالا متوجه نشدم

arazsalmasi
arazsalmasi
@araz2salmasi

خیلی ممنون از دوستان
من راهشو پیدا کردم ولی این روش فقط رو string انگلیسی جواب میده و روی فارسی اصلا جواب نمیده
و این ارور رو میده :Undefined variable: keywords
و اینم کد هاش

function beliefmedia_hashtags($string) {

 /* Match hashtags */
 preg_match_all('/#(\w+)/', $string, $matches);

  /* Add all matches to array */
  foreach ($matches[1] as $match) {
    $keywords[] = $match;
  }

 return (array) $keywords;
}

/* Usage */
$string = "The quick brown #fox jumped over the lazy #fat#dog";
echo 'pre' . print_r(beliefmedia_hashtags($string), true) . '/pre';

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام