m3hdi

سوالی پیرامون طراحی ماژول در جوملا 3

4 پست در این موضوع

با سلام به دوستان .

من سوالی پیرامون برنامه نویسی و طراحی ماژول در جوملا سه داشتم .

یک ماژول خیلی ساده ای بنده پیاده سازی کردم تحت عنوان نمایش مطالب ویژه .

در فایل xml که وجود داره من اومدم و در قسمت config سه پارامتر تعیین کردم به صورت زیر ::

<config>
	<fields name="params">
		<fieldset name="basic">
               <field name="limitnews" type="text" label="تعداد اخبار" description="" />
               <field name="newscat" type="category" extension="com_content" label="مجموعه خبری" description="" />
               <field name="ordernews" type="list" label="ترتیب نمایش" desciption="" >
                   <option value="ASC" >صعودی</option>
                   <option value="DESC" >نزولی</option>
               </field>
		</fieldset>
	</fields>
</config>

در فایل اصلی که به نام mod_news.php هستش اومدم و با استفاده از دستورات زیر فایل helper و فایل default.php را نیز فراخوانی کردم .

require_once dirname(__file__).'/helper.php';
require JModuleHelper::getLayoutPath('mod_moje3news', $params->get('layout', 'default'));

در فایل helper هم برای اتصال به دیتابیس و انجام یک کوئری در دیتابیس از کدهای زیر استفاده کردم .

function newstemp ($category_id,$ordernews,$limitnews)
   {
       $db = JFactory::getDBO();
       $sql = "SELECT * FROM #__content WHERE state=1 AND catid='$category_id' ORDER BY id $ordernews LIMIT 0,$limitnews ";
       $db->setQuery($sql);
       $result = $db->loadAssocList();
       return $result;
   }

و در آخر در صفحه مربوط به default.php با استفاده از دستورات زیر پارامتر های موجود در فایل xml فراخوانی کردم . و بعدش با استفاده از متغییر result و دستورات مربوط به foreach اون اخبار فراخوانی کردم

$limitnews      = $params->get('limitnews');
$category_id    = $params->get('newscat');
$ordernews      = $params->get('ordernews');

$result = modP30newsHelper::newstemp ($category_id,$ordernews,$limitnews);

foreach ($result as $item)
{
   echo '<h3>'.$item['title'].'</h3><br />';
   echo mb_substr(strip_tags($item['introtext']),0,150);
   echo '<hr />';
}

خوب تا اینجا همه چی اوکی هستش و مشکلی وجود نداره .

سوال من از اینجا شروع می شود که با استفاده از پارامتر مربوط به xml که در بالا ذکر کردم شما فقط قادر هستید که یک مجموعه رو انتخاب کنید .

<field name="newscat" type="category" extension="com_content" label="مجموعه خبری" description="" />

حالا اگر من کد بالا رو تغییر بدم و به صورت زیر قرار بدم که امکان انتخاب همزمان چند مجموعه باشه : { خاصیت multiple="true" فعال کنم }

<field name="newscat" type="category" extension="com_content" multiple="true" label="مجموعه خبری" description="" />

حالا در کوئری که من به دیتابیس می دم باید چطوری بنویسم این کوئری رو ؟

کوئری که در حالت قبل من به دیتابیس می دادم به صورت زیر بود :

$sql = "SELECT * FROM #__content WHERE state=1 AND catid='$category_id' ORDER BY id $ordernews LIMIT 0,$limitnews ";

تو دیتابیسم و اون جدول مربوطه من یک ستون دارم با عنوان " featured " که مربوط به مطالب ویژه هستش و باید بهش بگم که اگر برابر با 1 بود بهم اون مطالب ویژه نمایش بده . به صورت زیر :

$sql = "SELECT * FROM #__content WHERE state=1 AND featured=1 AND catid='$category_id' ORDER BY id $ordernews LIMIT 0,$limitnews ";

اما خروجی برای بنده درست عمل نمیکنه . اینکه مشکل کجاست دقیق نمی دونم .

برای اینکه خوب متوجه مشکلم بشید براتون ماژولی که ساختم قرار دادم .

https://www.dropbox.com/s/7re0fju1dl14awu/mod_moje3news.zip?dl=0

Share this post


Link to post
Share on other sites
آموزش ووکامرس قالب جوملا قالب وردپرس قالب رایگان وردپرس قالب رایگان جوملا هاست نامحدود هاست جوملا هاست لاراول هاست وردپرس هاست ارزان هاست ربات تلگرام خرید دامنه آموزش ساخت ربات تلگرام با php آموزش لاراول آموزش cPanel آموزش php آموزش فرم ساز RSform آموزش ساخت ربات جذب ممبر آموزش ساخت ربات دوستیابی آموزش ساخت ربات فروشگاهی برای ووکامرس آموزش طراحی سایت داینامیک با php آموزش بخش پشتیبانی با rsticket

شما وقتی چند مجموعه انتخاب میکنید شناسه ی مجموعه ها رو باید explode کنید و ارایه کنید. در واقع شما با انتخاب چند مجموعه ، چند شناسه دریافت میکنید.

سپس کوئری خودتون رو باید تغییر بدید به صورت زیر:

[color=#000000]  $sql = "SELECT * FROM #__content WHERE state=1 AND featured=1 AND (catid='$cat_id1' OR catid='$cat_id2'  OR catid='$cat_id3'  ) ORDER BY id $ordernews LIMIT 0,$limitnews ";  
[/color]

Share this post


Link to post
Share on other sites
شما وقتی چند مجموعه انتخاب میکنید شناسه ی مجموعه ها رو باید explode کنید و ارایه کنید. در واقع شما با انتخاب چند مجموعه ، چند شناسه دریافت میکنید.

سپس کوئری خودتون رو باید تغییر بدید به صورت زیر:

[color=#000000]  $sql = "SELECT * FROM #__content WHERE state=1 AND featured=1 AND (catid='$cat_id1' OR catid='$cat_id2'  OR catid='$cat_id3'  ) ORDER BY id $ordernews LIMIT 0,$limitnews ";  
[/color]

ممنون بابت توضیحتون اما درست متوجه نشدم . این explode کردن به چه معنا هستش و اینکه امکان داره مدیریت بیش از چندین مجموعه ایجاد بکنه . خوب ما قرار هستش که یک ماژولی بنویسم که خودش به صورت اتوماتیک تعداد مجموعه ها رو شناسایی کنه ، شاید بخوان سه مجموعه انتخاب بکنن و شاید بخوان ده ها مجموعه انتخاب بکنن .

کدهام هم قرار دادم . ممنون میشم بیشتر توضیح بدید .

Share this post


Link to post
Share on other sites

بهترین کار این هست که یکی از ماژولهای پیشفرض مطالب خود جوملا رو بررسی کنید و ازش نمونه برداری کنید چون خود جوملا برای قسمت مطالب کلاسها و کدهایی داره که کدنویسی رو راحتتر میکنه

Share this post


Link to post
Share on other sites

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری