bestboy7

لود کردن فایل php تحت جوملا در یک افزونه توسط jQuery

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

ارسال شده در (ویرایش شده)

با سلام خدمت اساتید محترم.

یه ماژول (یا کامپوننت) ساده میخوام بنویسم که فرض کنید یه دکمه داره که وقتی event کلیک روی اون اتفاق می افته یه فایل php دیگه رو لود کنه و خروجیشو توی یه <div> نمایش بده. تا اینجاش مشکلی نیست و با دستورات ایجاکس jQuery امکان داره و بدون خطا کار میکنه. اما مشکل من اینه که اون فایل php خارجی خودش تحت جوملا کدنویسی شده و اون خط کد معروف جوملا هم توشه:

defined ('_JEXEC') or die('Restricted access');

و مشکل همینجاست که این فایلها رو خروجیش به این صورت نشون میده:

"Restricted access"

در واقع انگار نمیتونه از session جوملا استفاده کنه و با محدودیت دسترسی مواجه میشیم. چیکار باید بکنیم که فایلی خارجی رو که یکسری محاسبات و تبادل اطلاعات با دیتابیس داره که نیاز هست تحت جوملا نوشته بشه رو بتونم بدون مشکل با دستورات jQuery لود کنم و خروجی رو توی قسمتی از صفحه ماژول نمایش بدم.

خیلی گشتم تو نت و توی تمام سایتای حتی خارجی اما نتونستم راه حلی پیدا کنم خواهش میکنم اگه میدونید لطفا کمک کنید. همه جا راه حلهایی ارائه کرده بودن که چندتا فایل رو باید require بدی اونا رو هم امتحان کردم اما نشد.

ویرایش شده در توسط bestboy7

Share this post


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

منمون از پاسختون. دوست من هدف من لود کردن فایل خاصی نیست بلکه هدف نوشتن یه ماژول هست که توی اون از jquery استفاده میشه و چون نمیتونم کدهای بخش ارتباط با دیتابیس رو توی همون قسمت بنویسم به ناچار فایلی php ساختیم که با دیتابیس ارتباط برقرار میکنه البته این فایل هم یه فایل با استاندارد جوملا باشه نه مستقل از اون (کد تعریف JEXEC داشته باشه) و بعد این فایل رو با توابع ایجاکس jQuery لود کنم و نتیجشو تو صفحه ماژولم به نمایش در بیاره.

Share this post


Link to post
Share on other sites

