دوشنبه ۰۷ خرداد ۱۴۰۳

Monday, May 27, 2024 GMT +3:30

نمایش قسمتی از متن و پاراگراف با PHP

php-limit-word

انتخاب و نمایش قسمتی از متن و پاراگراف یکی از نیازهایی است که معمولا در طراحی امکانات صفحات وب کاربردهای زیادی دارد، به طور مثال برای ایجاد قابلیت پیش نمایش محتوای دریافت شده از پرس و جوهای دیتابیس، نمایش خلاصه متن و پاراگراف در فرم های وب، نمایش قسمتی از نتیجه در هنگام جستجو در مطالب سایت، محدود کردن نمایش محتوای در اختیار کاربران با سطح دسترسی های متفاوت و موارد مشابه دیگری این امکان مورد استفاده قرار می گیرد، خوشبختانه نمایش قسمتی از متن و پاراگراف بسته به شرایط و نیاز طراح سایت به چند شیوه مختلف چه از طریق برنامه نویسی PHP یا در هنگام اجرای پرس و جوهای دیتابیس با دستورات و توابع درونی MySQL قابل انجام است که در این آموزش در حد امکان به تفصیل هر کدام از این روش ها را بررسی می کنیم.

نمایش قسمتی از متن به صورت شمارش کلمه


یکی از روش های نمایش قسمتی از متن یا پاراگراف تعیین تعداد و میزان کلماتی است که قصد داریم در خروجی نمایش داده شوند، برای انجام این کار در PHP می توانیم از ترکیب سه تابع explode ، implode و array_splice استفاده کنیم که در نمونه کد زیر این سه تابع را در بدنه یک تابع و به ترتیب تعریف کرده ایم:
<?php
function limitWord($string, $limit){
    $words = explode(" ", $string);
    $output = implode(" ", array_splice($words, 0, $limit));
    return $output;
}
?>
برای فراخوانی تابع کافی است پاراگراف مورد نظر را در یک متغیر تعریف و متغیر را (به عنوان آرگیومنت اول) به همراه تعداد کلمات مورد نظر (به عنوان آرگیومنت دوم) و به صورت زیر فراخوانی کنیم:
<?php
$string = "آموزش کاربردی پی اچ پی نمایش قسمتی از متن و پاراگراف";
echo limitWord($string, 5);
?>
به این صورت با اجرای کدهای PHP در خروجی صفحه تنها 5 کلمه اول از مقادیر متغیر فرضی string را خواهیم داشت.
آموزش کاربردی پی اچ پی
توضیح:
- تابع explode با دریافت یک مقدار به عنوان جداکننده (در اینجا فضای خالی یا " ") از آرگیومنت اول، متن مورد نظر را که در آرگیومنت دوم تنظیم شده به صورت آرایه ای از کلمات تبدیل می کند (String to Array).
- در قسمت بعدی برنامه تابع implode مجددا عناصر آرایه را به رشته متنی تبدیل می کند (Array to String)، البته در اینجا استفاده از array_splice باعث می شود که تنها تعداد کلمات محدودی از متن مورد نظر به خروجی ارسال شوند که این تعداد در متغیر limit (آرگیومنت دوم) مشخص شده است.
نکته: برای محاسبه تعداد کلمات موجود در آرایه می توانیم از تابع sizeof یا count هم در PHP استفاده کنیم که ممکن است برای توسعه کد در شرایط متفاوت مورد نیاز باشد:
<?php
$string = "آموزش کاربردی پی اچ پی نمایش قسمتی از متن و پاراگراف";
$words = explode(" ", $string);
echo sizeof($words);
echo '<br>';
echo count($words);
?>
خروجی دستورات بالا به صورت زیر است:
11
11
به این شیوه می توانیم برنامه هوشمندتری داشته باشیم به فرض تنها اگر تعداد کلمات یک متن از مقادیر مورد نظرمان بیشتر بود قسمت array_splice اجرا شود و یا ایده های متنوع دیگری که ممکن است به ذهن برنامه نویس برسد.

نمایش قسمتی از متن به صورت شمارش حروف  


