arazsalmasi
5 سال پیش توسط arazsalmasi مطرح شد
5 پاسخ

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

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


ثبت پرسش جدید
حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 5 سال پیش مطرح شد
0

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


arazsalmasi
@araz2salmasi 5 سال پیش آپدیت شد
0

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


امیر اردکانی
تخصص : طراح و برنامه نویس وب
@AmirArdakani 5 سال پیش مطرح شد
0

سلام
@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
@araz2salmasi 5 سال پیش مطرح شد
0

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

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

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


arazsalmasi
@araz2salmasi 5 سال پیش مطرح شد
1

خیلی ممنون از دوستان
من راهشو پیدا کردم ولی این روش فقط رو 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';

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

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