از دوستان طراح . افزونه نویس هیچ کس نیست سوال من رو جواب بده؟ :(

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

Share this post


Link to post
Share on other sites

بابا یکی جواب بده. این همه برنامه نویس و مهندس و طراح وی اینجا هست. خدا رو شکر فروم هم مخصوص جوملا هست

Share this post


Link to post
Share on other sites

اول باید بگی ماژول یا کامپوننت؟ اینا با هم فرق داره .. کامپوننت رو mvc باید نوشت . اما ماژول رو به هر شکلی بنویسی بدون مشکل کار میکنه .. این رو باید اول بهم بگی تا راهنمایی دقیق کنم عزیزم .

Share this post


Link to post
Share on other sites

ارسال شده در (ویرایش شده)

نیما جان اول سلام. امن از سایت قبلی جوملا مزاحمت میشم. از وقتی اون سایت غیر فعال شد فرومش دیگه نتونستم جای مناسبیو پیدا کنم تا اینکه چند روز پیش این فروم جدید رو پیدا کردم دیدم همه هستن. بهر حال ممنون میشم بازم مثل همیشه با حسن نیت خوبت و با علمت بتونی کمکم کنی. راسش من نمیدونستم استفاده از این دستور توی کامپوننت و ماژول فرق داره. یعنی منظورتون اینه که اگه بخوام توی کامپوننت چنین کاری کنم حتما باید MVC بنویسمش و اگه کامپوننت معمولی بنویسم کار نمیکنه؟ چرا؟

دوتا سوال:

1- من میخوام ماژول بنویسم حالا چجوری این لود کردن رو انجام بدم که جواب بده؟ آخه گفتم که ماژولم نوشتم اما جواب نمیده و "Restricted access" میده (فایل ماژول رو پیوست کردم)

2- چه فرقی بین کامپوننت و ماژول هست که توی کامپوننت این دستور حتما در صورتی کار میکنه که باید MVC باشه؟ اینو متوجه نمیشم.

ویرایش شده در توسط bestboy7

Share this post


Link to post
Share on other sites

ارسال شده در (ویرایش شده)

توی برنامه نویسی شئ گرا توسط php و داخل جوملا و الگوریتم جوملا سه مرحله انجام میشه ... دریافت اطلاعات - پردازش - استخراج نتیجه ( Model - View- Controller ) یا همون MVC

داخل جوملا این مراحل برای کامپوننت به صورت 100% باید انجام بشه و در ماژول میتونه نباشه .

حالا وقتی شما کامپوننت میویسی و MVC رو رعایت میکنی سه پوشه داری به نام Models , Views , Controllers که داخل هرکدوم فایل هایی هست . مدل فایل هایی داره که قبل از انجام عملیات دریافت میشه . مثل خواندن اطلاعات از دیتابیس و یا فرمان ذخیره سازی داخل دیتابیس و... views پوشه هایی داره که کار نمایش صفحه رو داره و ظاهر کار ما رو انجام میده و اطلاعات رو میخونه و نمایش میده . controller برای صفحه هایی استفاده میشه که فرم دارند و اطلاعاتی رو ارسال میکنند تا دوباره model و view بخونند و نمایش بدند . مثلا شما اسم کسی رو مینویسی و ارسال میکنی و ذخیره میشه ... در این قسمت تمام کار با database بود .

اما داخل ماژول شما به دیتابیس نیاز نداری . پس یک قسمت یعنی مدل حذف میشه ... و چون دیتابیسی وجود ندار که اطلاعات پس از ارسال داخلش بره و ذخیره بشه پس controller هم نداری... یعنی فقط view داری... پس مهم نیست که چی رو کجا میریزی ... فقط باید از قوانین ماژول نویسی پیروی کنی تا باگ ندی .

شما توی ماژول نویسی یک پوشه به اسم tmpl داری . که یک فایل به اسم default.php داخلش قرار داره . میتونید در کنار این دیفالت ، یک پوشه به اسم lib ایجاد کنی و فایلت رو اونجا بریزی و restricted رو از بالاش برداری ( در فایل جانبی ) Access رو فقط در دیفالت رعایت کن ... حالا فکر کن داری یک اسکریپت عادی php مینویسی... راحت بنویس و آدرس دهی رو انجام بده ...

ویرایش شده در توسط نیما حبیب خدا

Share this post


Link to post
Share on other sites

مرسی نیما جان از جواب کامل و سریعت. دقیقا به جای خوبی رسیدیم. ببین من هم به همین نتیجه رسیدم که اگه فایل جانبی من php مستقل از جوملا باشه حله و کار میکنه. مشکل اینه که من چون نیاز دارم از دیتابیس جوملا استفاده کنم پس لازم هست که فایل جانبی من هم php ساده نباشه و define(_EXEC داشته باشه و این کارم رو خراب میکنه. با این تفاسیر چون من نیاز دارم توی فایل جانبیم از دیتابیس استفاده کنم باید ماژولم رو MVC بنویسم؟؟ و هیچ راه دیگه ای نداره؟

Share this post


Link to post
Share on other sites

نه .. بازم میشه کار دیگه ای کرد ... میتونی کد default.php + فایلی که میخوای لود بشه رو قرار بدی تا بررسی کنم و بگم؟

Share this post


Link to post
Share on other sites

نیما جان هنوز کد دقیقی از پردازش دیتابیسم ننوشتم چون همین ابتدا توی ایجاد ارتباط بین فایلها دچار مشکل شدم. من یه فایل ماژول پیوست میکنم که توی اون با کلیک روی یه نوشته فایل جانبی لود میشه و توی یه div نمایش میده. یه ارتباط ساده با دیتابیس داره مثلا یه فیلد از فلان جدول رو چاپ کنه. اون قسمت مهم نیست چون دستورات دیتابیس جوملاست دیگه. بعد میشه کاملش کرد. با این شرایط میتونی یه دستی به این ماژول بزنی ببینی چیکارش میشه کرد بلکه مشکل من هم حل شد. اگه هم رفرنسی از همین کار برای MVC داری اگه معرفی کنی که واضح و روشن باشه ممنونت میشم چون اینجوری که پیداست اگه هم شما لطف کنی مشکل این ماژول رو حل کنی بازم یه ضعفی وجود داره و باید کار اصولی کرد.

Share this post


Link to post
Share on other sites

چی شد کسی پیدا نشد یه جواب اجرایی و عملی بده مشکل من حل بشه....؟؟؟

Share this post


Link to post
Share on other sites

مرسی نیما جان خیلی آقایی. من منتظرم ان شالا بتونی حلش کنی آخه خیلی برام مهمه شب و روزو ازم گرفته. دیگه نمیدونستم کجا دنبال راه حل برگردم همه جا سر زدم به همه گفتم یا نمیدونستن اصلا جوملا چیه یا مصرف کننده محض بودن یا خیلی مبتدیانه افزونه نویس بودن

Share this post


Link to post
Share on other sites

یعنی خیلی گیجم..این کار امکانپذیر نیست به این شکل// دلیل : restricted access یعنی اینکه دسترسی مستقیم امکانپذیر نیست . این یک مسئله امنیتیه ...

جوملا نمیذاره شما به فایلی دسترسی مستقیم داشته باشیو برای همینه که این ارور میاد . درواقع چون شما میخواید به صورت مستقیم به یک فایل دسترسی داشته باشید اینجوری میشه .. راه حل : باید در همون فایل default.php دستور شرطی بذارید و با جاوا شرط رو صدا بزنید . با کمک onclick

Share this post


Link to post
Share on other sites

مرسی نیما جان از جوابت. اون مقاله رو خوندم اما چیزی نداشت کمک کنه در واقع نحوه اقدام به فراخوانی رو تو jquery و js گفته بود که مشکل ما فعلا این نیست. ما اونو با هر دستوری داریم فراخونی میکنیم اما مساله اینه که چون بصورت مستقیم فراخونی میشه (مکانیزم دستورات ajax فراخونی یک رشته لینک هست یعنی بصورت مستقسم این رشته رو صدا میزنه) این مساله باعث بروز خطا میشه. حالا نمیدونم راهی داره یا اینکه:

1- امکانش نیست مگر اینکه فایل php ما یا جوملایی نباشه و بصورت php مستقل باشه که در اون صورت دستورات دیتابیس کلا فرق میکنه با دستورات جوملا.

2- حتما کامپوننت و یا ماژول به شیوه MVC نوشته بشه که گویا در اون حالت نیازی به خوندن فایل مستقل نیست و میشه دستورات دیتابیسمونو با model و دستورات php و html رو با layout بنویسیم

درسته یا نه>

Share this post


Link to post
Share on other sites

نه . با این دستور توی mvc هم جواب نمیگیری. .. تنها راه اینه که با دستور شرطی از داخل فایل فراخوانی کنی .. یعنی چیزی که باید فراخوانی بشه داخل فایل باشه . مثلا تا زمانی که روی " کلیک کنید " کلیک نشده فعال نشه و بعدش فعال بشه .

Share this post


Link to post
Share on other sites

خوب اینکه میشه همون js در واقع onclick() رو واسه ابجکتمون تعریف میکنیم و یه فانکشن جاوا اسکریپت هم مینویسیم. دیگه نیازی به شرط هم نیست چون خود onclick() همین شرطی رو که گفتی برای ابجکت انجام میده.

پس نتیجه:

با jquery و دستورات ایجکس اون نمیشه فایلهای جوملا رو لود کرد؟

Share this post


Link to post
Share on other sites

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

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

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

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


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

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

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


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