PDA

View Full Version : آموزش: پیاده سازی فناوری hashtag # ساده با php



godofphp
چهارشنبه 19 شهریور 1393, 16:40 عصر
به سفارش یکی از دوستان
هشتگ چیست ؟
بسیاری از شما در جامعه های مجازی همچون توییتر و فیسبوک و گوگل پلاس شاید از هشتگ ها استفاده کرده اید یا حداقل آنها را دیده اید هشتگ یک علامت # میباشد که در ابتدای یک کلمه قرار میگیرد و یک لینک به آن کلمه ایجاد میکند
هشتگی که من اینجا میخواهم با php ایجاد کنم لینکی به درون آدرس فرضی مثل example.com میدهد که بعد از example.com/hashtag قرار میگیرد برای نمونه هنگامی که رشته ای مانند : "من یک برنامه نویس #php هستم " را تایپ کردم به صورت "من یک برنامه نویس #php هستم " نشان داده شود
و هنگامی که روی کلمه php کلیک شود به example.com/php برود .
برای پیاده سازی این تکنولوژی ابتدا رشته ای را در نظر بگیرید مانند :

$string = "i am a #php programmer!"
و ما نیاز به یک متغیر داریم که اطلاعات هشتگ را نگهداری کند و این قسمت میتواند متفاوت باشد در فیسبوک از علامت @ هم برای این کار استفاده میشود ولی این کار برای لینک دادن به یک شخص مکان و ... میباشد که در پایگاه داده از قبل موجود است ما اینجا یک متغیر با نام hashtag در نظر میگیریم

$hashtag="#";
برای تشخیص هشتگ های موجود در رشته باید کلمات رشته را از هم تفکیک کنیم و این کار را با استفاده از تابع explode() به راحتی انجام میدهیم

$my_array=explode(" ",$string);
در این قسمت تابع explode کلمات را بر اساس " " از هم تفکیک میکند
یک متغیر دیگر نیاز داریم که تعداد کلمات را در آن نگهداری کنیم و این کار را با استفاده از تابع count انجام میدهیم
بصورت زیر :

$my_array_count=count($my_array);
حال ما یک آرایه داریم که تمامی کلمات رشته ی مورد نظر ما را در بر دارد و یک متغیر داریم که تعداد آن کلمه ها را نیز در خود نگهداری میکند
باید تمامی کلماتی که در ابتدای آنها علامت هشتگ میباشد را پیدا کنیم و سپس آنها را لینک دار نمائیم این کار را با یک حلفه انجام میدهیم و روی تک تک کلمات هشتگ دار لینک مورد نظر را اعمال میکنیم

$c=0;while( $c < $my_array_count ){ if( substr ( $my_array[$c], 0 , 1 ) === $hashtag ) { $my_array[$c]="<a href='#'>".$my_array[$c]."</a>"; } $c++;}$newstring = implode(" ",$my_array);
داخل حلفه ی بالا هر کلمه تک به تک چک میشود و اگر هشتگ جزو
0 یا 1 باشد آن کلمه لینک دار میشود
در آخر یک واحد به $c که شمارنده حلقه میباشد اضافه میشود و بعد از اتمام حلقه مقادیر آرایه با استفاده از تابع implode بصورت یک رشته در می آید
رشته ی جدید باید چاپ شود تمام !
حال یک مثال کامل که بصورت تابعی با نام makehashtag می باشد قرار میدهم


<?php function makehashtag($string){ $hashtag="#"; $my_array=explode(" ",$string); $my_array_count=count($my_array); $c=0; while($c < $my_array_count) { if(substr($my_array[$c],0,1) === $hashtag) { $my_array[$c]="<a href='site.com/$my_array[$c]'>".$my_array[$c]."</a>"; } $c++; } $newstring = implode(" ",$my_array); return $newstring;}echo makehashtag('an programmer silwec #now');?>

godofphp
چهارشنبه 19 شهریور 1393, 16:45 عصر
اینم پیشرفته تر
یک متن رو میگیره و متن جدید هشتگ دار رو نشون میده تست کنید


<meta charset="utf-8"><body dir="rtl"><form action="" method="post">متن خود را برای هشتگ دار کردن وارد کنید <input type="text" name="txthashtag" id="txthashtag" placeholder="برای کلمات هشتگ علامت # را وارد کنید"></form></body><?php if(isset($_POST['txthashtag']) && !empty($_POST['txthashtag'])){function makehashtag($string){ $hashtag="#"; $my_array=explode(" ",$string); $my_array_count=count($my_array); $c=0; while($c < $my_array_count) { if(substr($my_array[$c],0,1) === $hashtag) { $my_array[$c]="<a href='site.com/$my_array[$c]'>".$my_array[$c]."</a>"; } $C++‎‎‎; } $newstring = implode(" ",$my_array); return $newstring;}echo '<h1> متن نهایی : </h1>'.makehashtag($_POST['txthashtag']);} else echo 'متن خود را وارد کنید ';?>

godofphp
چهارشنبه 19 شهریور 1393, 16:47 عصر
دوستان اگه اشتباهی چیزی هست بگید ممنون

Tarragon
چهارشنبه 19 شهریور 1393, 16:49 عصر
سلام
تشکر بسیار که دقت خودتون رو صرف آموزش به بقیه می کنید.
لطفا elseecho آخر سر هم خورده رو از هم جدا کنید که ارور می گیره.

2undercover
چهارشنبه 19 شهریور 1393, 16:51 عصر
خوب چرا به راحتی از RegEx استفاده نکنیم؟!

godofphp
چهارشنبه 19 شهریور 1393, 17:04 عصر
سلام
تشکر بسیار که دقت خودتون رو صرف آموزش به بقیه می کنید.
لطفا elseecho آخر سر هم خورده رو از هم جدا کنید که ارور می گیره.
خیلی ممنون تصحیح شد

godofphp
چهارشنبه 19 شهریور 1393, 17:07 عصر
خوب چرا به راحتی از RegEx استفاده نکنیم؟!
برای کسی که تا حالا کار نکرده ممکنه دشوار باشه و این راه به نظر من منطقی تره برای یادگیری !

2undercover
چهارشنبه 19 شهریور 1393, 19:40 عصر
$hashtags = preg_replace('/(?<!\w)\#([^\s\n\.]+)/', '<a href="http://exmaple.com/hashtag/$1">$1</a>', "Hello world app. Made by #php.")

godofphp
جمعه 21 شهریور 1393, 20:45 عصر
$hashtags = preg_replace('/(?<!\w)\#([^\s\n\.]+)/', '<a href="http://exmaple.com/hashtag/$1">$1</a>', "Hello world app. Made by #php.")

از اونجا که این تاپیک فقط جنبه آموزشی داشت برای کسی که منطق برنامه نویسی رو نمیدونه همینجوری یک تکه خط کد php بدی نامفهوم تره و منطق رو یاد نمیگره . ولی بازم ممنون از راهنمایی خوبتون

xxvcdd
جمعه 21 شهریور 1393, 23:20 عصر
سعی کنید معنا و کاربرد صحیح اصطلاحات رو هم یاد بگیرید.
به چنین چیزهای ساده و مختصری که فناوری گفته نمیشه!

godofphp
شنبه 17 آبان 1393, 02:11 صبح
سعی کنید معنا و کاربرد صحیح اصطلاحات رو هم یاد بگیرید.
به چنین چیزهای ساده و مختصری که فناوری گفته نمیشه!
فناوری هیچ ربطی به سادگی ندارد و بهتر است شما یاد بگیرید که فناوری چیست !!! :لبخند: