shami123 36 ارسال شده در اردیبهشت 94 (ویرایش شده) سلام یکی از دغدغه های انجمن داران قیلطرکردن کلمات نامناسب درپست هایی است که کاربران ارسال میکنند.ولی متاسفانه افزونه های کاربردی و فوق العاده ای مثل انجمن ساز کیوننا این امکان را دارا نمیباشند. در این آموزش نحوه قیلطر کلمات نامناسب و دلخواه را در این انجمن سازحرفه ای به شما نشان خواهم داد.دراین روش هنگام ارسال پست ،درصورتی که پست حاوی کلمات قیلطرشده باشد ،طی پیغامی به کاربر از ثبت پست جلوگیری مینماید. البته این روش رو در انجمن جوملا جهانی دیدم که واسه نسخه های اولیه این افزونه بود ولی با مقداری تغییر خودم اون رو روی نسخه 3.0.5 بکاربردم و مشکلی نداشت.هم روی جوملا 2.5 و هم جوملا 3 کار میکنه. فایل زیر را باز کنید: components\com_kunena\controllers\topic.php در قسمت مربوط به تابع public function post() در همون خطوط اول تابع بعد از اینکه مشخصات پست رو در آرایه ای به نام $fields قرارمیده ،خطوط زیر را اضافه نمایید: $filter = $this->filtered_words($fields['message']); if ($filter) { $this->app->enqueueMessage ( JText::_ ( $filter ), 'error' ); $this->redirectBack (); } تابع filtered_words() همون تابعی هست که باید به این کلاس تاپیک افزوده شود.این تابع را میتوانید در آخر همین کلاس بعد از آخرین تابع که در این نسخه resetvotes() میباشد قرار دهید-قبل از علامت کروشه که بمعنای بسته شدن کلاس میباشد. function filtered_words($message) { // EDIT THIS LINE!!!!!!!!!!!!!!!!!!! // THIS SHOULD BE ADMIN MAIL ADRESS $recipient = 'admin@yourjoomla.org'; // EDIT THIS LINE!!!!!!!!!!!!!!!!!!! // read bad_words.txt if ($badwfh = fopen(JPATH_BASE.'/images/filtered_words.txt', 'r')) { while (!feof($badwfh)) { $line = trim(fgets($badwfh)); if (!empty($line)) { $badwords[] = addslashes($line); } } fclose ($badwfh); // read post message in array $checkmessage = strtolower($message); $message_array = array(); $message_array = preg_split('/[\s,\n\r\t]+/', $checkmessage); $found_words1 = array(); $found_words2 = array(); foreach ($badwords as $bad_word) { if (strstr($checkmessage, $bad_word)) { $found_words1[] = $bad_word; } } $found_words2 = array_intersect($message_array, $badwords); $found_words = array_merge($found_words1, $found_words2); if (count($found_words) > 0) { foreach ($found_words as $bad_word) { $checkmessage = str_replace($bad_word, " *<b><span style='color: #FF0000;'>".$bad_word."</span></b>* ", $checkmessage); } $msg = 'there are filtered words in your message'.'<hr>'.$checkmessage; return $msg; } else return false; } else return false; } // filtered_words function فایلی متنی به نام filtered_words.txt که در این تابع بکاربرده شده در واقع همون فایلی است کلمات قیلطر شده در اون قرارداده شده و در پوشه تصاویر در روت سایت قرار دارد که در قسمت مدیریت رسانه میتوانید فایل جدید رو جایگزین اون کنید.توجه داشته باشید که این فایل رو باید باهمین نام در پوشه تصاویر وارد کنید. کلماتی که میخواهید در این لیست قراربگیرند را بطور جداگانه و هر کلمه در یک خط قرار دهید و سپس فایل را با نام ذکر شده در پوشه تصاویر آپلود نمایید.دقت کنید که قیل ازآپلود فایل جدید ،فایل قبلی را حذف نمایید.این فایل را هر چندبار که بخواهید میتونید تغییر دهید. امیدوارم مفید بوده باشه بدرود... ویرایش شده اردیبهشت 94 توسط داش سعید 2 واکنش ها : pourmoshtagh و محمدحسین میری نقل قول به اشتراک گذاری این ارسال لینک به ارسال به اشتراک گذاری در سایت های دیگر