بیان خلاصه ای از بحث توسط هوش مصنوعی:
جوملا! سیستم مدیریت محتوای قابل توسعه است. سال ها است که مردم از جوملا برای ساختن وب سایت های عالی، مانند وب سایت های شرکت، سایت های انجمن ها، شبکه های اجتماعی خاص، وبلاگ ها و وب سایت های مدارس استفاده می کنند.
محبوبیت جوملا ناشی از بسیاری از ویژگی ها و عملکرد هایی است که با آن ارائه می شود - مدیریت محتوا و کاربر، فیلد های سفارشی برای گسترش مقالات و ایجاد دایرکتوری ها، و جستجوی داخلی و غیره.
با وجود این همه ویژگی های عالی، تمام مشکلاتی که ممکن است هنگام ساخت یک برنامه تحت وب با آن مواجه شوید را حل نمی کند. در این کتاب قصد دارید نحوه استفاده از جوملا برای ایجاد راه حل را یاد بگیرید، در حالی که از جوملا Framework TM برای آسان کردن کار شما، استفاده می کنید. در طول این کتاب، نحوه کد نویسی کامپوننت، ماژول ها، پلاگین ها و حتی قالب ها را بررسی می کنیم تا راه حلی یکپارچه برای مشکلات فنی خود به دست بیاوریم.
همیشه اولین قدم برای حل یک مشکل فنی، نوشتن یک برنامه ی خوب است. فرآیند برنامه ریزی، درک بهتری از مسئله را فراهم می کند. در این فصل به بررسی مسئله ی خود و نوشتن برنامه ای برای حل آن می پردازیم.
ما تشخیص خواهیم داد که کدام بخش از مسئله ی ما با کدام نهادهای فنی مطابقت دارد. پس از آن، خواهید دید که تعریف معماری اولیه پروژه چقدر آسان است. در نهایت، ما برخی از داده های ساختگی را اضافه می کنیم که هنگام شروع آزمایش کارمان، مفید خواهد بود.
در این فصل قصد داریم به موضوعات اصلی زیر بپردازیم:
- درک اینکه کامپوننت جوملا چیست
- تبدیل مسئله شما به برنامه
- تعریف ساختار پایگاه داده کامپوننت شما
- افزودن داده های ساختگی به پایگاه داده شما
در پایان این فصل، شما قادر خواهید بود برای توسعه جوملا، کامپوننتی طراحی و برنامه ریزی کنید که یک مسئله را در دنیای واقعی حل می کند.
الزامات فنی
برای توسعه جوملا به نرم افزار خاصی نیاز ندارید! یک ویرایشگر متن باید این کار را انجام دهد، اما استفاده از ابزارهای مناسب به شما کمک می کند تا سریعتر رشد کنید. همچنین، تمام ابزارهایی که توصیه می کنیم رایگان هستند و برای چندین سیستم عامل در دسترس هستند:
- وب سایت جوملا، توصیه می کنیم از سایت رایگان https://launch.joomla.org برای اهداف آزمایشی استفاده کنید که عالی است و تمام ابزارهای سرور مورد نیاز ما را دارد. برای اهداف توسعه، بهتر است از Local LAMP محلی استفاده کنید زیرا دسترسی بهتر و سریع تری به همه فایلها دارید.
- Visual Studio Code به عنوان ویرایشگر کد شما، می توانید آن را از https://code.visualstudio.com/ دانلود کنید.
- PhpMyAdmin به عنوان یک برنامه پایگاه داده، برای ویرایش ساختار پایگاه داده سایت و راه اندازی پنل سرور است (در ابزارهای سرور جوملا گنجانده شده است).
میتوانید فایل های کد این فصل را در GitHub پیدا کنید:
https://github.com/PacktPublishing/Developing-Extensions-for-Joomla-5/tree/chapter01
درک اینکه کامپوننت جوملا چیست؟
در جوملا، ما چندین نوع افزونه داریم: کامپوننت ها، ماژول ها، پلاگین ها، قالب ها، کتابخانه ها، بسته ها و زبان ها. همه این ها هدف خاصی در سیستم دارند، اما به دلیل انعطاف پذیری جوملا، در برخی موارد، انتخاب یک نوع بر دیگری دشوار می شود.
آیا باید از یک ماژول برای درج محتوا در انتهای مقالاتم استفاده کنم یا بهتر است از افزونه محتوا استفاده کنم؟
آیا از یک افزونه کاربر سفارشی برای افزودن فیلدها به پروفایل کاربری خود استفاده می کنم یا باید از قابلیت های Custom Fieldsجوملا استفاده کنم؟
پس از مطالعه این کتاب، می توانید گزینه ای را انتخاب کنید که به بهترین وجه با پروژه شما مطابقت دارد.
اصلی ترین و کامل ترین افزونه ها در جوملا کامپوننت ها هستند. می توانیم کامپوننت ها را به عنوان برنامه های کاربردی کوچک وب به تنهایی در جوملا در نظر بگیریم. کامپوننت ها نیازی به پشتیبانی از هیچ بخش دیگری از سایت جوملایی ندارند. آنها می توانند جدا از بقیه ی سایت شما، کار کنند و دامنه وب سایت شما را کامل می کنند.
در هر صورت، زمانی که هر کامپوننتی با سایر اجزای دیگر (مانند ماژول ها یا پلاگین ها) جوملا ترکیب شود، بیشترین بهره را خواهید برد.
وب سایت شما توسط صفحات زیادی تشکیل شده است و هر صفحه دارای یک URL است. در جوملا، هر بار که به یک URL دسترسی پیدا می کنید، در داخل کامپوننتی از جوملا هستید. بنابراین، کامپوننت ها درخواست های صفحه خاص خود را دارند و هیچ کامپوننت دیگری از سایت نمی تواند بر روی آنها تأثیر بگذارد وقتی URL آنها را بارگذاری می کنید. با وجود این انزوا، آنها می توانند با استفاده از کد خود با کامپوننت های دیگر ارتباط برقرار کنند.
برخی ویژگی های کامپوننت در جوملا به شرح زیر است:
- کامپوننت های جوملا یک نقطه ورود امن برای درخواست های شما ارائه می دهند. با استفاده از آنها می توانید برای سرویس های خارجی webhooks[1] ایجاد کنید یا داده ها را از فرم ها دریافت کنید.
- کامپوننت ها معمولا دارای یک Backend و frontend هستند. Backend معمولا به مدیران و مدیران سایت محدود می شود و برای مدیریت داده ها استفاده می شود.
- در اکثر سناریوها، کامپوننت شما باید داده ها را در پایگاه داده ذخیره کند. به عنوان مثال، اگر می خواهید یک کامپوننت برای پیگیری پیشرفت پروژه های خود ایجاد کنید، باید نام پروژه های خود، وضعیت آنها و احتمالاً اطلاعات بیشتری را در پایگاه داده ذخیره کنید. به همین دلیل، کامپوننت ها جداول جدیدی را در پایگاه داده شما نصب می کنند تا اطلاعات را ذخیره کنند.
- کامپوننت ها به طور خودکار، خود را به منوی Backend جوملا اضافه می کنند و آیتم های منوی جدیدی را نصب می کنند، تا داده های خود را در قسمت frontendسایت نشان دهید.
در واقع، در جوملا، شما همیشه با کامپوننت ها کار می کنید، زیرا هر صفحه (backend یا frontend) سایت شما یک نمای کامپوننت است.
اکنون که برخی از ویژگی های یک کامپوننت را می دانیم، بیایید ببینیم چگونه می توانیم از آنها برای حل مسائل دنیای واقعی استفاده کنیم.
تبدیل مسئله شما به برنامه
هر زمان که مشتریان شما ویژگی جدیدی را برای وب سایت خود درخواست می کنند، باید به نحوه اجرای آن فکر کنید. بیشتر فرآیند طراحی شامل درک نیازهای مشتری شما و توانایی ترجمه آنها به تمام بخش هایی که با برنامه وب شما مطابقت دارند.
مدل سازی برنامه ها به عناصر کدنویسی، موضوع پیچیده ای است که تحقیقات زیادی را در بر می گیرد. در این کتاب، ما یک رویکرد عملی را در پیش خواهیم گرفت و یک معماری بصری و ساده برای داده های خود خواهیم ساخت.
در هر صورت، شما باید افزونه خود را به درستی برنامه ریزی کنید و برای آن، باید کلمات مشتری خود را به بلوک های کدنویسی تبدیل کنید.
شناسایی عناصر شما
در هر مسئله ای که می خواهید حل کنید، می توانید عناصر مختلفی را که بخشی از مسئله شما را تشکیل می دهند شناسایی کنید:
- نهادها : یک نهاد، عنصری از مسئله شما است که سایر عناصر می توانند با آن تعامل داشته باشند. به عنوان مثال، می تواند یک شرکت، یک کاربر، یک کار یا یک فاکتور باشد. همچنین، یک نهاد به داده هایی اشاره دارد که باید در پایگاه داده ذخیره شوند.
- رابطه : یک رابطه، نهاد ها را بدون هیچ عملی بین آنها، به یکدیگر مرتبط می کند. به عنوان مثال، یک مشتری دارای یک شرکت است.
یک مثال در دنیای واقعی
در این کتاب، ما یک مسئله دنیای واقعی را حل خواهیم کرد. ما باید یک ابزار مدیریت پروژه ایجاد کنیم که به ما امکان می دهد موارد زیر را انجام دهیم (اینها نیز الزامات حل مسئله هستند):
- ذخیره اطلاعات مشتری
- فاکتورها را تولید کنید
- ایجاد وظایف برای پروژه
حال، اجازه دهید با تعریف نهاد برای این مسئله شروع کنیم.
تعریف نهادهای شما
نهاد های داده یکی از مهمترین بخش های پروژه ما است. آنها با داده هایی که ما باید برای پروژه خود ذخیره کنیم مطابقت دارند. نهاد های داده جداول در پایگاه داده ما خواهند بود که در آن اطلاعات کامپوننت خود را ذخیره می کنیم.
برخی از این نهاد های داده به راحتی قابل تشخیص هستند. به عنوان مثال، اگر پروژه شما دارای کاربران باشد، کاربر با یک نهاد داده مطابقت دارد.
یافتن نهاد ها
در بخش ابزار مدیریت پروژه ما، می توانیم چندین نهاد را در یک نگاه ببینیم:
شکل 1.1 - نهاد هایی که در مسئله خود شناسایی می کنیم
در این شکل نهاد های زیر را می بینیم :
- مشتریان : این نماینده مشتریان ما است و به اندازه کافی اطلاعاتی برای شناسایی آنها ( نام، نام خانوادگی، ایمیل، نام شرکت، شناسه شرکت، آدرس شرکت، و تلفن) خواهد بود.
- فاکتورها : این شامل فاکتورهایی است که ممکن است برای مشتریان خود ارسال کنیم. سیستم فاکتور ما بسیار ساده خواهد بود. فقط به اطلاعات مشتری، خدمات ارائه شده و فیلدهای مقدار نیاز دارد.
- پروژه ها : پروژه ها نهاد هایی در مسئله ما هستند. همانطور که از اسمش معلوم است، خدماتی که مشتریان ما درخواست کرده اند. در مورد پروژه ما، پروژه ها فقط یک نام، توضیحات و مهلت خواهند داشت.
- دسته پروژه : ما می خواهیم بتوانیم چندتایی را از هم متمایز کرد، دسته بندی ها در پروژه ما، و یک راه آسان برای انجام این کار، اضافه کردن دسته ها به پروژه های ما است. دسته های پروژه ما فقط به یک نام نیاز دارند.
- وظایف : وظایف، کارهایی هستند که باید برای پروژه خود انجام دهیم، بنابراین منطقی است آنها را به عنوان نهاد هایی در الزامات ما در نظر بگیرید. در سناریوی ما، یک کار دارای یک نام، یک توضیح، یک وضعیت و مهلت خواهد داشت
چه اقداماتی می توانیم در مسئله خود پیدا کنیم؟
ما نه تنها نیاز به تعریف موجوداتی داریم که سیستم ما را تشکیل می دهند، بلکه باید اقداماتی را نیز شناسایی کنیم که می توانند برای همه آنها اعمال شوند. کنش ها وظایفی هستند که می توانیم بر روی نهاد های خود انجام دهیم. به عنوان مثال، در افزونه خود، می توانیم پروژه های جدید ایجاد کنیم یا مشتریان موجود را ویرایش کنیم. بنابراین، ایجاد و ویرایش اقدامات کامپوننت ما هستند.
برخی از انواع اقدامات رایج که به همه نهادها مربوط است و هر بار باید روی آنها حساب کنید :
- Create entity : این عمل به ما امکان می دهد داده ها را به پایگاه داده خود اضافه کنیم. هر زمان که یک نهاد ایجاد می کنید، یک ردیف به جدول آن در پایگاه داده اضافه می شود.
- Edit entity : این عمل به ما امکان می دهد داده هایی را که قبلاً به پایگاه داده اضافه کرده ایم تغییر دهیم. هنگامی که یک نهاد را ویرایش می کنید، هیچ ردیف اضافی به پایگاه داده اضافه نمی شود.
- Remove entity : این عمل داده هایی را که قبلاً به پایگاه داده اضافه کرده بودیم را حذف می کند. هنگامی که یک نهاد را حذف می کنید، حداقل یک ردیف را از پایگاه داده حذف می کنید. یا ابتدا آن را به سطل زباله منتقل کنید و بعداً آن را از سطل زباله بردارید.
- Show entity : این عمل به شما امکان می دهد داده های نهاد خود را نشان دهید. با استفاده از این عمل، هیچ داده ای در پایگاه داده شما تغییر نمی کند.
و البته، هر پروژه نیازهای خاص خود را خواهد داشت و می تواند چندین عمل داشته باشد که در این کتاب نشان داده نشده است. برای پروژه دنیای واقعی خود، اقدامات زیر را برای آن مشخص کرده ایم.
هر یک از نهادهای ما:
- مشتری : نهاد مشتری ، ما می توانیم اقدامات زیر را پیدا کنیم:
- مشتری ایجاد کنید
- مشتری را ویرایش کنید
- آرشیو مشتری
- حذف مشتری
- فاکتور : نهاد فاکتور ، ما می توانیم اقدامات زیر را تعریف کنید :
- ایجاد فاکتور
- ویرایش فاکتور
- ارسال فاکتور
لطفا توجه داشته باشید که ما اقدام حذف شده را از فاکتورها حذف کرده ایم. بیشتر کشورها به شما اجازه حذف فاکتورها را نمی دهند، بنابراین منطقی است که این اقدام را در پروژه خود در نظر نگیرید. شما باید راه حلی برای تغییر یا حذف داده های مشتری پیدا کنید. یک فاکتور همیشه باید حاوی داده های اصلی است.
- پروژه : اقدامات زیر را برای نهاد پروژه ها تعریف می کنیم:
- پروژه ایجاد کنید
- ویرایش پروژه
- آرشیو پروژه
- حذف پروژه
- دسته پروژه : اقداماتی که می توانیم اضافه کنیم برای نهاد دسته پروژه، اینها هستند:
- یک دسته پروژه ایجاد کنید
- ویرایش پروژه دسته بندی
- حذف دسته پروژه
- وظیفه : این اقدامات را برای نهاد وظیفه پیدا می کنیم :
- وظیفه ایجاد کنید
- ویرایش وظیفه
- بایگانی کار
- وظیفه را حذف کنید
تعریف روابط
نهادهای ما تنها نیستند. آنها نیاز دارند متصل شود تا عملکردی داشته باشد. به عنوان مثال، یک کار باید متعلق به یک پروژه باشد و یک مشتری ممکن است چندین فاکتور داشته باشد.
برای اینکه بتوانیم جداول پایگاه داده را ابداع کنیم، باید روابط بین همه نهاد ها را تعریف کنیم.
در مثال ما، میتوانیم روابط زیر را بیابید :
- مشتری:
- مشتریان ما می توانند در یک پروژه باشند
- مشتریان ما ممکن است چندین فاکتور داشته باشند (امیدوارم تعداد آنها زیاد باشد)
- فاکتور:
- برای هر فاکتوری باید فقط یک مشتری داشته باشیم
- هر فاکتوری مربوط به خدمات ارائه شده است، بنابراین باید حداقل یک پروژه داشته باشد ، اما ممکن است بیشتر باشد.
- پروژه:
- پروژه های ما فقط در یک دسته بندی خواهند بود
- ما در هر پروژه فقط یک مشتری خواهیم داشت
- هر پروژه از چندین کار تشکیل شده است
- وظیفه:
- هر وظیفه فقط به یک پروژه اختصاص داده می شود
این روابط در شکل زیر نشان داده شده است:
شکل 1.2 - نمایش گرافیکی روابط ما
فلش های شکل، روابط نهاد ها را نشان می دهد. هنگامی که جداول پایگاه داده خود را در بخش های زیر ایجاد می کنیم، این فلش ها فیلدهایی را به دو جدول مربوط نشان می دهد. به عنوان مثال، در جدول فاکتورها ، یک فیلد id_customer خواهیم داشت که ارتباط بین مشتری و فاکتور را نشان می دهد.
هنگامی که مسئله خود را به نهاد ها و روابط آنها ترجمه کردیم، می توانیم ساختار پایگاه داده را برای کامپوننت خود تعریف کنیم.
تعریف ساختار پایگاه داده کامپوننت شما
کامپوننت ما نیاز به ذخیره اطلاعات در پایگاه داده جوملا دارد. بنابراین، ما باید تمام جداول و ستون هایی را که برای کامپوننت خود نیاز داریم، شناسایی کنیم. هنگامی که همه عناصر مسئله خود را شناسایی کردیم، به راحتی می توان ساختار جدول را یادداشت کرد.
برای نوشتن ساختار جدول از روش زیر استفاده می کنیم :
- جداول پایگاه داده را برای نهاد ها اضافه کنید
- ستون های اطلاعات اضافی را به جداول اضافه کنید
- روابط را در پایگاه داده منعکس کنید
- ایجاد جداول (چه نوع جداولی؟ ما قبلاً جداول پایگاه داده را برای نهاد ها اضافه کرده ایم (به اولین مورد مراجعه کنید))
بیایید قبل از اضافه کردن جداول خود، با نگاهی سریع به جداول پیش فرض پایگاه داده جوملا شروع کنیم.
نگاهی گذرا به پایگاه داده جوملا
پس از نصب جوملا، شما پایگاه داده با چندین جدول پر خواهد شد. این جداول بخشی از هسته جوملا هستند.
اگر وارد PhpMyAdmin شوید، ممکن است چیزی شبیه به این مشاهده کنید:
شکل 1.3 - جداول پس از نصب جوملا!
در اینجا، شما می توانید برخی از جداول همراه با جوملا را ببینید که نباید این جداول را تغییر دهید یا محتوای آنها را مستقیماً در پایگاه داده ویرایش کنید مگر اینکه بدانید چه کاری انجام می دهید.
یکی از مواردی که ممکن است متوجه شده باشید این است که نام جدول نصب من با شما متفاوت است. در مورد من، همه جداول با پیشوند cqi_ شروع می شوند. در نصب خود، یک پیشوند متفاوت خواهید یافت.
این یک اقدام امنیتی است که در جوملا است. از زمان جوملا 1.0. با افزودن این پیشوند، از دانستن نام دقیق جداول توسط مهاجمان احتمالی جلوگیری کرده و در نتیجه از برنامه ریزی حمله مستقیم به پایگاه داده شما جلوگیری می کند.
این همچنین باعث می شود که هنگام ایجاد افزونه های خود، نتوانیم نام دقیق جدول را بدانیم. برای غلبه بر این مشکل، در جوملا می توانیم از پیشوند #__ برای نام جداول در کد افزونه استفاده کنیم. این قرارداد را در هنگام مراجعه به جداول پایگاه داده نیز در این کتاب خواهید دید.
اگر می خواهید دقیق بدانید چگونه پیشوند پایگاه داده جوملا نصب کنید، به backend سایت خود دسترسی بروید و به System بروید. در پنل System ، روی لینک System Information کلیک کنید. سپس، به تب Configuration File بروید ؛ آن را در کنار تنظیمات dbprefix پیدا کنید.
اضافه کردن جداول پایگاه داده برای نهاد ها
به عنوان یک قانون کلی، در مسئله ما ،یک جدول برای هر نهاد خواهیم داشت ، بنابراین می توانیم جداول خود را مطابق این طرح نمایش دهیم:
شکل 1.4 - نمایش جداول ما با فیلدهای آنها
این طرح ساده همه جداول را با فیلدهای آنها پوشش می دهد. حتی در این صورت، ممکن است متوجه شوید که ما هیچ اطلاعات مشتری را به فاکتور اضافه نکرده ایم. شما باید داده های مشتری را به فاکتورها اضافه کنید زیرا وقتی مشتریان را حذف می کنید، داده های مشتری روی فاکتور خود را از دست خواهید داد. دلیل آن این است که ما به تازگی فیلدهایی را اضافه کرده ایم که اطلاعات منحصر به فرد و مستقلی را در خود دارند و اکنون، می خواهیم فیلدهایی را اضافه کنیم که یک جدول را با جدول دیگر مرتبط می کند. طرح زیر را در نظر بگیرید :
شکل 1.5 - نمایش جداول ما پس از افزودن فیلدهای مرتبط
جداول ما اکنون کامل هستند زیرا تمام فیلدها و روابطی را که در بخش های قبلی مشخص کردیم را تعریف می کنند.
اضافه کردن ستون های اطلاعات اضافی به جداول
حتی اگرچه ما ساختار پایگاه داده خود را کامل کرده ایم، اگر تعدادی ستون اضافی به تعریف خود اضافه نکنیم، تعریف پایگاه داده ضعیفی خواهد بود. برای مثال، می توانیم ستونی اضافه کنیم که تاریخ ایجاد یک فاکتور را ثبت می کند. همچنین، ممکن است جالب باشد که بدانید آیا فاکتور پس از ایجاد اصلاح شده است یا خیر.
در نهایت، چگونه فیلد مشتری در جدول فاکتورها را با جدول مشتریان مرتبط می کنید ؟ ما می توانیم این کار را با افزودن متادیتا به کامپوننت خود انجام دهیم.
شما می خواهید چند ستون ابرداده را به تمام جداول خود اضافه کنید. این فیلدهای ابرداده به شما اطلاعاتی درباره زمان اضافه شدن یک ردیف جدید به جدول شما یا آخرین کاربری که آن را تغییر داده است، می دهد. بنابراین، این فیلدهای رایجی هستند که به جداول خود اضافه می کنید:
- id : برای اشاره به نهاد خاص استفاده می شود
- modified : نشان دهنده تاریخی است که نهاد ویرایش شده است
- create : نشان دهنده تاریخی است که نهاد ایجاد شده است
- modified_by : پیوندهایی به کاربری که نهاد را ویرایش کرده است
- create_by : پیوندهایی به کاربری که نهاد را ایجاد کرده است
پایگاه داده هنگامی که هر نهاد ایجاد می شود، باید مقدار ستون id را به طور خودکار ایجاد کند:
شکل 1.6 – نمایش از جداول ما پس از افزودن فیلدهای فراداده
انعکاس روابط در پایگاه داده
آخرین مرحله برای داشتن یک نمایش بصری خوب از پروژه، افزودن روابط به نمودار ما است.
پس از افزودن فیلدهای اطلاعات اضافی، روابط ما افزایش یافته است - اکنون، هر جدول از طریق فیلدهای modified_by و create_by به جدول کاربر جوملا مرتبط است.
حتی اگر نیازی به ایجاد جدول کاربر جوملا نداریم، ایده خوبی است که نمایشی از این جدول را در نمودار خود قرار دهیم. ما نیازی به پوشاندن کل جدول نداریم. فقط نشان دادن فیلدهایی که استفاده می کنیم کافی است:
شکل 1.7 - نمایش جداول ما با تمام روابط بین آنها
در اینجا، می توانید یک نمایش کامل از جداول ما، با فلش هایی که نحوه ارتباط آنها را نشان می دهد، مشاهده کنید.
همانطور که می بینید، هر جدول به جدول کاربران جوملا پیوند دارد. این به این دلیل است که ما فیلدهای مختلفی مانند modified_by یا create_by داریم که به فیلد id در جدول Joomla User مربوط می شود.
علاوه بر این، می توانیم ببینیم که جداول ما چگونه از نظر گرافیکی به هم مرتبط هستند تا بتوانیم تمام روابطی را که در بخش قبل تعریف کردیم، نمایش دهیم.
ایجاد جداول در پایگاه داده
هنگامی که ما یک نمایش واضح از جداول خود داشته باشیم، می توانیم کدی را برای ایجاد جداول در پایگاه داده خود ایجاد کنیم.
برای ایجاد جدول پروژه ها می توانید از کد زیر استفاده کنید:
CREATE TABLE IF NOT EXISTS '#__spm_projects' (
'id' int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
'name' VARCHAR(255) NOT NULL,
'alias' VARCHAR(255) NOT NULL,
'description' TEXT,
'deadline' DATETIME,
'category' INT(11),
'created' DATETIME DEFAULT NOW(),
'modified' DATETIME DEFAULT NOW(),
'created_by' INT(11) NOT NULL ,
'modified_by' INT(11) NOT NULL ,
PRIMARY KEY ('id')
) ENGINE=InnoDB;
این کد SQL جدول پروژه های ما را ایجاد می کند. برای اطمینان از منحصر بفرد بودن جداول ما و عدم تضاد با سایر افزونه های با استفاده از نام های جدول مشابه، می توانیم از یک پیشوند اضافی با نام کامپوننت خود استفاده کنیم. در مورد پروژه ی ما، از #__spm_projects استفاده خواهیم کرد. همچنین به یاد داشته باشید که قبل از استفاده از این کد برای ایجاد پایگاه داده خود، همانطور که در قسمت قبل توضیح داده شد، باید #_ را با پیشوند پایگاه داده خود جایگزین کنید.
در نهایت، توجه داشته باشید تغییر حروف در نام فیلدها اگرچه MySQLبه شما امکان می دهد از حروف در نام فیلدها استفاده کنید، از نظر تاریخی، فیلدهای پایگاه داده همه با حروف کوچک هستند. بنابراین، برای کد SQL خود، فیلدهای خود را از modifiedBy به modified_by و غیره جایگزین و تغییر نام می دهیم.
بنابراین، چرا قبلاً به "modifiedBy" اشاره کردم؟ می توانید آن را کنار بگذارید تا کمتر گیج کننده باشد.
برای ایجاد جدول وظایف، از این کد استفاده می کنیم:
CREATE TABLE IF NOT EXISTS '#__spm_tasks' (
'id' int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
'title' VARCHAR(255) NOT NULL,
'alias' VARCHAR(255) NOT NULL,
'description' TEXT,
'deadline' DATETIME,
'state' INT(3) NOT NULL,
'project' INT(11),
'created' DATETIME DEFAULT NOW(),
'modified' DATETIME DEFAULT NOW(),
'created_by' INT(11) NOT NULL ,
'modified_by' INT(11) NOT NULL ,
PRIMARY KEY ('id')
) ENGINE=InnoDB;
در این کد SQL، ما از یک نوع INT برای فیلد پروژه استفاده می کنیم. این نشان می دهد که فیلد پروژه مقدار فیلد id را از جدول # __spm_projects ذخیره می کند.
برای جدول مشتریان خود از کد مشابهی استفاده می کنیم:
CREATE TABLE IF NOT EXISTS '#__spm_tasks' (
'id' int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
'title' VARCHAR(255) NOT NULL,
'alias' VARCHAR(255) NOT NULL,
'description' TEXT,
'deadline' DATETIME,
'state' INT(3) NOT NULL,
'project' INT(11),
'created' DATETIME DEFAULT NOW(),
'modified' DATETIME DEFAULT NOW(),
'created_by' INT(11) NOT NULL ,
'modified_by' INT(11) NOT NULL ,
PRIMARY KEY ('id')
) ENGINE=InnoDB;
در این مورد، ما از یک فیلد INT برای ذخیره مقدار شناسه کاربر خود استفاده کنید از جدول #__users در قسمت user.
در نهایت، جدول فاکتورهای خود را با استفاده از این کد ایجاد می کنیم :
CREATE TABLE IF NOT EXISTS '#__spm_invoices' (
'id' int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
'items' TEXT NOT NULL,
'number' VARCHAR(25) NOT NULL,
'amount' FLOAT DEFAULT 0.0,
'customer' INT(11),
'created' DATETIME DEFAULT NOW(),
'modified' DATETIME DEFAULT NOW(),
'created_by' INT(11) NOT NULL ,
'modified_by' INT(11) NOT NULL ,
PRIMARY KEY ('id')
) ENGINE=InnoDB;
هنگامی که کد ایجاد جداول خود را داریم، می توانیم به پایگاه داده خود دسترسی پیدا کرده و آنها را ایجاد کنیم. بنابراین، به ابزار میزبانی سرور خود بروید و به سرویس گیرنده پایگاه داده خود دسترسی پیدا کنید. من توصیه می کنم از phpMyAdmin استفاده کنید ، اما ابزارهای دیگر، مانند dbadminer ، همچنین یک انتخاب عالی هستند. هنگامی که به پایگاه داده خود متصل شدید، فقط کد SQL قبلی را اجرا کنید. پس از آن، تمام جداول شما ایجاد می شود و شما آماده خواهید بود تا داده ها را به جداول خود اضافه کنید.
افزودن داده های ساختگی به پایگاه داده شما
داده های نمونه یک بخش کلیدی از هر فرآیند توسعه است. مزایا استفاده از داده های ساختگی در برنامه ما واضح است:
- نمای کلی بهتری از برنامه ارائه می دهد.
- این باعث صرفه جویی در زمان تست می شود، زیرا نیازی به معرفی داده ها در برنامه ندارید.
- این به شما کمک می کند تا خطاهای برنامه خود را شناسایی کنید زیرا می بینید که برنامه زودتر کار می کند.
- هنگامی که برنامه را منتشر می کنید، می توانید از این داده های ساختگی برای تغذیه محیط های آزمایشی خود استفاده کنید
از آنجایی که داده های ساختگی نیازی به واقعی یا دقیق بودن ندارند، می توانید فقط جملات تصادفی ایجاد کنید و آنها را در یک فایل csv. کپی کنید. با این حال، جایگزین بهتری وجود دارد و شما باید به دنبال مفید باشید. داده های ساختگی در اینجا چند نکته وجود دارد که ممکن است دنبال کنید:
- سعی کنید داده هایی را بیابید که برای زمینه شما منطقی باشد. به عنوان مثال، اگر باید شماره تلفنی را پر کنید، اعداد تصادفی را اضافه نکنید. در عوض، از عددی با 9 رقم استفاده کنید که با فرمت شماره تلفن شما مطابقت دارد.
- از اطلاعات واقعی به عنوان داده های ساختگی خود استفاده نکنید. ممکن است لو رفته باشد و شما نخواهید خانواده و دوستان خود را افشا کنید.
- سعی کنید تا حد امکان فرآیند را خودکار کنید.
- شما احتمالا به تعداد هر نهادی که دارید، به داده های ساختگی نیاز دارید.
بنابراین، با در نظر گرفتن این نکات، می خواهیم یک اسکریپت کوچک بسازیم که به ما کمک می کند داده های ساختگی ما را پاک کند.
تعریف محتوای داده های ساختگی ما
برای هر نهاد، یک فایل CSV با داده های نمونه تولید می کنیم. ما این داده ها را به جداول اخیر خود وارد می کنیم، بنابراین باید ساختار خاصی داشته باشد.
برای هر نهاد، ما ستون های زیر را خواهیم داشت (یکی در هر فیلد):
- مشتریان : نام، نام خانوادگی، ایمیل، نام شرکت، شناسه شرکت، آدرس شرکت و تلفن
- فاکتورها : خدمات ارائه شده و مبلغ
- پروژه ها : نام، توضیحات و مهلت
- وظایف : نام، توضیحات، وضعیت و مهلت
تولید خودکار داده های ساختگی
داشتن آن ایده ی خوبی است ، بیش از یک مورد نمونه در هر نهاد در کامپوننت ما. هرچه آیتم های بیشتری داشته باشید، موارد بیشتری را می توانید هنگام توسعه کامپوننت خود آزمایش کنید و متوجه شوید. همچنین، داشتن موارد تصادفی به شما کمک می کند تا مشکلات و خطاها را در مراحل اولیه کشف کنید. ممکن است موارد نمونه را یکی_یکی با دست ایجاد کنید، اما این یک کار تکراری و خسته کننده خواهد بود که مستعد خطای انسانی است. در عوض، ما می خواهیم ایجاد داده های نمونه را با استفاده از یک اسکریپت ساده PHP خودکار کنیم.
ما در حال توسعه برای جوملا هستیم و PHP را دوست داریم (از آنجایی که بیشتر برنامه نویسی جوملا با PHP انجام می شود، منطقی است که زبان دیگری را معرفی نکنیم)، قصد داریم یک اسکریپت کوچک PHP را کدنویسی کنیم. این اسکریپت از یک کتابخانه Faker PHP برای خودکار سازی فرآیند ایجاد داده ها استفاده می کند. (می توانید اطلاعات بیشتری در مورد Faker در بخش خواندن بیشتر در انتهای این فصل بیابید.) کتابخانه Faker PHP می تواند داده های جعلی را برای چندین نوع فیلد ایجاد کند و در جامعه PHP بسیار محبوب است.
بیایید یک پوشه ایجاد کنیم در مخزن ما به نام Mock و این فایل composer.json را کپی کنید :
{
"name": "project-manager/mock-data",
"description": "A script to generate mock data for the project",
"type": "project",
"license": "GPL v2",
"autoload": {
"psr-4": {
"Carcam\\MockData\\": "src/"
}
},
"require": {
"fakerphp/faker": "^1.19"
}
}
این فایل composer.json پروژه ما را تعریف می کند و به Composer می گوید که می خواهیم از کتابخانه Faker PHP در آن استفاده کنیم. پس از آن، باید composer install را در پوشه خود اجرا کنیم و اسکریپت create-mock-customers.php را ایجاد کنیم. در این فایل شروع به بارگذاری فایل Autoloader Composer می کنیم. این به ما امکان می دهد از فضای نام در اسکریپت خود استفاده کنیم. اگر با Composer آشنایی ندارید، توصیه می کنم پیوند مربوطه را در بخش مطالعه بیشتر این فصل بررسی کنید:
<?php
require_once 'vendor/autoload.php';
?>
سپس، ما باید سر فصل های فایل CSV و تعداد خطوط داده ای که می خواهیم ایجاد کنیم را تعریف کنیم.
چه مقدار داده فرضی باید ایجاد کنم؟
برای تعداد خطوط در CSV خود، از عددی بزرگتر از 20 استفاده می کنیم. در جوملا، به طور پیش فرض، 20 مورد در هر صفحه داریم، بنابراین این به ما کمک می کند حداقل دو صفحه از موارد را در لیست ها نشان دهیم.
همچنین باید مسیر ذخیره فایل حاصل را قبل از ایجاد داده تعریف کنیم:
$headers = ['firstname', 'lastname', 'email', 'company_name', 'company_id', 'company_address', 'phone'];
$totalLines = 30;
$filepath = './data/customer.csv';
وقتی اسکریپت را تنظیم کردیم، باید کلاس Faker را مقداردهی اولیه کنید و شروع به ایجاد فایل CSV خود در یک حلقه for کنید. در داخل این حلقه for ، باید یک آرایه برای ذخیره هر ستون و مقادیر به دست آمده از کلاس Faker اضافه کنیم.
در نهایت، باید آرایه $data را به خط CSV اختصاص دهیم:
$faker = Faker\Factory::create('en_US');
$csv[0] = $headers;
for ($line = 0; $line < $totalLines – 1; $line++) {
$data = array();
$data[] = $faker->firstName();
$data[] = $faker->lastName();
$data[] = $faker->email();
$data[] = $faker->company();
$data[] = $faker->ein();
$data[] = $faker->address();
$data[] = $faker->phoneNumber();
$csv[$line] = $data;
}
به محض اتمام افزودن خطوط به آرایه داده، باید فایلی را ایجاد کنیم که این داده ها را ذخیره کند. ابتدا باید فایل را ایجاد و باز کنیم. سپس، ما باید از طریق آرایه csv$ خود با یک حلقه عبور کنیم تا هر خط از فایل csv. را بنویسیم:
if (!file_exists(dirname($filepath))) {
mkdir(dirname($filepath), 0755);
}
$file = fopen($filepath, 'w');
foreach ($csv as $row) {
fputcsv($file, $row);
}
fclose($file);
فرآیند برای ایجاد فایل های داده ساختگی سایر نهادها مشابه است، بنابراین به شما توصیه میکنم کد موجود در مخزن GitHub این کتاب را بررسی کنید.
وارد کردن داده های ساختگی به پایگاه داده
هنگامی که داده های ساختگی خود را ایجاد کردیم، باید آنها را به پایگاه داده خود اضافه کنیم تا بتوانیم از آنها استفاده کنیم یا از کامپوننت خود بازیابی کنیم.
در این مرحله، ما قصد داریم، داده ها را به صورت دستی وارد کنیم. با این حال، در ادامه ی این کتاب، یاد خواهیم گرفت که چگونه می توانیم آن را در فایل های نصب قرار دهیم، (اگرچه من این روش را توصیه نمی کنم.)
نکته: توجه داشته باشید افزودن نمونه داده ها در فایل های نصب، هر بار که کاربر شما کامپوننت را نصب می کند، داده ها به همراه فایل نصبی، قابل مشاهده است. این ممکن است برای کاربرانی که اولین بار کامپوننت را نصب می کنند، جالب خواهد باشد، اما برای کاربران قدیمی، کسالت بار و آزاردهنده است.
برای شروع وارد کردن، مراحل زیر را دنبال کنید:
- برای وارد کردن داده ها به پایگاه داده خود، باید به phpMyAdmin یا ابزاری مشابه دسترسی داشته باشید و به جدول #__spm_customers که در قسمت قبل ایجاد کردیم بروید.
- سپس روی Import کلیک کنید ، فایل CSV خود را اضافه کنید و روی Import کلیک کنید :
شکل 1.8 -جدول #__spm_customers با دکمه Import در بالا سمت راست
حالا، پایگاه داده ی ما پر از داده های ساختگی است و ما آماده ایم برای مشاهده نتایج این واردات، کامپوننت خود را کد گذاری کنید.
منابع فصل
- شما می توانید در مورد نسخه سازی معنایی در https://semver.org/ مطالعه کنید.
- W3Techs سایت مرجع برای بازار CMS است. می توانید استفاده و روندهای جوملا را در سراسر جهان مشاهده کنید:
- کتابخانه FakerPHP امکانات زیادی برای ایجاد داده های جعلی ارائه می دهد. می توانید اطلاعات بیشتر در مورد آن را در لینک زیر بیابید:
- Composer استاندارد مدیریت وابستگی واقعی برای PHP است و به شما کمک می کند تا برنامه های کاربردی غنی را با استفاده از کتابخانه های شخص ثالث ایجاد کنید. می توانید اطلاعات بیشتری در مورد آن را در لینک زیر بخوانید:
- جوملا برای کار بر فضای نام تکیه دارد. فضاهای نام در PHP بسیاری از مشکلات را هنگام استفاده از کتابخانه های مختلف در کد شما حل می کند. می توانید اطلاعات بیشتری درباره فضاهای نام در کتابچه راهنمای PHP در لینک زیر بخوانید:
[1] وب هوک یک درخواست HTTP است که توسط یک رویداد در سیستم مبدا ایجاد شده و اغلب همراه حجمی از داده ها، به سیستم مقصد ارسال می شود. وب هوک ها خودکار هستند. به عبارت دیگر، هنگامی که رویداد آنها در سیستم مبدا فعال می گردد، به طور خودکار ارسال می شوند. Webhook یا وب هوک، روشی را برای یک سیستم (مبدا) فراهم می کند تا در هنگام وقوع رویداد، با سیستمی دیگر (مقصد) ارتباط برقرار نماید و اطلاعات رویداد انجام شده را به اشتراک بگذارد.