روش دیگر برای انتخاب و نمایش قسمتی از متن و پاراگراف، شمارش حروفی است که تمایل داریم به همان تعداد به خروجی ارسال شوند، برای انجام این کار می توانیم از تابع substr و برای حروف فارسی از mb_subsrt استفاده کنیم، به طور مثال در کد زیر تعداد 22 حرف اول از نمونه متنی که قبلا بررسی کردیم را با این روش استخراج کرده و به خروجی می فرستیم:
<?php
$string = "آموزش کاربردی پی اچ پی نمایش قسمتی از متن و پاراگراف";
echo mb_substr($string, 0, 22, mb_detect_encoding($string));
?>
خروجی نمونه کد بالا به صورت زیر خواهد بود:
آموزش کاربردی پی اچ پی
در حال حاضر تابع substr تنها از استاندارد ASCII پشتیبانی می کند و برای کلمات فارسی که از استاندارد UTF-8 پیروی می کنند چندان کاربردی نیست چون هر حرف فارسی در تابع substr دو کاراکتر (Multibyte) حساب شده و به همین دلیل گاهی مواقع خروجی ناقص و غیر استاندارد در انتهای متن مورد نظر چاپ می شود، به فرض:
آموزش کاربر�
همان طور که گفتیم این موضوع مربوط به ساز و کار یونیکد زبان فارسی است که هر حرف متشکل از دو بایت است اما تابع substr حروف را بر اساس شمارش هر بایت تجزیه می کند و این منجر به بروز مشکل می شود، برای رفع مشکل بهتر است از تابع mb_substr و mb_detect_encoding مطابق با نمونه بالا استفاده کنیم.

نمایش قسمتی از متن و پاراگراف در MySQL


علاوه بر روش های بالا که صرفا متکی بر دستورات و توابع زبان برنامه نویسی PHP هستند، در سیستم مدیریت پایگاه داده MySQL و به هنگام اجرای پرس و جو (Query) نیز این امکان وجود دارد که بتوانیم نتایج را به تعداد حروف یا کلمات خاصی محدود کنیم، در ادامه با دو تابع SUBSTRING و SUBSTRING_INDEX آشنا خواهیم شد.

شمارش حروف با تابع SUBSTRING در MySQL


مانند آنچه در مورد برنامه نویسی کدهای PHP گفتیم در MySQL هم به دو روش شمارش حروف و شمارش کلمه می توانیم تعداد کاراکترها یا عبارات خروجی را به عدد خاصی محدود کنیم، برای شمارش حروف از تابع SUBSTRING به شکل نمونه زیر استفاده می کنیم:
mysqli_query($conn, "SELECT id, SUBSTRING(col_name, 1, 30) AS col_name FROM tbl_name ORDER BY id DESC LIMIT 1");
در مثال بالا با استفاده از تابع درونی SUBSTRING در MySQL از جدول فرضی tbl_name، ستون col_name کاراکترهای 1 تا 30 را انتخاب کرده ایم، البته این تابع نیز نسبت به حروف فارسی در مقایسه با حروف انگلیسی رفتاری متفاوت دارد و روشی که در ادامه خواهیم گفت برای زبان فارسی مناسبتر است.

شمارش کلمه با تابع SUBSTRING_INDEX در MySQL


