از این رو بازار کدنویسی سیستمهای مدیریت محتوا اختصاصی بسیار داغ است و افراد زیادی از این بازار برای کسب درآمد خودشان استفاده میکنند. اگر شما هم علاقهمند به کدنویسی در زبان پی اچ پی و همچنین نوشتن یک سیستم مدیریت محتوا هستید در این مقاله با ما همراه باشید. در مقاله آموزش ساخت cms با php قصد داریم به طور کلی به نحوه کدنویسی در این سیستمها بپردازیم. قطعا کدنویسی یک سیستم مدیریت محتوا میتواند کار بسیار هیجانانگیز و جذابی باشد. اگر شما هم به این موضوع علاقهمند هستید این مطلب را همراه با ما دنبال کنید. قبل از اینکه به سراغ آموزش ساخت cms با php برویم در صورتی که به زبان برنامه نوسی PHP آشنایی کافی ندارید میتوانید برای یادگیری این زبان برنامه نویسی از آموزش برنامه نویسی پی اچ پی PHP فرادرس استفاده کنید.
سیستم مدیریت محتوا چیست؟
یک سیستم مدیریت محتوا (CMS) یک برنامه وب است که برای نظارت بر محتوا با وظایفی مانند ایجاد، تغییر و حذف محتوا توسط کاربران مختلف برای نمایش به کاربران نهایی استفاده میشود. یک CMS معمولاً دارای دو بخش مهم است: برنامه مدیریت محتوا (CMA)، به عنوان رابط کاربری جلویی که به مشتری، حتی با مهارت محدود، اجازه میدهد بدون واسطهگری مدیر وبسایت، محتوا را از یک سایت اضافه، تغییر دهد و حذف کند. همچنین یک برنامه تحویل محتوا (CDA)، که substance را جمع میکند و سایت را به روز نگه میدارد نیز بخشی از cms به حساب میآید.
بسیاری از سازمانها از سیستمهای مدیریت محتوا در وبسایتهای خود برای توزیع محتوایی که مرتبط با کسبوکارشان است، استفاده میکنند. معروفترین سیستم مدیریت محتوا در دنیا وردپرس است که افراد زیادی از آن استفاده میکنند. سیستمهای مدیریت محتوا معمولا احتیاج به یک نرمافزار مدیریت پایگاه داده مانند مای اس کیو ال دارند که میتواند به آنها در مدیریت پایگاه داده کمک کند. قطعا وظیفه سیستم مدیریت محتوا مدیریت کردن پایگاه داده نیست و تنها به ثبت اطلاعات در پایگاه داده میپردازد.
معمولا افرادی درخواست CMSهای اختصاصی را میدهند که صاحب یک شرکت یا یک کسبوکار بزرگ هستند. به طور کلی داشتن یک وبسایت باعث افزایش فروش و معرفی برند شما به سایرین میشود. اگر بودجه زیادی را برای این کار کنار گذاشتهای قطعا بهتر است که از cms اختصاصی استفاده کنید. استفاده کردن از سی ام اسهای اختصاصی میتواند مزایا مختلفی را برای شما در برداشته باشد.
شروع آموزش ساخت cms با php
برای ساختن یک سی ام اس اختصاصی قطعا باید مراحل متعددی را طی کنید. گذراندن هر کدام از این مراحل کاملا وابسته به ساختاری است که خودتان برای سی ام اس مورد نظر قصد دارید ایجاد کنید. برای ساختن یک سی ام اس ساده باید مراحل زیر را طی کنید:
مرحله اول ایجاد پایگاه داده Mysql
- ترمینال ویندوز را باز کنید و کد زیر را تایپ کنید.
mysql -u username -p
- حالا دیتابیس مورد نظر شما ایجاد شده است.
- به Mysql بروید و در قسمت Prompt کد زیر را تایپ کنید.
create database cms;
- حال باید از Mysql خارج شوید. برای این کار کافی است که exit را تایپ کنید.
ایجاد جداول پایگاه داده
بعد از طی کردن مراحل بالا شما یک پایگاه داده جدید و خالی ایجاد کردهاید. این پایگاه داده درون خود هیچ جدولی ندارد و نیاز است که در آن یک سری جدول را قرار دهید. از این جداول برای ذخیرهسازی دادههای مربوط به سایت استفاده خواهیم کرد. ایجاد صحیح این جداول و همچنین توجه به معماری پایگاهداده اهمیت بسیار زیادی دارد و میتواند در عملکرد سایت شما تاثیرگذار باشد. همچنین شما باید با توجه به کاربرد سایت مورد نظر و همچنین عمکلرد آن جداول مورد نیاز خودتان را ایجاد کنید. به طور کلی ایجاد جدولهای پایگاه داده برای یک سیستم مدیریتم محتوا به شکل زیر صورت میگیرد.
DROP TABLE IF EXISTS articles; CREATE TABLE articles ( id smallint unsigned NOT NULL auto_increment, publicationDate date NOT NULL, # When the article was published title varchar(255) NOT NULL, # Full title of the article summary text NOT NULL, # A short summary of the article content mediumtext NOT NULL, # The HTML content of the article PRIMARY KEY (id) );
همانطور که میدانید از زبان اس کیو ال برای کدنویسی در دیتابیس استفاده میشود. در ادامه میتوانید توضیحاتی را در رابطه با کد بالا مشاهده کنید:
- DROP TABLE IF EXISTS: این کد در صورتی که جدول مقالات وجود داشته باشد هر گونه اطلاعات اضافی را کاملا حذف میکند. ما این کار را انجام میدهیم زیرا نمیتوانیم جدولی با نام مشابه را به عنوان جدول فعلی مشخص کنیم.
- خط بعدی فیلد publicationDate را ایجاد میکند که تاریخ توزیع هر مقاله را ذخیره میکند. این فیلد دارای یک نوع داده از تاریخ است که به این معنی است که میتواند مقادیر “تاریخ” را ذخیره کند.
- CREATE TABLE یک کلید را برای جدول مشخص میکند. یک کلید را میتوان شاخص نیز نامید، و در اصطلاح اولیه، کشف دادهها در جدول را سریعتر میکند و این به ضرر فضای اضافی است. بنابراین، فیلد id را یک کلید اولیه میکنیم. هر جدول میتواند یک کلید اصلی داشته باشد. این کلیدی است که هر رکورد را در جدول تشخیص میدهد. همچنین با افزودن این کلید، MySQL میتواند یک مقاله وابسته به ID آن را به سرعت بازیابی کند.
از آنجایی که ما طرح جدول خود را ساختهایم، باید آن را در MySQL قرار دهیم تا جدول واقعی را بسازیم. برای انجام این کار، یک پنجره ترمینال باز کنید و پوشه حاوی فایل tables.sql خود را تغییر دهید:
mysql -u username -p cms < tables.sql
ایجاد فایل پیکربندی
تا این بخش از مقاله آموزش ساخت cms با php یک دیتابیس برای سیستم مدیریت محتوا مورد نظر خودمان ایجاد کردیم. حال که پایگاه داده را به درستی ایجاد کردید بهتر است که شروع به نوشتن کد پی اچ پی کنید. برای انجام این کار یک پوشه با نام config.php ایجاد کنید. سپس باید کدهای زیر را درون آن قرار دهید:
<?php ini_set( "display_errors", true ); date_default_timezone_set( "Australia/Sydney" ); // http://www.php.net/manual/en/timezones.php define( "DB_DSN", "mysql:host=localhost;dbname=cms" ); define( "DB_USERNAME", "username" ); define( "DB_PASSWORD", "password" ); define( "CLASS_PATH", "classes" ); define( "TEMPLATE_PATH", "templates" ); define( "HOMEPAGE_NUM_ARTICLES", 5 ); define( "ADMIN_USERNAME", "admin" ); define( "ADMIN_PASSWORD", "mypass" ); require( CLASS_PATH . "/Article.php" ); function handleException( $exception ) { echo "Sorry, a problem occurred. Please try later."; error_log( $exception->getMessage() ); } set_exception_handler( 'handleException' ); ?>
به طور کلی کد بالا در رابطه با نمایش خطاها و همچنین کنترل آنها است. البته تنظیمات دیگری هم برای کنترل کردن بخشهای مختلف در آن قرار داده شده است.
ایجاد فایل مقالات
کلاس Article از جمله کلاسهای ضروری برای هر مقالهای است. هر وبسایتی باید بتواند که مقالات خود را از پایگاه داده واکشی کند. از این رو باید یک کلاس برای این کار ایجاد شود. پس از ساخت این کلاس، ایجاد، به روز رسانی، بازیابی و حذف مقالات برای سایر محتویات CMS ما ساده خواهد بود. در پوشه cms یک پوشه classes ایجاد کنید. در آن پوشه classes یک فایل جدید به نام Article.php ایجاد کنید. شما باید در پوشه مقالات سایت خودتان کدهای زیر را کپی کنید.
<?php /** * Class to handle articles */ class Article { // Properties /** * @var int The article ID from the database */ public $id = null; /** * @var int When the article was published */ public $publicationDate = null; /** * @var string Full title of the article */ public $title = null; /** * @var string A short summary of the article */ public $summary = null; /** * @var string The HTML content of the article */ public $content = null; /** * Sets the object's properties using the values in the supplied array * @param assoc The property values */ public function __construct( $data=array() ) { if ( isset( $data['id'] ) ) $this->id = (int) $data['id']; if ( isset( $data['publicationDate'] ) ) $this->publicationDate = (int) $data['publicationDate']; if ( isset( $data['title'] ) ) $this->title = preg_replace ( "/[^\.\,\-\_\'\"\@\?\!\:\$ a-zA-Z0-9()]/", "", $data['title'] ); if ( isset( $data['summary'] ) ) $this->summary = preg_replace ( "/[^\.\,\-\_\'\"\@\?\!\:\$ a-zA-Z0-9()]/", "", $data['summary'] ); if ( isset( $data['content'] ) ) $this->content = $data['content']; /** * Sets the object's properties using the edit form post values in the supplied array * * @param assoc The form post values */ public function storeFormValues ( $params ) { // Store all the parameters $this->__construct( $params ); // Parse and store the publication date if ( isset($params['publicationDate']) ) { $publicationDate = explode ( '-', $params['publicationDate'] ); if ( count($publicationDate) == 3 ) { list ( $y, $m, $d ) = $publicationDate; $this->publicationDate = mktime ( 0, 0, 0, $m, $d, $y ); } } } /** * Returns an Article object matching the given article ID * * @param int The article ID * @return Article|false The article object, or false if the record was not found or there was a problem */ public static function getById( $id ) { $conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD ); $sql = "SELECT *, UNIX_TIMESTAMP(publicationDate) AS publicationDate FROM articles WHERE id=:id"; $st = $conn->prepare( $sql ); $st->bindValue( ":id", $id, PDO::PARAM_INT ); $st->execute(); $row = $st->fetch(); $conn = null; if ( $row ) return new Article( $row ); } /** * Returns all (or a range of) Article objects in the DB * @param int Optional The number of rows to return (default=all) * @return Array|false A two-element array : results => array, a list of Article objects; totalRows => Total number of articles */ public static function getList( $numRows=1000000 ) { $conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD ); $sql = "SELECT SQL_CALC_FOUND_ROWS *, UNIX_TIMESTAMP(publicationDate) AS publicationDate FROM articles ORDER BY publicationDate DESC LIMIT :numRows"; $st = $conn->prepare( $sql ); $st->bindValue( ":numRows", $numRows, PDO::PARAM_INT ); $st->execute(); $list = array(); while ( $row = $st->fetch() ) { $article = new Article( $row ); $list[] = $article; } // Now get the total number of articles that matched the criteria $sql = "SELECT FOUND_ROWS() AS totalRows"; $totalRows = $conn->query( $sql )->fetch(); $conn = null; return ( array ( "results" => $list, "totalRows" => $totalRows[0] ) ); } /** * Inserts the current Article object into the database, and sets its ID property. */ public function insert() { // Does the Article object already have an ID? if ( !is_null( $this->id ) ) trigger_error ( "Article::insert(): Attempt to insert an Article object that already has its ID property set (to $this->id).", E_USER_ERROR ); // Insert the Article $conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD ); $sql = "INSERT INTO articles ( publicationDate, title, summary, content ) VALUES ( FROM_UNIXTIME(:publicationDate), :title, :summary, :content )"; $st = $conn->prepare ( $sql ); $st->bindValue( ":publicationDate", $this->publicationDate, PDO::PARAM_INT ); $st->bindValue( ":title", $this->title, PDO::PARAM_STR ); $st->bindValue( ":summary", $this->summary, PDO::PARAM_STR ); $st->bindValue( ":content", $this->content, PDO::PARAM_STR ); $st->execute(); $this->id = $conn->lastInsertId(); $conn = null; } /** * Updates the current Article object in the database. */ public function update() { // Does the Article object have an ID? if ( is_null( $this->id ) ) trigger_error ( "Article::update(): Attempt to update an Article object that does not have its ID property set.", E_USER_ERROR ); // Update the Article $conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD ); $sql = "UPDATE articles SET publicationDate=FROM_UNIXTIME(:publicationDate), title=:title, summary=:summary, content=:content WHERE id=:id"; $st = $conn->prepare ( $sql ); $st->bindValue( ":publicationDate", $this->publicationDate, PDO::PARAM_INT ); $st->bindValue( ":title", $this->title, PDO::PARAM_STR ); $st->bindValue( ":summary", $this->summary, PDO::PARAM_STR ); $st->bindValue( ":content", $this->content, PDO::PARAM_STR ); $st->bindValue( ":id", $this->id, PDO::PARAM_INT ); $st->execute(); $conn = null; } /** * Deletes the current Article object from the database. */ public function delete() { // Does the Article object have an ID? if ( is_null( $this->id ) ) trigger_error ( "Article::delete(): Attempt to delete an Article object that does not have its ID property set.", E_USER_ERROR ); // Delete the Article $conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD ); $st = $conn->prepare ( "DELETE FROM articles WHERE id=:id LIMIT 1" ); $st->bindValue( ":id", $this->id, PDO::PARAM_INT ); $st->execute(); $conn = null; } } ?>
ایجاد کردن فایل index.php
حال که به طور کلی فایلهای مختلف سی ام اس را ایجاد کردهایم وقت آن رسیده است که فایل index.php ایجاد کنیم. این در حقیقت اسکریپتی است که نمایش صفحات جلویی وب سایت را کنترل می کند. این فایل را نیز در پوشه سیستم مدیریت محتوا خودتان ایجاد کنید. همچنین میتوانید از کدهای زیر برای آن استفاده کنید.
<?php require( "config.php" ); $action = isset( $_GET['action'] ) ? $_GET['action'] : ""; switch ( $action ) { case 'archive': archive(); break; case 'viewArticle': viewArticle(); break; default: homepage(); } function archive() { $results = array(); $data = Article::getList(); $results['articles'] = $data['results']; $results['totalRows'] = $data['totalRows']; $results['pageTitle'] = "Article Archive | Widget News"; require( TEMPLATE_PATH . "/archive.php" ); } function viewArticle() { if ( !isset($_GET["articleId"]) || !$_GET["articleId"] ) { homepage(); return; } $results = array(); $results['article'] = Article::getById( (int)$_GET["articleId"] ); $results['pageTitle'] = $results['article']->title . " | Widget News"; require( TEMPLATE_PATH . "/viewArticle.php" ); } function homepage() { $results = array(); $data = Article::getList( HOMEPAGE_NUM_ARTICLES ); $results['articles'] = $data['results']; $results['totalRows'] = $data['totalRows']; $results['pageTitle'] = "Widget News"; require( TEMPLATE_PATH . "/homepage.php" ); } ?>
بقیه کار باید چگونه صورت بگیرد؟
در مقاله آموزش ساخت cms با php سعی شد به طور کلی شما را با کدهایی آشنا کنیم که میتوانید با استفاده از آنها اقدام به ایجاد بخشهای مختلفی مانند صفحه مقالات و آرشیو کنید. قطعا برای ایجاد یک سی ام اس راه درازی را در پیش دارید و باید به مباحث مختلفی تسلط داشته باشید. این مباحث میتواند شامل کدها و موارد مختلفی شود. اگر علاقهمند به یادگیری چنین کارهایی هستید به شما پیشنهاد میکنم که از فیلم آموزشی برای یادگیری خودتان استفاده کنید. یادگیری برنامهنویسی بسیار آسان است اما به شرط آن که اساتید خبرهای را داشته باشید.
سخن آخر در آموزش ساخت cms با php
مقاله آموزش ساخت cms با php به طور کلی یک کمک بزرگ برای افرادی بود که قصد دارند وارد حوزه کدنویسی به زبان پی اچ پی و البته تولید سی ام اسهای حرفهای شوند. اگر شما هم چنین قصدی را دارید پیشنهاد میکنم که حتما سری به فرادرس بزنید. فرادرس که یکی از بهترین مرجعهای آموزشی در ایران است و میتواند یک راهنمای جامع در این حوزه برای شما باشد. اگر از مطالعه این مقاله لذت بردید در بخش نظرات انتقادها و پیشنهادهای خودتان را با ما در میان بگذارید. شاد و موفق و پیروز باشید.
2 پاسخ
سلام میشه یه cms آموزش بدین یه فیلد آپلود فایل تو پنل کاربری کاربر داشته باشه بعد از آپلود فایل وضعیت در حال پردازش وبعد از آپلود فایل توسط کاربر بسته به نظر مدیر سایت پیغام رد شد یا تایید شد رو کنار فیلد آپلود فایل به کاربر نشون بده.
درست مثل پیغام در انتظار پاسخ یا پاسخ داده شد تو تیکت پشتیبانی.
خیلی عالی بود من امتیاز ۵ رو برای این آموزش ثبت کردم. ممنون از زحماتتون.