در اغلب مواقع صرف شمارش حروف ایدآل نیست و معمولا کاراکترهای ناقص یا اضافه در خروجی خواهیم داشت، طراحان و برنامه نویسان وب عموما به دنبال راه حلی جهت شماره کلمه به کلمه هستند که برای این منظور در MySQL تابع SUBSTRING_INDEX به شکل نمونه زیر قابل استفاده است:
mysqli_query($conn, "SELECT id, SUBSTRING_INDEX(col_name, ' ', 30) AS col_name FROM tbl_name ORDER BY id DESC LIMIT 1");
در مثال بالا با استفاده از تابع درونی SUBSTRING_INDEX در MySQL از جدول فرضی tbl_name، ستون col_name تعداد 30 کلمه اول را انتخاب کرده ایم، خوشبختانه این روش با حروف فارسی سازگار است چون مبنای کار تابع بررسی فضای خالی (' ' در آرگیومنت دوم) بین کلمات است.
دسته بندی: آموزش کاربردی » PHP
related مطالب بیشتر:
ارسال پارامتر به URL و دریافت مقادیر با PHP
آموزش ساخت نقشه XML سایت (Sitemap) با PHP و MySQL
ساخت منوی هوشمند با PHP و CSS
ساخت فید خوان آر اس اس (RSS Feed Reader) با PHP
محدود کردن لینک دانلود مستقیم فایل ها با PHP و htaccess
دیدگاه
more ۱۱۹ دیدگاه برای این مطلب ارسال شده است.
more دیدگاه جدید بر اساس تاریخ ارسال در انتهای دیدگاه های موجود نمایش داده می شود.
روناک قادری
۰۴:۴۹ ۱۴۰۱/۰۱/۰۸
با سلام و خسته نباشید
ببخشید بازم یه سوال دارم البته به بزرگواری خودتون ببخشید من می خوام داخل تگ های p اعداد رو حذف کنم هرچی عدد و نقطه و خط تیره هست پاک بشه و فقط متن بمونه
مثلا:
<p>2-3-6. ابعاد چهارگانه‌ی دسترسی به حوزه‌ی عمومی.. 50</p>
می خوام اینطوری بشه
<p>ابعاد چهارگانه‌ی دسترسی به حوزه‌ی عمومی</p>
در انتها فقط متن ساده بمونه، پرانتز هم حذف نشه و اون بمونه مثلا اگه متن پرانتز داشت اونو حذف نکنه، کاراکترهای مجاز دو نقطه و کاراکتر ویرگول باشه و پرانتزها
: ، ()
خیلی از لطف و محبت شما ممنون و سپاسگزارم سوالها و بی اطلاعیهای منو به بزرگی خودتون ببخشید
با تشکر فراوان
مسئله ای نیست، برای حذف کاراکترهای دلخواه می توانید از تابع preg_match در PHP به شکل نمونه زیر استفاده کنید:
<?php
$str = '<p>2-3-6. ابعاد چهارگانه‌ی دسترسی به حوزه‌ی عمومی.. 50</p>';
$pattern = '/[0-9\.\-]+/i';
$replace = preg_replace($pattern, '', $str);
echo $replace;
?>
الگو صرفا مطابق با نمونه متن و خروجی مورد انتظار است.
روناک قادری
۱۹:۵۰ ۱۴۰۱/۰۱/۰۸
با سلام و درود فراوان بر شما
از لطف و محبت شما بسیار ممنون و سپاسگزارم خیلی خوب بود فقط یه مشکلی داره من این پترن رو واسه تگ p فقط می خوام چون تگ <a> هم دارم که تگ آ نمی خوام شامل این خصوصیات بشه و این پترن فقط شامل حال اون باشه توی تگ a اگه عکسی چیزی باشه که عدد داشته باشه اونم پاک می کنه تگ های آ رو داخل تگ p قرار نمی دم که همه با هم یه خصوصیات رو به ارث نبرن یه چندتایی رو امتحان کردم هر چی داخل تگ a هم بود عوض کرد و عکس ها رو نشون نمیده
با تشکر فراوان
لطفا کد زیر را با حالت های مختلف تست کنید، طبق بررسی ما مشکلی نبود:
<?php
$str = '<p>2-3-6. ابعاد چهارگانه‌ی دسترسی به حوزه‌ی عمومی.. 50</p><a href="#">2-3-6</a>';
$pattern = '/(<p[^>]*>.*)[0-9\.\-]+(.*<\/p>)/mui';
while(preg_match($pattern, $str)){
$str = preg_replace($pattern, '$1$2', $str);
}
echo $str;
?>
روناک قادری
۰۱:۲۳ ۱۴۰۱/۰۱/۰۹
این دفعه درست شد
بخدا خیلی خجالت می کشم هی ازتون سوال می کنم آدم نباید کسی که بهش محبت و خوبی می کنه انقد اذیت کنه و مزاحمش بشه تورو خدا حلال کنید انشاءالله خدا هزاران برابر محبتهایی که به مردم می کنید هم در دنیا و هم در قبامت به خودتون و تموم عزیزانتون عنایت کنه اینو الان امتحان کردم خیلی خوب بود دست گلتون درد نکنه
فقط یه مشکل کوچیک می مونه اگه داخل متن اینطوری باشه
2-14-2.  مدل کارور و شی یر (1990)....46
داخل پرانتر عددها رو پاک می کنه و فقط پرانتزها می مونه واسه بقیه جاها خیلی عالی کار می کنه
الان تگ a رو دست نمی زنه و این خیلی خوبه انشاءالله منم دیگه مزاحتون نشم
دست گل پدر و مادرهای عزیزنتون رو می بوسم
خواهش، موردی ندارد، برای اینکه اعداد داخل پرانتر حذف نشوند از نمونه کد زیر استفاده کنید:
<?php
$str = '<p>2-14-2 . مدل کارور و شی یر (1990) ..... 46 مدل کارور و شی یر</p>';
$pattern = '/(<p[^>]*>.*|<p[^>]*>.*\))([0-9\.\-]+(?=[^\)]*(?:[\(])))(.*<\/p>)/mui';
while(preg_match($pattern, $str)){
$str = preg_replace($pattern, '$1$3', $str);
}
$pattern = '/(<p[^>]*>.*\).*)([0-9\.\-]+)(.*<\/p>)/mui';
while(preg_match($pattern, $str)){
$str = preg_replace($pattern, '$1$3', $str);
}
echo $str;
?>
لطفا دقت کنید این شیوه برای کارهای حساس خیلی توصیه نمی شود و با توجه به طیف وسیعی که ورودی ها ممکن است داشته باشند می تواند دچار خطا شود، حتما قبل از استفاده با حداکثر الگوهای مختلف تست کنید.
روناک قادری
۱۹:۳۳ ۱۴۰۱/۰۱/۰۹
از لطف و محبت شما بسیار ممنون و سپاسگزارم
خدا خیرتون بده خیلی عالی بود درست کار می کنه نه حواسم هست فقط واسه محتویات بعضی مطالب ازش استفاده می کنم اونم به این صورت که باید رمز تغییر رو وارد کنم بدون وارد کردن رمز چیزی عوض نمیشه وقتی رمز تغییر میزنم تݝییرات اعمال میشه اگه تغییرات اونی که میخواستم نبود باز یه رمز دیگه میزنم که تغییرات به حالت اصلی برمی گرده خیلی عالی بود اونی بود که من می خواستم
دست گلتون درد نکنه
ببخشید چرا من این دستور رو توی دیتابییس میزنم با اینکه از این کاراکتد خیلی موجوده ولی عمل نمی کنه؟
update post set content = replace(content,"&nbsp;","");
واسه ویرایش مطالب هم نوشتم که با ویرایش کردن این کاراکتر پاک بشه ولی واسه اونم کار نمی کنه قبلا پاک می کردـ
مثال:
&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp; دارد (به شیوه&nbsp;APA)</span></li>
توش پر از این کاراکتر هست ولی با زدن دستور عمل نمی کنه و میگه هیچ چیزی عوض نشد!
نمی دونم چرا
طبق تست ما کد مشکلی ندارد، ممکن است اطلاعات به شکلی که می بینید در دیتابیس ذخیره نشده باشند، به فرض کاراکتر & می تواند به معادل آن یعنی
&amp;
تبدیل شده باشد یا نسخه MySQL از تابع REPLACE به خوبی پشتیبانی نکند، همچنین شما باید قسمت WHERE را در پرس و جو در نظر بگیرید و جدول هم یک PRIMARY KEY یا UNIQUE Index داشته باشد.
https://dev.mysql.com/doc/refman/8.0/en/replace.html
روناک قادری
۱۲:۴۷ ۱۴۰۱/۰۱/۱۱
با سلام و خسته نباشید
ببخشید باز مزاحمتون شدم شرمنده این الگو که بهم داده بودید خیلی خوبه فقط باز یه مشکلی داره!
<?php
$str = '<p>2-14-2 . مدل کارور و شی یر (1990) ..... 46 مدل کارور و شی یر</p>';
$pattern = '/(<p[^>]*>.*|<p[^>]*>.*\))([0-9\.\-](?=[^\)]*(?:[\(])))(.*<\/p>)/mui';
while(preg_match($pattern, $str)){
$str = preg_replace($pattern, '$1$3', $str);
}
$pattern = '/(<p[^>]*>.*\).*)([0-9\.\-]+)(.*<\/p>)/mui';
while(preg_match($pattern, $str)){
$str = preg_replace($pattern, '$1$3', $str);
}
اگه متن بصورت یه خرده تو در تو باشه و بعد p تگ span باشه هیچ بلایی سر متن نمیاره!
<p><span>1– 3 واسازی معرفت، هدف و کارکرد سیاست...................... 41</span></p>
اینطوری هیچ کاری به کارش نداره :-(
همان طور که قبلا گفتیم برای موارد اینچنین که الگوها می توانند متغیر باشند نوشتن یک دستور واحد به سختی امکانپذیر است، در هر صورت مطابق با آخرین الگوی ورودی می توانید از شیوه زیر استفاده کنید:
<?php
$str = '<p><span>1– 3 واسازی معرفت، هدف و کارکرد سیاست...................... 41</span></p>';
$pattern = '/(<p[^>]*>.*|<p[^>]*>.*\))([0-9\.\-\–]+(?=[^\)]*(?:[\(])))(.*<\/p>)/mui';
$str = str_replace('</p>', '(just_for_pattern_edhjkl)</p>', $str);
while(preg_match($pattern, $str)){
$str = preg_replace($pattern, '$1$3', $str);
}
$pattern = '/(<p[^>]*>.*\).*)([0-9\.\-\–]+)(.*<\/p>)/mui';
while(preg_match($pattern, $str)){
$str = preg_replace($pattern, '$1$3', $str);
}
$str = str_replace('(just_for_pattern_edhjkl)</p>', '</p>', $str);
echo $str;
?>
روناک قادری
۱۳:۳۰ ۱۴۰۱/۰۱/۱۱
با سلام
ببخشید یه سوال دیگه هم دارم البته بخدا شرمنده توی دیتابیس چطور می شه این اینترنتها رو عوض کرد؟ واسه همه چی بلدم فقط واسه اینهایی که خط به خط هستند نمی دونم مثلا اینطوری
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
اگه توی یه خط باشند مشکلی ندارم باهاشون ولی وقتی هر کدوم توی یه خط هستند نمی دونم چکارشون کنم مثلا می خوام همه اینها رو تبدیل به یکی کنم
update post set content = replace(content,"<br><br><br><br>","<br>");
واسه fie_get_contents هم بعضی وقتها برام پیش اومده که الگو رو باید اینطوری خطی وارد می کردم
که اونم بلد نبودم! الگوی خطی اونو چطوری وارد می کنند؟
مثلا اینطوری
<div class='main'>
<div class='menu'>
چطون اگه تنهایی وارد می کردم با تگ های دیگه هم مشترک بودن!
در دیتابیس اگر MySQL نسخه 8.0.12 به بعد باشد با تابع REGEXP_REPLACE در غیر اینصورت با تابع REPLACE می توانید کاراکتر خط شکن (Line Break) را به صورت نمونه زیر لحاظ کنید:
SELECT REPLACE((SELECT `col` FROM tbl WHERE `id` = 1), "<br>\r\n<br>\r\n<br>\r\n<br>", '<br>') 
در واقع در اغلب موارد rn نماد خط شکن است و گاهی صرفا n یا r خط جدید را ایجاد می کنند، برای نادیده گرفتن خط جدید در توابع PHP می توانید از نمونه کد زیر الگوبرداری کنید:
<?php
$str = "<div class='main'>
<div class='menu'>";
$pattern = '/<div class=\'([^\']+)\'>([\r\n]*)<div class=\'([^\']+)\'>/im';
$str = preg_replace($pattern, 'class for div 1: $1 , class for div 2: $3', $str);
echo $str;
?>
روناک قادری
۱۹:۰۲ ۱۴۰۱/۰۱/۱۱
با سلام
دست گلتون درد نکنه درست شد خدا خیرتون بده ببخشید این مدت خیلی مزاحمتون شدم ازتون خیلی چیزا یاد گرفتم انشاءالله به تموم آرزوهاتون برسید با تشکر فراوان این حالت پاسخ کپچا رو هم درست کردید الان دیدم خیلی عالی شده
بازم از لطف و محبتتون بسیار ممنون و سپاسگزارم
خواهش، خوشحالیم که مشکل رفع شد.
۰۰:۰۰ ۱۴۰۱/۰۸/۳۰
سلام من از نمونه کد
<?php
$content = file_get_contents('http:/example.com/');
$title = preg_match("/<!DOCTYPE html[^>]*>(.*?)<\\/body>/ims", $content, $match);
echo $match[1];
?>
برای نمایش قسمتی از سایت دیگه استفاده میکنم مشکلم اینه بعضی از سایت ها برداشت مطلب با این تابع رو بستن یعنی فکر میکنم دسترسی ربات ها رو بستن جایگزین این کد چه تابع یا نمونه کد هست؟
ممنون میشم راهنمایی کنید
با تشکر
اگر با تابع file_get_contents با مشکل مسدود شدن دسترسی مواجه می شوید می توانید روش تابع curl را با تنظیم اطلاعات واسط کاربری امتحان کنید، مثال:
<?php
$agent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0';
$curl = curl_init('http://www.example.com/');
curl_setopt($curl, CURLOPT_USERAGENT, $agent);
$content = curl_exec($curl);
curl_close($curl);
$title = preg_match("/<!DOCTYPE html[^>]*>(.*?)<\\/body>/ims", $content, $match);
echo $match[1];
?>
البته این تابع تنظیمات دیگری هم دارد که در صورت نیاز می توانید در وب جستجو کنید.
نکته: محتوای برخی از سایت ها به صورت داینامیک ایجاد می شود به این صورت که وقتی صفحه سایت را در مرورگر بارگذاری می کنیم در مرحله بعد با اجرای دستورات جاوا اسکریپتی و ای جکس محتوای اصلی ایجاد می شود، در اینصورت استفاده از این روش ها کمکی به حل مشکل نمی کند و عملا روشی برای دریافت محتوای اینگونه سایت ها با کدنویسی وجود ندارد.
امیرحسین
۱۶:۴۵ ۱۴۰۲/۰۴/۱۵
با تشکر از توضیحات مفیدی که دادید
استاد من می خوام از نوشته های یک متن که bold کرده ام بعنوان کلمات کلیدی استفاده کنم و می خوام این نوشته ها رو استخراج کنم
یعنی هرچقدر سرتیتر bold داشته باشم استخراج بشه و از اونا واسه تگ و برچسب استفاده کنم ممنون میشم به من کمک کنید. چون مجبورم همیشه تک تک کلماتی که bold کرده ام رو دستی وارد کنم.
با تشکر از لطف و محبت شما
برای پیدا کردن و استخراج محتوای داخل تگ های bold شده در PHP می توانیم یکی از روش های عبارات باقاعده در کنار تابع preg_match_all یا DOMDocument و تجزیه تگ متن را انتخاب کنیم، مثال:
<?php
$string = 'this is a test text for find <b>bold</b> titles in <b>PHP</b> programming...';
echo 'method 1:<br>';
preg_match_all('/<b>(.*?)<\/b>/si', $string, $matches);
//print_r($matches);
foreach($matches[1] as $key => $value) {
echo 'label: ' . $value . '<br>';
}
echo '--------------------------<br>';
echo 'method 2:<br>';
$dom = new DOMDocument;
@$dom->loadHTML(mb_convert_encoding($string, 'HTML-ENTITIES', 'UTF-8'));
$bolds = $dom->getElementsByTagName('b');
for($i = 0; $i < $bolds->length; $i++) {
$value = $bolds->item($i)->nodeValue;
echo 'label: ' . $value . '<br>';
}
?>
در این نمونه کدها فرض بر این است که از تگ های b در سورس متن استفاده شده، در صورتی که از تگ های strong یا موارد دیگر استفاده می کنید قاعدتا باید قسمت هایی از کدها را ویرایش کنید.
سینا
۰۸:۲۶ ۱۴۰۲/۰۶/۲۵
با سلام و خسته نباشید
من برای ترجمه متن از گوگل ترانسلیت استفاده می کنم یه مشکلی که دارم اینکه وقتی متنی رو برام ترجمه می کنه کلمات و جملات داخل پرانتز و اصطلاحات رو ترجمه نمی کنه مثلا وقتی یه متن همه اش فارسی باشه ولی داخل پرانتزها اصطلاحی نوشته باشه که انگلیسی باشه اونو ترجمه نمی کنه! فقط تنهایی اون قسمتا رو باید ترجمه کنم می خوام کدی در اختیار داشته باشم که فارغ از اینکه متن انگلیسی باشه و یا هرچیزی همه رو به اون زبانی که میخوام ترجمه کنه
با تشکر
متاسفانه ما چنین کدی در اختیار نداریم و نوشتن آن هم فرآیندی زمانبر است و شامل خدمات سایت نمی شود، اما اگر کدی دارید که نیاز به راهنمایی و اصلاح دارد می توانیم در بخش هایی کمکتان کنیم.
hossein
۲۳:۱۲ ۱۴۰۲/۰۷/۱۴
سلام وقت شما بخیر
ممنون میشم اگه راهنماییم کنید میخوام کدی در اختیارم بزارید که بتونه برام سقف درصد مدیر را تعیین کنه توی افزونه (چند فروشندگی) دکان برای مثال: سهم مدیر سایت ۷ درصد میباشد تا حداکثر مبلغ ۳۵ هزار تومان، اگه محصولی مثلا قیمتش یک میلیون باشه دیگه درصد حساب نکنه همون مبلغ ثابت رو در نظر بگیره
کد مورد نظر شما نیازمند دسترسی به افزونه، آزمایش و خطا و سفارشی سازی اختصاصی آن می باشد که فرآیندی زمانبر است و متاسفانه در چارچوب خدمات ما قرار نمی گیرد.
hossein
۱۸:۵۶ ۱۴۰۲/۰۷/۲۵
سلام وقت شما بخیر
کدی هست که بشود با کمک اون، به محض حذف محصول توسط فروشندگان (افزونه دکان)، تصاویر محصول نیز حذف شوند و نیازی به حذف تصاویر بعد از حذف محصول نباشد
ممنونم
با تابع unlink در PHP می توانید فایل مورد نظر را حذف کنید منتها کار با این تابع نیازمند تجربه قبلی و تعریف دقیق آدرس فایل است و در صورت اشتباه در تنظیم آدرس می تواند منجر به حذف ناخواسته دایرکتوری ها یا فایل های دیگر شود!
https://www.php.net/manual/en/function.unlink.php
همچنین با توجه به استفاده از افزونه خاص باید کدهای این افزونه در قسمتی که وظیفه حذف اطلاعات را دارد ویرایش شوند که فرآیندی زمانبر است و نیاز به دسترسی سرور و آشنایی با ساختار افزونه مورد نظر دارد.
بهاره هوشمندی
۰۲:۳۷ ۱۴۰۲/۰۸/۳۰
با سلام و خسته نباشید استاد بزرگوار
آیا راهی وجود داره تفاوت دو تا متن رو با php پیدا کرد؟
مثلا
text = "این یک متن تکست هست";
text = "این، یک متن تکست هست";
با تشکر
دقیقا مشخص نکرده اید خروجی مد نظرتان باید به چه شکلی باشد اما توابع آماده ای برای نمایش تفاوت های دو متن در وب وجود دارد، نمونه کد:
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="utf-8">
<style>
.deleted {
color: #E4041A;
animation: deleted-blink 1s infinite;
}
@keyframes deleted-blink {
0% {color: #E4041A;}
75% {color: transparent;}
100% {color: #E4041A;}
}
.inserted {
color: #447F1C;
animation: inserted-blink 1s infinite;
}
@keyframes inserted-blink {
0% {color: #447F1C;}
75% {color: transparent;}
100% {color: #447F1C;}
}
</style>
</head>
<?php
function computeDiff($from, $to) {
$diffValues = array();
$diffMask = array();

$dm = array();
$n1 = count($from);
$n2 = count($to);

for($j = -1; $j < $n2; $j++) $dm[-1][$j] = 0;
for($i = -1; $i < $n1; $i++) $dm[$i][-1] = 0;
for($i = 0; $i < $n1; $i++) {
for($j = 0; $j < $n2; $j++) {
if($from[$i] == $to[$j]) {
$ad = $dm[$i - 1][$j - 1];
$dm[$i][$j] = $ad + 1;
} else {
$a1 = $dm[$i - 1][$j];
$a2 = $dm[$i][$j - 1];
$dm[$i][$j] = max($a1, $a2);
}
}
}

$i = $n1 - 1;
$j = $n2 - 1;
while(($i > -1) || ($j > -1)) {
if($j > -1) {
if($dm[$i][$j - 1] == $dm[$i][$j]) {
$diffValues[] = $to[$j];
$diffMask[] = 1;
$j--;
continue;
}
}
if($i > -1) {
if($dm[$i - 1][$j] == $dm[$i][$j]) {
$diffValues[] = $from[$i];
$diffMask[] = -1;
$i--;
continue;
}
}
{
$diffValues[] = $from[$i];
$diffMask[] = 0;
$i--;
$j--;
}
}

$diffValues = array_reverse($diffValues);
$diffMask = array_reverse($diffMask);

return array('values' => $diffValues, 'mask' => $diffMask);
}

function diffline($line1, $line2) {
$diff = computeDiff(str_split($line1), str_split($line2));
$diffval = $diff['values'];
$diffmask = $diff['mask'];

$n = count($diffval);
$pmc = 0;
$result = '';
for($i = 0; $i < $n; $i++) {
$mc = $diffmask[$i];
if($mc != $pmc) {
switch($pmc) {
case -1:
$result .= '[-end_del-]';
break;
case 1:
$result .= '[-end_ins-]';
break;
}
switch($mc) {
case -1:
$result .= '[-start_del-]';
break;
case 1:
$result .= '[-start_ins-]';
break;
}
}
$result .= $diffval[$i];

$pmc = $mc;
}
switch($pmc) {
case -1:
$result .= '[-end_del-]';
break;
case 1:
$result .= '[-end_ins-]';
break;
}

$result = htmlentities($result);
$result = str_replace('[-start_del-]', '<span class="deleted">', $result);
$result = str_replace('[-end_del-]', '</span>', $result);
$result = str_replace('[-start_ins-]', '<span class="inserted">', $result);
$result = str_replace('[-end_ins-]', '</span>', $result);

return $result;
}

$text_1 = 'این یک <b>متن</b> تکست هست';
$text_2 = 'این، یک متن تکست هست';
echo diffline($text_1, $text_2);
?>
</html>
در این نمونه کد زیر کاراکترهای متفاوت خط کشیده می شود.
به روزرسانی: امکان فرمت تگ های HTML و نمایش موارد تغییر کرده به صورت انیمیشن به کد اضافه شد.
بهاره هوشمندی
۰۱:۲۴ ۱۴۰۲/۰۹/۰۱
با سلام و از شما
من این کد رو امتحان کردم واسه متن عادی خوبه و جواب میده ولی واسه متن طولانی که رنگ متن عوض شده باشه توی خروجی هم همه استایلی که بهش دادیم رو یک دست می کنه اگه جایی متن رو bold کرده باشیم بازم تا آخر اون متن خروجی رو bold می کنه می خوام خروجی که میده بصورت decode باشه و مشخص بشه کجا تغییر صورت گرفته و اینکه اگه خروجی هم به این شکل نبود فقط توی خروجی تغییرات نگارشی و ویرایشی رو نشون بده که بفهمم چی به چی شده من می خوام بدونم یک متن از اول که چی بوده با ویرایش کجاهاش تغییر کرده بصورت نوشتاری ببینم تغییرات به چه شکلی لحاظ شده الان هر استایلی که متن به خودش گرفته باشه توی خروجی همه رو تا پاراگراف آخر نشون میده و مشخص نمیشه چه اتفاقی افتاده!
با تشکر از شما
تابع پاسخ قبل را مطابق با توضیحات شما ویرایش کردیم، در این تابع تگ های اختصاصی به صورت [-tag_name-] استفاده شده که نباید از قبل در سورس های شما موجود باشد.
بهاره هوشمندی
۱۲:۳۹ ۱۴۰۲/۰۹/۰۱
با سلام استاد بزرگوار
از لطف و محبت شما بسیار ممنون و سپاسگزارم خیلی عالی بود
اینطوری خیلی خوب شد دستتون درد نکنه ان شاءالله همواره تنتون سالم باشه و دلتون خوش خیلی کارم رو راه میندازه
یه دنیا ازتون ممنونم
خواهش، نظر لطف شما است، خوشحالیم اگر کمکی کرده باشیم.
more لطفا پیش از ارسال دیدگاه نکات زیر را مد نظر داشته باشید:
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.



 refresh
10 × 10
8 × 1
20 × 20
=
آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
پرتو
سلام خوبید؟ بلاکفا باز دچار مشکل شده یا فقط برای من دچار مشکل شده؟ منظورم اینکه خیلی دیر باز میشه و فقط برای فایرفاکس هم...
۱۴۰۳/۰۳/۰۱

سعیدی
سلام می تونید اینو اصلاح کنید؟ چون من با توضیحات شما یاد نگرفتم خیلی ممنون اگه یکبار اصلاح کنید واسه بعد یاد...
۱۴۰۳/۰۲/۲۲

سعیدی
دست شما درد نکنه وقتی اینطوری تغییر میدم و به class می نویسم کار نمی کنه و ارور میده
۱۴۰۳/۰۲/۲۱

سعیدی
دست شما درد نکنه خیلی خوب بود این یکی رو چطوری فراخوانی کنم؟ این واسه مناسبت هاست خیلی ممنون
۱۴۰۳/۰۲/۱۹

سعیدی
با سلام آیا می شه این تابع رو بصورت class نوشت؟ میخوام وقتی کد ملی میدم با این تابع فراخوانی بشه و شهر...
۱۴۰۳/۰۲/۱۹

پرتو
مگه شما دارین اموزشش رو؟ آدرسش رو میزارید؟ یا اگر سایتی رو میشناسید که آموزش داده باشه معرفی کنید ممنون میشم من خیلی گشتم توی...
۱۴۰۳/۰۲/۱۸

پــرتو
سلام خوبید ؟ خسته نباشید گوشی پدرم شیاومی هست ایمیلمو ثبت کردم داخلش بعد می خواستم حذفش کنم نمیشد می گفت همه داده های توی...
۱۴۰۳/۰۲/۱۶

vip
خیلی ممنونم از شما خیلی عالی شد میشه مثل تبلیغ بلاگفا باشه یعنی زیر صفحه نمایش داده بشه و صفحه رو سیاه نکنه که تا...
۱۴۰۳/۰۲/۰۵

vip
با سلام و خسته نباشید استاد چند وقت پیش این کد رو از شما گرفتم این کد خیلی خوبه و کاربر رو هم...
۱۴۰۳/۰۲/۰۴

پـــرتو
سلام خسته نباشید شرمنده مزاحم میشم یه سوال داشتم می خواستم بپرسم که چرا بلاگفا باز نمیشه برام؟ کلا هر وبلاگی که مربوط به بلاگفا...
۱۴۰۳/۰۲/۰۲

هادی عبداله زاده
با تشکر از شما دوست عزیز با order_id درستش کردم موقع برگشت order_id رو بر می گردونه اینطوری کردم که از طریق اون شناسه...
۱۴۰۳/۰۱/۲۲

هادی عبداله زاده
با تشکر از شما برای ارسال درخواست درست بود و به بانک هم وصل شد فقط برای وریفای چیکارش کنم؟
۱۴۰۳/۰۱/۲۲

هادی عبداله زاده
با سلام و خسته نباشید سال نو شما مبارک من یه کد واسه انتقال به درگاه دارم واسه زرین پال هست ...
۱۴۰۳/۰۱/۲۰

پـــرتو
ببخشید ممنون از جوابتون ولی یه سوال اگر بخوام همون شماره رو با حساب کاربری جدید با همون شماره رو داشته باشم داده های قبلی...
۱۴۰۳/۰۱/۱۹

حسین بلاگ
من یه صفحه ارسال متن دارم میخوام کاربرها وقتی واسه م پیام میدن وقتی روی اون دکمه کلیک می کنن بهشون بگه لطفا صبر...
۱۴۰۳/۰۱/۱۹

شریفی
سلام و عرض احترام سال نو رو بهتون تبریک میگم انشالله سال خوبی داشته باشین یه سرویس وبلاگدهی داریم که قصد داریم به...
۱۴۰۳/۰۱/۱۵

فرهادی
سلام ببخشید یه مشکل دارم این صفحه رو نگاه کنید چند بار توی سورس تکرار شده نمی تونم الگوی توضیحاتش رو استخراج...
۱۴۰۳/۰۱/۱۰
  در انتظار بررسی: ۰
 پاسخگویی به سوالات ممکن است تا ۲۴ ساعت زمان ببرد.