Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > PHP > PHP Forum > Developing a Model-View-Controller (MVC) Component for Joomla!1.6



 

Developing a Model-View-Controller (MVC) Component for Joomla!1.6

 



Topic : 055493



โพสกระทู้ ( 28 )
บทความ ( 0 )



สถานะออฟไลน์




อันนี้ไปอ่านที่เว็บ http://docs.joomla.org เห็นว่าน่าสนใจดีเลยเอามาเล่าให้ฟัง

ใน joomla จะเรียกส่วนขยายต่าง ๆ ว่า Extension ซี่ง Extension ต่าง ๆ จะเป็นออกเป็น 5 ประเภทคือ

Templates
Components
Modules
Plugins
Languages

Templates กับ Languages ส่วนใหญ่จะรู้แล้วว่าคืออะไร ดังนั้นจะมาอธิบายส่วนที่เหลือกัน

Components เป็นโปรแกรมย่อย ๆ ที่อยู่ใน Joomla โดยส่วนใหญ่จะทำงานกับฐานข้อมูลและสามารถเพิ่ม ลบ แก้ไข ค้นหา ข้อมูลเหล่านั้นได้

Modules  เป็นส่วนที่ใช้แสดงผลข้อมูลต่าง ๆ ในฐานข้อมูลของ Joomla หรือ ดึงข้อมูลมาจากที่อื่น ๆ แสดงผล เช่น ราคาน้ำมัน,ราคาทองคำ,สภาพอากาศ ตามต่ำแหน่งต่างๆ ของ Templates
โดยส่วนใหญ่แล้วจะสนับสนุนการทำงานของ components

Plugins เป็นส่วนที่ ทำงานเหมือน switch ปิดเปิดการทำงานต่าง ๆ ของเว็บไซต์

ในที่นี้เราจะมาพูดถึงการเขียน components กัน

ก่อนเริ่มเขียนให้ไป download joomla 1.6 มาติดตั้งก่อน
editor ที่ผมใช้ คือ nentean 7.0 ใช้ในการเขียน PHP ได้ดีมาก ๆ

joomla 1.6 components  แบ่งออก เป็นสามส่วนด้วยกันคือ


  • installation (ใช้ในการติดตั้ง)

  • administrator (หลังบ้าน ใช้จัดการส่วนต่าง ๆ อันนี้สำหรับ admin)

  • public (หน้าบ้าน อันนี้สำหรับ user)



ในการติดตั้ง components 1 ครั้งจะทำการสร้างส่วนต่าง ๆ ดังนี้
   ส่วน public จะถูกนำไปติดตั้งไว้ที่ components directory
   ส่วน administrator  จะถูกนำไปติดตั้งไว้ที่ administrator/components directory
ทั้งสองจะมีส่วนที่เหมือนกันคือ  com_{componentname}/{componentname}.php

เช่น ถ้ามี components  ที่มีชื่อว่า dotahero
ข้างบนนี้จะเป็น com_dotahero/dotahero.php

Developing a Model-View-Controller (MVC) Component for Joomla!1.6 - Part 01

สร้าง folder ที่มีชื่อว่า com_helloworld
ใน folder นี้ให้สร้าง file เหล่านี้ขึ้นมา

helloworld.xml
site/helloworld.php
site/index.html
admin/index.html
admin/helloworld.php
admin/sql/index.html
admin/sql/updates/index.html
admin/sql/updates/mysql/index.html
admin/sql/updates/mysql/0.0.1.sql

helloworld.xml จะเป็นแบบนี้
Code
<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="1.6.0" method="upgrade">

       <name>Hello World!</name>
       <!-- The following elements are optional and free of formatting conttraints -->
       <creationDate>November 2009</creationDate>
       <author>John Doe</author>
       <authorEmail>[email protected]</authorEmail>
       <authorUrl>http://www.example.org</authorUrl>
       <copyright>Copyright Info</copyright>
       <license>License Info</license>
       <!--  The version string is recorded in the components table -->
       <version>0.0.1</version>
       <!-- The description is optional and defaults to the name -->
       <description>Description of the Hello World component ...</description>

       <update> <!-- Runs on update; New in 1.6 -->
               <schemas>
                       <schemapath type="mysql">sql/updates/mysql</schemapath>
               </schemas>
       </update>

       <!-- Site Main File Copy Section -->
       <!-- Note the folder attribute: This attribute describes the folder
               to copy FROM in the package to install therefore files copied
               in this section are copied from /site/ in the package -->
       <files folder="site">
               <filename>index.html</filename>
               <filename>helloworld.php</filename>
       </files>

       <administration>
               <!-- Administration Menu Section -->
               <menu>Hello World!</menu>
               <!-- Administration Main File Copy Section -->
               <!-- Note the folder attribute: This attribute describes the folder
                       to copy FROM in the package to install therefore files copied
                       in this section are copied from /admin/ in the package -->
               <files folder="admin">
                       <!-- Admin Main File Copy Section -->
                       <filename>index.html</filename>
                       <filename>helloworld.php</filename>
                       <!-- SQL files section -->
                       <folder>sql</folder>
               </files>
       </administration>
</extension>



site/helloworld.php

Code
Hello World




admin/helloworld.php
Code
Hello World administration





index.html

<html><body bgcolor="#FFFFFF"></body></html>

อธิบาย

helloworld.xml  เรียกส่วนนี้ว่า installation  เป็น File ที่ใช้ในการติดตั้ง components
ใน folder site เรียกส่วนนี้ว่า  public เป็นส่วนของหน้าเว็บ
ใน folder admin เรืยกส่วนนี้ว่า administrator เป็นส่วนของหลังเว็บ
index.html คู่มือการพัฒนาระบบของ Joomla บอกว่า ในกรณีที่ folder ที่ไม่มี file อะไรอยู่ข้างในใส่ index.html  นี้เข้าไปเพื่อความปลอดภัยของระบบ



Tag : PHP









ประวัติการแก้ไข
2011-02-03 12:32:17
2011-02-03 13:08:18
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2011-02-03 12:19:09 By : SpiderManDark View : 4577 Reply : 9
 

 

No. 1



โพสกระทู้ ( 28 )
บทความ ( 0 )



สถานะออฟไลน์


Developing a Model-View-Controller (MVC) Component for Joomla!1.6 - Part 02

แนะนำเริ่มต้น
Joomla!1.6 framework แบ่งส่วน components เป็น 3 ส่วนคือ

models  ใช้จัดการข้อมูล เช่น เขียนอ่าน file ทำงานกันฐานข้อมูล แต่มีไม่มีส่วนคำสั่งแสดงผลข้อมูล
controllers จะทำการวิเคราะห์ Request ที่รับมาจาก User และทำการ load models และ views ที่เหมาะสมกับ Request  นั้น ๆ
views   ทำหน้าที่ในการแสดงผลในรูปแบบต่างๆ เช่น error, feed, html, json, raw, xml   ใน Joomla!1.6 framework จะเรียกส่วนนี้ว่า
layout เช่น HTML layout  สำหรับแสดงผลทั่วไป XML layout  ใช้ทำงานกับ web serivce และ PDF ใชัสำหรับ พิมพ์ข้อมูล ซึ่งใน view หนึ่ง ๆ อาจมี layout  แบบเดียวหรือทั้งหมดก็ได้
 
เรียกวิธีการแบบนี้ว่า การเขียนแบบ MVC การเขียนแบบนี้จะช่วยเขียนโปรแกรมที่มีความซับซ้อนสูงได้ดีเพราะมีการแบ่งการทำงานต่่าง ๆ ออกไปตามแต่ละหน้าที่

กำหนด controllers

ใน joomla component จะไม่ใช้การส่ง Request ระหว่าง file ต่าง ๆ หากันโดยตรงแต่จะส่ง Request ไปที่ site/helloworld.php ซึ่งเรียก
จุดนี้ว่า entry point (site/{componentname}.php) เวลาดู code component ของคนอื่นให้ดูจุด entry point ก่อน

เพิ่มบรรทัดเหล่านี้เข้าในนี้
site/helloworld.php
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// import joomla controller library
jimport('joomla.application.component.controller');
 
// Get an instance of the controller prefixed by HelloWorld
$controller = JController::getInstance('HelloWorld');
 
// Perform the Request task
$controller->execute(JRequest::getCmd('task'));
 
// Redirect if set by the controller
$controller->redirect();


getInstance เป็น static member ของ class JController และ JController::getInstance('HelloWorld');; หมายถึงการสร้าง Instance จาก class JController ที่มีชื่อนำหน้าว่า HelloWorld คือชื่อ HelloWorldController ใน file controller.php

เพิ่มบรรทัดต่อไปนี้ใน
site/controller.php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// import Joomla controller library
jimport('joomla.application.component.controller');
 
/**
 * Hello World Component Controller
 */
class HelloWorldController extends JController
{
}


เมื่อไม่มีการกำหนด request ให้กับตัวแปร task จะมีการกำหนดค่าตัวแปร task เป็น display และจะเรียกใช้ view ที่มีชื่อว่า HelloWorld
(task คือตัวแปรที่ใช้สำหรับเรียกการทำงาน method ของ controller กรณีที่ไม่ได้กำหนด task จะเรียกใช้ method display ของ class
JController ซึ่ง method นี้จะเรียกใช้ view class ที่มีชื่อสัมพันธ์กับตัวเอง

Setting the view

สร้าง site/views/helloworld/view.html.php
site/views/helloworld/view.html.php
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// import Joomla view library
jimport('joomla.application.component.view');
 
/**
 * HTML View class for the HelloWorld Component
 */
class HelloWorldViewHelloWorld extends JView
{
        // Overwriting JView display method
        function display($tpl = null) 
        {
                // Assign data to the view
                $this->msg = 'Hello World';
 
                // Display the view
                parent::display($tpl);
        }
}


display method ของ Jview class ถูกเรียกจาก display task ของ JController class ในกรณีนี้ method จะแสดงข้อมูลโดยใช้
tmpl/default.php



สร้าง site/views/helloworld/tmpl/default.php
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
?>
<h1><?php echo $this->msg; ?></h1>


Packaging the component

สรุป file ทั้งหมดในบทนี้

helloworld.xml
site/index.html
site/helloworld.php
site/controller.php
site/views/index.html
site/views/helloworld/index.html
site/views/helloworld/view.html.php
site/views/helloworld/tmpl/index.html
site/views/helloworld/tmpl/default.php
admin/index.html
admin/helloworld.php
admin/sql/index.html
admin/sql/updates/index.html
admin/sql/updates/mysql/index.html
admin/sql/updates/mysql/0.0.1.sql

helloworld.xml


<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="1.6.0" method="upgrade">

<name>Hello World!</name>
<!-- The following elements are optional and free of formatting conttraints -->
<creationDate>November 2009</creationDate>
<author>John Doe</author>
<authorEmail>[email protected]</authorEmail>
<authorUrl>http://www.example.org</authorUrl>
<copyright>Copyright Info</copyright>
<license>License Info</license>
<!-- The version string is recorded in the components table -->
<version>0.0.2</version>
<!-- The description is optional and defaults to the name -->
<description>Description of the Hello World component ...</description>

<update> <!-- Runs on update; New in 1.6 -->
<schemas>
<schemapath type="mysql">sql/updates/mysql</schemapath>
</schemas>
</update>

<!-- Site Main File Copy Section -->
<!-- Note the folder attribute: This attribute describes the folder
to copy FROM in the package to install therefore files copied
in this section are copied from /site/ in the package -->
<files folder="site">
<filename>index.html</filename>
<filename>helloworld.php</filename>
<filename>controller.php</filename>
<folder>views</folder>
</files>

<administration>
<!-- Administration Menu Section -->
<menu>Hello World!</menu>
<!-- Administration Main File Copy Section -->
<!-- Note the folder attribute: This attribute describes the folder
to copy FROM in the package to install therefore files copied
in this section are copied from /admin/ in the package -->
<files folder="admin">
<!-- Admin Main File Copy Section -->
<filename>index.html</filename>
<filename>helloworld.php</filename>
<!-- SQL files section -->
<folder>sql</folder>
</files>
</administration>
</extension


รวม file ทั้งหมดเข้าด้วยการเป็น com_hellowerworld.rar
หลังจากติดตั้ง พิมพ์ index.php?option=com_helloworld ที่ url เพื่อทดสอบ

จะเห็น ข้อความที่อยู่ใน $this->msg ถูกแสดงอยู่ใน view.html.php

เดียวมาอัพต่อ








ประวัติการแก้ไข
2011-02-03 13:22:36
2011-02-03 13:48:53
2011-02-03 14:38:08
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-02-03 13:13:12 By : SpiderManDark
 


 

No. 2



โพสกระทู้ ( 28 )
บทความ ( 0 )



สถานะออฟไลน์


Developing a Model-View-Controller (MVC) Component for Joomla!1.6 - Part 03


Adding a menu item type
เืพิ่มประเภท menu

ใน Joomla!1.6 framework, components ถูกประมวลผลโดยการคลิกที่ menu

site/views/helloworld/tmpl/default.xml เพิ่มสิ่งนี้เข้าไป
<?xml version="1.0" encoding="utf-8"?>
<metadata>
<layout title="COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_TITLE">
<message>COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_DESC</message>
</layout>
</metadata>


แก้ไข helloworld.xml เป็น
<extension type="component" version="1.6.0" method="upgrade">

<name>Hello World!</name>
<!-- The following elements are optional and free of formatting conttraints -->
<creationDate>November 2009</creationDate>
<author>John Doe</author>
<authorEmail>[email protected]</authorEmail>
<authorUrl>http://www.example.org</authorUrl>
<copyright>Copyright Info</copyright>
<license>License Info</license>
<!-- The version string is recorded in the components table -->
<version>0.0.3</version>
<!-- The description is optional and defaults to the name -->
<description>Description of the Hello World component ...</description>

<update> <!-- Runs on update; New in 1.6 -->
<schemas>
<schemapath type="mysql">sql/updates/mysql</schemapath>
</schemas>
</update>

<!-- Site Main File Copy Section -->
<!-- Note the folder attribute: This attribute describes the folder
to copy FROM in the package to install therefore files copied
in this section are copied from /site/ in the package -->
<files folder="site">
<filename>index.html</filename>
<filename>helloworld.php</filename>
<filename>controller.php</filename>
<folder>views</folder>
</files>

<administration>
<!-- Administration Menu Section -->
<menu>Hello World!</menu>
<!-- Administration Main File Copy Section -->
<!-- Note the folder attribute: This attribute describes the folder
to copy FROM in the package to install therefore files copied
in this section are copied from /admin/ in the package -->
<files folder="admin">
<!-- Admin Main File Copy Section -->
<filename>index.html</filename>
<filename>helloworld.php</filename>
<!-- SQL files section -->
<folder>sql</folder>
</files>
</administration>

</extension>


ถ้าติดตั้ง com_helloworld ให้เอาออกมาก่อนและสร้าง zip file ขึ้นมาใหม่
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-02-03 14:06:32 By : SpiderManDark
 

 

No. 3



โพสกระทู้ ( 28 )
บทความ ( 0 )



สถานะออฟไลน์


Developing a Model-View-Controller (MVC) Component for Joomla!1.6 - Part 04
Adding a model

การเพิ่ม model

ใน Joomla!1.6 framework, model ใช้ในการจัดการกับข้อมูล function แรกที่ถูกเขียนสำหรับ model คือ get function ใช้คืนค่าข้อมูลสู่
ผู้ที่เรียก ในกรณีนี้ผู้เรียกคือ HelloWorldViewHelloWorld การตั้งชื่อ model จะเป็นชื่อที่มีความสัมพันธ์กัน view ในกรณีนี้คือ
HelloWorldModelHelloWorld สังเกตุว่าจะต่างกันที่คำว่า Model

แก้ไข site/models/helloworld.php เป็น:
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// import Joomla modelitem library
jimport('joomla.application.component.modelitem');
 
/**
 * HelloWorld Model
 */
class HelloWorldModelHelloWorld extends JModelItem
{
        /**
         * @var string msg
         */
        protected $msg;
 
        /**
         * Get the message
         * @return string The message to be displayed to the user
         */
        public function getMsg() 
        {
                if (!isset($this->msg)) 
                {
                        $this->msg = 'Hello World!';
                }
                return $this->msg;
        }
}


HelloWorldViewHelloWorld class จะถาม model สำหรับข้อมูลโดยใช้ get method ของ JView class:

แก้ไข site/views/helloworld/view.html.php
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// import Joomla view library
jimport('joomla.application.component.view');
 
/**
 * HTML View class for the HelloWorld Component
 */
class HelloWorldViewHelloWorld extends JView
{
        // Overwriting JView display method
        function display($tpl = null) 
        {
                // Assign data to the view
                $this->msg = $this->get('Msg');
 
                // Check for errors.
                if (count($errors = $this->get('Errors'))) 
                {
                        JError::raiseError(500, implode('<br />', $errors));
                        return false;
                }
                // Display the view
                parent::display($tpl);
        }
}



update helloworld.xml สำหรับการเรียกใช้ models
<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="1.6.0" method="upgrade">

<name>Hello World!</name>
<!-- The following elements are optional and free of formatting conttraints -->
<creationDate>November 2009</creationDate>
<author>John Doe</author>
<authorEmail>[email protected]</authorEmail>
<authorUrl>http://www.example.org</authorUrl>
<copyright>Copyright Info</copyright>
<license>License Info</license>
<!-- The version string is recorded in the components table -->
<version>0.0.4</version>
<!-- The description is optional and defaults to the name -->
<description>Description of the Hello World component ...</description>

<update> <!-- Runs on update; New in 1.6 -->
<schemas>
<schemapath type="mysql">sql/updates/mysql</schemapath>
</schemas>
</update>

<!-- Site Main File Copy Section -->
<!-- Note the folder attribute: This attribute describes the folder
to copy FROM in the package to install therefore files copied
in this section are copied from /site/ in the package -->
<files folder="site">
<filename>index.html</filename>
<filename>helloworld.php</filename>
<filename>controller.php</filename>
<folder>views</folder>
<folder>models</folder>
</files>
<administration>
<!-- Administration Menu Section -->
<menu>Hello World!</menu>
<!-- Administration Main File Copy Section -->
<!-- Note the folder attribute: This attribute describes the folder
to copy FROM in the package to install therefore files copied
in this section are copied from /admin/ in the package -->
<files folder="admin">
<!-- Admin Main File Copy Section -->
<filename>index.html</filename>
<filename>helloworld.php</filename>
<!-- SQL files section -->
<folder>sql</folder>
</files>
</administration>

</extension>


Packaging the component

โครงสร้าง com_helloworld

helloworld.xml
site/index.html
site/helloworld.php
site/controller.php
site/views/index.html
site/views/helloworld/index.html
site/views/helloworld/view.html.php
site/views/helloworld/tmpl/index.html
site/views/helloworld/tmpl/default.xml
site/views/helloworld/tmpl/default.php
site/models/index.html
site/models/helloworld.php
admin/index.html
admin/helloworld.php
admin/sql/index.html
admin/sql/updates/index.html
admin/sql/updates/mysql/index.html
admin/sql/updates/mysql/0.0.1.sql

ทำการสร้าง zip file ใหม่


ประวัติการแก้ไข
2011-02-03 14:35:25
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-02-03 14:22:08 By : SpiderManDark
 


 

No. 4



โพสกระทู้ ( 28 )
บทความ ( 0 )



สถานะออฟไลน์


Developing a Model-View-Controller (MVC) Component for Joomla!1.6 - Part 05

Adding a variable request in the menu type

การเพิ่มตัวแปร request the menu type

ในตัวอย่างที่แล้วจะแสดง Hello World!. เสมอ Joomla!1.6 สามารถเพิ่ม parameters ให้กับ menu types ได้ทำให้เพิ่มความยึดหยุ่นในการใช้งาน component ให้ทำการแก้ไ้ข site/views/helloworld/tmpl/default.xml file:

Code
<?xml version="1.0" encoding="utf-8"?>
<metadata>
<layout title="COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_TITLE">
<message>COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_DESC</message>
</layout>
<fields name="request">
<fieldset name="request">
<field
name="id"
type="list"
label="COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_LABEL"
description="COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_DESC"
default="1"
>
<option value="1">Hello World!</option>
<option value="2">Good bye World!</option>
</field>
</fieldset>
</fields>
</metadata>


มีข้อมูลสำคัญอยู่ 2 อย่าง
request group รวม fields ที่ต้องการจะส่งข้อมูลไป
และ array parameter แสดง parameters ที่จะถูกเพิ่มใน request URL

แก้ไข site/models/helloworld.php
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// import Joomla modelitem library
jimport('joomla.application.component.modelitem');
 
/**
 * HelloWorld Model
 */
class HelloWorldModelHelloWorld extends JModelItem
{
        /**
         * @var string msg
         */
        protected $msg;
 
        /**
         * Get the message
         * @return string The message to be displayed to the user
         */
        public function getMsg() 
        {
                if (!isset($this->msg)) 
                {
                        $id = JRequest::getInt('id');
                        switch ($id) 
                        {
                        case 2:
                                $this->msg = 'Good bye World!';
                        break;
                        default:
                        case 1:
                                $this->msg = 'Hello World!';
                        break;
                        }
                }
                return $this->msg;
        }
}


แก้ไข helloworld.xml ใหม่ตามนี้ (PHP)
<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="1.6.0" method="upgrade">

<name>Hello World!</name>
<!-- The following elements are optional and free of formatting conttraints -->
<creationDate>November 2009</creationDate>
<author>John Doe</author>
<authorEmail>[email protected]</authorEmail>
<authorUrl>http://www.example.org</authorUrl>
<copyright>Copyright Info</copyright>
<license>License Info</license>
<!-- The version string is recorded in the components table -->
<version>0.0.5</version>
<!-- The description is optional and defaults to the name -->
<description>Description of the Hello World component ...</description>

<update> <!-- Runs on update; New in 1.6 -->
<schemas>
<schemapath type="mysql">sql/updates/mysql</schemapath>
</schemas>
</update>

<!-- Site Main File Copy Section -->
<!-- Note the folder attribute: This attribute describes the folder
to copy FROM in the package to install therefore files copied
in this section are copied from /site/ in the package -->
<files folder="site">
<filename>index.html</filename>
<filename>helloworld.php</filename>
<filename>controller.php</filename>
<folder>views</folder>
<folder>models</folder>
</files>

<administration>
<!-- Administration Menu Section -->
<menu>Hello World!</menu>
<!-- Administration Main File Copy Section -->
<!-- Note the folder attribute: This attribute describes the folder
to copy FROM in the package to install therefore files copied
in this section are copied from /admin/ in the package -->
<files folder="admin">
<!-- Admin Main File Copy Section -->
<filename>index.html</filename>
<filename>helloworld.php</filename>
<!-- SQL files section -->
<folder>sql</folder>
</files>
</administration>

</extension>



ทดสอบโดยพิมพ์
index.php?option=com_helloworld&id=1 หรือ index.php?option=com_helloworld&id=2 ใน web browser

Packaging the component
โครงสร้าง com_hellworld ในบทนี้

helloworld.xml
site/index.html
site/helloworld.php
site/controller.php
site/views/index.html
site/views/helloworld/index.html
site/views/helloworld/view.html.php
site/views/helloworld/tmpl/index.html
site/views/helloworld/tmpl/default.xml
site/views/helloworld/tmpl/default.php
site/models/index.html
site/models/helloworld.php
admin/index.html
admin/helloworld.php
admin/sql/index.html
admin/sql/updates/index.html
admin/sql/updates/mysql/index.html
admin/sql/updates/mysql/0.0.1.sql


ประวัติการแก้ไข
2011-02-03 23:04:11
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-02-03 14:32:03 By : SpiderManDark
 


 

No. 5

Guest


โอแจ่มครับ
แล้วการส่ง parameter ผ่าน url หรือสร้าง url สวยๆ เพื่อทำ seo นี่ทำได้สะดวกไหมครับ
install แล้วหนักไหมครับ คือหมายถึง resquest ทีนี่หนักช้าไหมครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-02-03 15:06:34 By : โอ้นโต้น
 


 

No. 6



โพสกระทู้ ( 28 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 5 เขียนโดย : โอ้นโต้น เมื่อวันที่ 2011-02-03 15:06:34
รายละเอียดของการตอบ ::
แล้วการส่ง parameter ผ่าน url หรือสร้าง url สวยๆ เพื่อทำ seo นี่ทำได้สะดวกไหมครับ
login เข้าไปหน้า admin ก่อนแล้วไปที่ site-> Global Configuration ไปดูที่ SEO Settings
ตรง Use Apache mod_rewrite เลือก yes
จากนั้นเข้าไป root ของ joomla มองหา file htaccess.txt เปลี่ยนเป็น .htaccess
แล้วกด save ซะ

install แล้วหนักไหมครับ
่joomla 1.6.0 ขนาด zip file 7.99 mb
หลังแตก zip ขนาด 16.5 MB

resquest ทีนี่หนักช้าไหมครับ
มันขึ้นอยู่กับหลาย ๆ อย่างเช่น Templates ที่ใช้ พวกเปิดมาแล้วพวก load flash ,load video , load เพลง ช้าแน่นอน จำนวน Plugins ที่เปิดใช้งาน module ที่แสดงใน page นั้น ความซับซ้อนของ component ที่เรียก รวมทั้งเทคนิคการทำ Cache

เพิ่มเติมนะครับ
่joomla framework มีลักษณะดังนี้

- รูปแบบการเขียนเป็นแบบ oop ใครที่เขียน php แบบ oop ไม่เป็นมาลองเขียน
่joomla component รับรองเขียน oop ไ้ด้คล่องแน่นอน เรียกได้ว่าบังคับให้เขียนกันตั้งแต่จุด entry point กันทีเดียว
อย่างการ เขียนติดต่อ database , อ่าน file เขียน file ลบ file เคลื่อนย้าย file การ upload file , ส่ง email , login logout
พวกนี้มี class ให้ใช้งานเพียบ

- ลดการเขียน php ลงด้วยการใช้ xml ช่วย joomla framework จะใช้ xml ช่วยการการเขียน code หลาย ๆ ส่วน ตามความเข้าใจของผม
joomla framework อ่าน ไฟล์ xml ขึ้นมาแล้วทำการแปลงเป็นคำสั่ง php หลายคำสั่งของ xml ถ้าเขียน php เองแล้วอาจจะต้องเขียนถึง
10-20 บรรทัด แต่ xml ใช้แค่ 5 บรรทัด

- ใช้ MVC pattern เหมาะสำหรับการเขียนโปรแกรมที่มีความซับซ้อนสูง
- มีตัวอย่างใช้ศึกษาเยอะ
- มีหลาย ๆ view แล้วแต่ละ view ก็มี layout แตกต่างกัน



Business logic


ประวัติการแก้ไข
2011-02-03 19:58:36
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-02-03 19:57:17 By : SpiderManDark
 


 

No. 7



โพสกระทู้ ( 318 )
บทความ ( 2 )



สถานะออฟไลน์
Facebook

ไมผมลอง 1.6 แล้วล็อกอินไม่เคยผ่านเลยอ่าครับ เพิ่งลองเล่นๆดูครั้งแรกก็ล็อกอินไม่ผ่านซะแล้ว แล้วจะใช้งานส่วนไหนได้กันล่ะเนี้ย
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-02-03 23:44:35 By : chineji
 


 

No. 8



โพสกระทู้ ( 28 )
บทความ ( 0 )



สถานะออฟไลน์


Developing a Model-View-Controller (MVC) Component for Joomla!1.6 - Part 06

Using the database

การใช้ database

โดยปกติ Components จัดการข้อมูลของตัวเองโดยใช้ database ระหว่างที่เกิดเหตุการ install/uninstall/update ของ component
เราสามารถเขียน code เพื่อที่จะประมวลผลได้โดยการกำหนด sql text file

แก้ไข 2 file นี้ admin/sql/install.mysql.utf8.sql และ admin/sql/updates/mysql/0.0.6.sql ให้แก้ไขเป็นดังนี้
DROP TABLE IF EXISTS `#__helloworld`;
 
CREATE TABLE `#__helloworld` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `greeting` varchar(25) NOT NULL,
   PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
 
INSERT INTO `#__helloworld` (`greeting`) VALUES
        ('Hello World!'),
        ('Good bye World!');


คำสั่ง sql นี้จะถูกประมวลผลเมื่อมีการ install และ updates components

ต่อไปกำหนด admin/sql/uninstall.mysql.utf8.sql

DROP TABLE IF EXISTS `#__helloworld`;


คำสั่ง sql นี้จะถูกประมวลผลเมื่อมีการ uninstall components

การเพิ่ม field type ใหม่

เปิด site/views/helloworld/tmpl/default.xml

<?xml version="1.0" encoding="utf-8"?>
<metadata>
        <layout title="COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_TITLE">
                <message>COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_DESC</message>
        </layout>
        <fields name="request">
                <fieldset name="request">
                        <field
                                name="id"
                                type="list"
                                label="COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_LABEL"
                                description="COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_DESC"
                                default="1"
                        >
                                <option value="1">Hello World!</option>
                                <option value="2">Good bye World!</option>
                        </field>
                </fieldset>
        </fields>
</metadata>


จะเห็นว่า drop-down list มีตัวเลือกให้เลือก 2 ตัวคือ Hello World! กับ Good bye World! ซึ่งเป็นแบบ hard code

แต่เราจะแก้ไขใหม่ให้เลือกข้อมูลจาก database โดยแก้ไขให้เป็นดังนี้
<?xml version="1.0" encoding="utf-8"?>
<metadata>
        <layout title="COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_TITLE">
                <message>COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_DESC</message>
        </layout>
        <fields
                name="request"
                addfieldpath="/administrator/components/com_helloworld/models/fields"
        >
                <fieldset name="request">
                        <field
                                name="id"
                                type="helloworld"
                                label="COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_LABEL"
                                description="COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_DESC"
                        />
                </fieldset>
        </fields>
</metadata>

คำสั่ง addfieldpath="/administrator/components/com_helloworld/models/fields" จะเป็นการเรียกใช้ field ที่อยู่ใน
administrator/components/com_helloworld/models/fields

แก้ไข admin/models/fields/helloworld.php
<?php
// No direct access to this file
defined('_JEXEC') or die;
 
// import the list field type
jimport('joomla.form.helper');
JFormHelper::loadFieldClass('list');
 
/**
 * HelloWorld Form Field class for the HelloWorld component
 */
class JFormFieldHelloWorld extends JFormFieldList
{
        /**
         * The field type.
         *
         * @var         string
         */
        protected $type = 'HelloWorld';
 
        /**
         * Method to get a list of options for a list input.
         *
         * @return      array           An array of JHtml options.
         */
        protected function getOptions() 
        {
                $db = JFactory::getDBO();
                $query = $db->getQuery(true);
                $query->select('id,greeting');
                $query->from('#__helloworld');
                $db->setQuery((string)$query);
                $messages = $db->loadObjectList();
                $options = array();
                if ($messages)
                {
                        foreach($messages as $message) 
                        {
                                $options[] = JHtml::_('select.option', $message->id, $message->greeting);
                        }
                }
                $options = array_merge(parent::getOptions(), $options);
                return $options;
        }
}


JFormFieldList เป็น class ที่ไว้แทน drop-down list และ method getOptions เป็น method ของ class นี้ และโดยปกติจะถูก overite
โดย class ลูก ในที่นี้คือ JFormFieldHelloWorld

การแสดงข้อความที่เลือก

แก้ไข site/models/helloworld.php เป็น
<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// import Joomla modelitem library
jimport('joomla.application.component.modelitem');
 
/**
 * HelloWorld Model
 */
class HelloWorldModelHelloWorld extends JModelItem
{
        /**
         * @var string msg
         */
        protected $msg;
 
        /**
         * Returns a reference to the a Table object, always creating it.
         *
         * @param       type    The table type to instantiate
         * @param       string  A prefix for the table class name. Optional.
         * @param       array   Configuration array for model. Optional.
         * @return      JTable  A database object
         * @since       1.6
         */
        public function getTable($type = 'HelloWorld', $prefix = 'HelloWorldTable', $config = array()) 
        {
                return JTable::getInstance($type, $prefix, $config);
        }
        /**
         * Get the message
         * @return string The message to be displayed to the user
         */
        public function getMsg() 
        {
                if (!isset($this->msg)) 
                {
                        $id = JRequest::getInt('id');
                        // Get a TableHelloWorld instance
                        $table = $this->getTable();
 
                        // Load the message
                        $table->load($id);
 
                        // Assign the message
                        $this->msg = $table->greeting;
                }
                return $this->msg;
        }
}


HelloWorldModelHelloWorld ถาม TableHelloWorld ข้อมูลของ id ที่ request เข้ามา โดยเรียกใช้ $table->load($id);
TableHelloWorld ถูกสร้างอยู่ใน admin/tables/helloworld.php

แก้ admin/tables/helloworld.php ดังนี้
<?php
// No direct access
defined('_JEXEC') or die('Restricted access');
 
// import Joomla table library
jimport('joomla.database.table');
 
/**
 * Hello Table class
 */
class HelloWorldTableHelloWorld extends JTable
{
        /**
         * Constructor
         *
         * @param object Database connector object
         */
        function __construct(&$db) 
        {
                parent::__construct('#__helloworld', 'id', $db);
        }
}


อาจจะไม่เห็นความแตกต่างกัน แต่ถ้าเข้าไปดูใน database จะเห็น table ที่มีชื่อว่า jos_helloworld พร้อมกับ columns 2 columns คือ
id และ greeting. พร้อมทั้งข้อมูล Hello World! และ Good bye World

Packaging the component

helloworld.xml
site/index.html
site/helloworld.php
site/controller.php
site/views/index.html
site/views/helloworld/index.html
site/views/helloworld/view.html.php
site/views/helloworld/tmpl/index.html
site/views/helloworld/tmpl/default.xml
site/views/helloworld/tmpl/default.php
site/models/index.html
site/models/helloworld.php
admin/index.html
admin/helloworld.php
admin/sql/index.html
admin/sql/install.mysql.utf8.sql
admin/sql/uninstall.mysql.utf8.sql
admin/sql/updates/index.html
admin/sql/updates/mysql/index.html
admin/sql/updates/mysql/0.0.1.sql
admin/sql/updates/mysql/0.0.6.sql
admin/models/index.html
admin/models/fields/index.html
admin/models/fields/helloworld.php
admin/tables/index.html
admin/tables/helloworld.php

หากยังงงอยู่ให้ไป download file ตัวอย่างที่นี้ http://joomlacode.org/gf/download/frsrelease/11394/58405/com_helloworld-1.6-part06.zip


ประวัติการแก้ไข
2011-02-04 01:01:14
2011-02-04 01:10:50
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-02-04 00:07:26 By : SpiderManDark
 


 

No. 9



โพสกระทู้ ( 28 )
บทความ ( 0 )



สถานะออฟไลน์


Developing a Model-View-Controller (MVC) Component for Joomla!1.6 - Part 07

กล่าวเพิ่มเติม เกี่ยวกับ joomla framework
ถ้ามาถึงตรงจุดนี้จะเห็นว่าการเขียน joomla framework 1.6 ใช้ความรู้ทางด้าน oop อยู่ในระดับที่สูงที่เดียว
ใน joomla framework 1.5 จะเขียนให้รองรับ php 4 เลยใช้ความสามารถ oop แบบพอดี ๆ เขียน function ผสมได้นิด ๆ พอให้หวาน ๆ
แต่ joomla framework 1.6 ได้ยกเลยการสนับสนุน php 4 ไป แล้วมาสนับสนุน php 5 ทำให้รูปแบบการเขียน oop แบบเต็มสูบเรียก
ได้ว่าใช้คุณสมบัติ oop ของ php 5 อย่างเต็มที่ และมีการใช้ xml มาผสมการเขียนค่อนข้างมาก แทบจะเรียกได้ว่าประกบ ไฟล์ php แบบ 3 - 1 คือโดยเฉลี่ยทุก ๆ ครั้งที่สร้าง ไฟล์ php มา 3 ไฟล์ จะสร้าง xml มาประกบด้วยอีก 1 ไฟล์ ผมคิดว่า joomla framework 1.6 ใช้รูปแบบ
เหมื่อนกับรูปแบบการเขียนของ framework สมัยใหม่ เช่น adobe flex ,android. ที่ใช้ xml มาเป็นส่วนประกอบในการเขียน เรียกว่าเป็น แกนหลักของการเขียนเลยและไม่สามารถหลีกหนีได้ ทั้งหลายทั้งมวลมาประกอบการเขียนแบบ oop เต็มขี้น เรียกได้ว่ายากได้ใจมาก ขนาดผม เคยใช้ ci framework กับ cakephp มาก่อนยังคิดว่ายาก ถ้าใครไม่เคยเขียน php แบบ oop บ่อย ๆ หรือ ไม่เคยใช้ framework เช่น CI framework หรือ cakephp ที่ใช้รูปแบบการเขียน MVC รับรองได้ว่า ธาตุไฟเข้าแน่

ใช้ framework นั้นก็ดี แต่จะดีกว่าถ้ามันเป็น cms ด้วย ?

ในชีวิตผมเคยทำ web app โดยที่ความประทับใจอยู่ 3 ครั้ง
1 ทำระบบการแจ้งซ่อมคอมพิวเตอร์ - online มี table 15 table (ปวส เป็นโปรเจคจบ))
เขียน php แบบธรรมดาไม่ใช้ framework ตอนนั้นยังละอ่อนอยู่ ตอนนั้นเกาะกลุ่มกันเขียน Project โดยเฉพาะคนที่ทำโปรเจคจบโดยใช้ PHP เหมือนกัน ส่งรูปเล่มก่อนเส้นตายอยู่ 2 วัน
2 ทำระบบจัดการข้อมูลโรงพยาบาลสัตว์ มี table 27 table (มหาลัย เป็นโปรเจคจบ)
เริ่มเทพมาหน่อยรู้จักการใช้ ajax บ้างแต่ก็ยังเขียน php แบบธรรมดาไม่ใช้ framework เขียนแบบ oop บ้างนิดหน่อย คราวนี้เต็มตัวมาดี
จบได้เป็นคนแรกของรุ่น
3 ทำระบบจัดการข้อมูลกำลังพลในกองพัน เก็บข้อมูลตั้งแต่พลทหารไปจึงถึงระดับนายพัน ตอนนั้นจับได้ใบแดงติดทหารอยู่ที่ เชียงใหม่เป็นเวลา 1 ปี ไปถึง 2 เดือนแรกฝึกทหารใหม่ หลักจากนั้นก็ได้ขึ้นกองร้อย 2-3 วันต่ิิิอมาผู้พันเรียกไปพบ ผู้พันก็ถามว่าจบคอมมาใช้หรือไม่ เขียนเว็บได้เปล่า ผู้พันบอกให้ผู้เขียน web ให้หน่อย อยากได้เป็น web app นั้นแกก็เล่าคร่าว ๆ ว่าอยากให้เก็บข้อมูลแบบนั้้นแบบนี้และกำหนดรูปแบบการออกรายงานมา เท่าที่คุยดูรู้สึกว่าหัวสมัยใหม่รู้เรื่อง computer พอสมควร ตอนหลังรู้ว่าเป็นนายทหารเรียนจบ โรงเรียนนายร้อยจากต่างประเทศมา จากนั้นก็ให้นายทหารที่เรียนจบ IT มา (จบจาก มช ความรู้ด้าน network ระดับเทพ ดูแล network ในกองพัน มีใบ cert หลายใบ เก่ง c++) มาคอยดูแลผม (เหมือนประมาณผู้จัดการโปรเจค) ตอนแรกคิดว่า่จัดเก็บข้อมูลไม่มากแต่เอาไปเอามาขยายขอบเขตไปเรื่อย ๆ เป็น 95 table รู้เลยว่าระบบใหญ่ขนาดนี้แถมเขียนเองคนเดียวต้องถ้าเขียนโดนไม่ใช้ frame work อ้วกเป็นเลือดแน่ เลยคิดใช้ php framework ลังเลระหว่าง ci framework กับ cakephp ก่อนติดทหารเคยศึกษาเลย 2 ตัวนี้มาแต่ลองแบบเล่น ๆ แต่ติดสินใจเลือก ci framework เพราะเรียนรู้ได้เร็วกว่า cakephp อ่าน doc ของ ci framework ได้สัก 4 วัน ก็เริ่มเขียนเลย ใช้เวลาทำประมาณ 5 เดือน รวมทั้งเวลาใส่ข้อมูล ถามว่าทำไมนานขนาดนั้น เนื่องจากยังไม่คุ้นกับ ci framework เริ่มต้นเขียนก็ project ใหญ่เลย และมีการใช้ jquery แต่ในช่วงนั้นฝีมือตัวเองเก่งแบบก้าวกระโดดเลย เนื่องจากต้องเอาโปรแกรมไปให้ ผู้พันดูทุกเดือน (ความรู้สึกเหมือนทำโปรเจคจบ) และนายทหาร IT นั้นก็รู้มากพอสมควรคอยกวนเล่นให้เกิด bug ตลอด และคอยสมมติเหตุการณ์นั้นเหตุการณ์นี้เหมื่อนรู้จุดอ่อนของระบบ
คอยบอกให้ใส่ ajax เข้าไป อย่าง อ้าว ๆ ตรงนี้ทำไมไม่ใช้ ajax แถมยัง test แทบทุก browser เช่น ie, firefox ,google chrome ,opera
แค่ code ตรวจสอบ browser นี้ก็หนักแล้ว เรียกได้ว่ากวนใช้ได้ทีเดียว จากที่เขียน oop ไม่เก่ง ไม่รู้จ้ก MVC กลายเป็นว่าชอบการเขียน
PHP แบบ oop และไม่ชอบการเขียน PHP แบบ Function ติดการใช้ MVC pattern และกลายเป็นโรดติดการใช้ PHP framework

จริงอยู่ที่ ci framework ช่วยให้การเขียนโปรแกรมเร็วขึ้นกว่าการเขียน php แบบปกติแต่ยังต้องออกแรงเยอะเลยดูเหมือนไม่ค่อยช่วยอะไรมาก อยู่มาวันหนึ่งนายทหารคนนั้นใช้ให้ไปซื้อ หมึกแบบขวดมาเติม printer เห็นหนังสือ สอน joomla 1.5 ที่ร้านขายหนังสือหยิบขึ้นมาอ่านรู้สึกว่านายสนใจดีเลยซื้อมาอ่าน รู้สึกเลยว่า framework มันน่าสนใจดี มีความเป็น oop มากว่า ci framework แต่ขณะเดียวกันก็ยากกว่าด้วย แต่ก็ช่วยให้การทำงานหลาย ๆ อย่างมากขึ้น และศึกษา framework ของ cms ตัวอื่น ๆ ดู เช่น drupal ,modx ,CMS Made Simple

- drupal ไม่เลือกเพราะเข้าใจยากและรูปแบบการเขียนไม่เป็น oop มันออกแนว function
แต่ถ้าเขียนโปรแกรมรองรับผู้ใช้มาก ๆ ตัวนี้จะ work สุด แต่คิดว่าในอนาคตจะลองศึกษาดู
- modx ตัวนี้ได้ที่ 3 ของการประกวด Open Source Awards 2010 ของ packtpub ประเภท Open Source CMS
เป็น cms ที่มีความสามารถของ ajax อยู่ในตัวด้วย ทำให้ไวมาก framework ออกแนว event hander ใช้ ajax ค่อนข้างมาก
แต่ document ด้านพัฒนามีอ่่านน้อย เลยไม่เลือก
- CMS Made Simple ตัวนี้ชนะ Open Source Awards 2010 ของ packtpub ประเภท Open Source CMS มาแสดงว่าต้องมีอะไรดีสักอย่าง แต่ document ด้านพัฒนามีอ่่านน้อย คลิกที่ใหนก็มีแต่ coming soon เลยไม่เลือก
- SilverStripe ตัวนี้ได้ที่ 2 ของการประกวด Open Source Awards 2010 ของ packtpub ประเภท Open Source CMS มา
document ด้านพัฒนา ค่อนข้างดีแต่อธิบายไม่ละเอียดอยากให้ละเอียดต้องจ่ายเงินค่า subport เลยไม่เลือก

เลยศึกษาต่อมาที่ joomla 1.6 framework ดีกว่า joomla 1.5 framework เยอะพัฒนาไปหลาย ๆ ด้านที่เดียว

Basic backend

การออกแบบ backend interface โดยใช้รูปแบบ Model-View-Controller เราต้องทำการแก้ไข
file admin/helloworld.php ดังนี้

<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// import joomla controller library
jimport('joomla.application.component.controller');
 
// Get an instance of the controller prefixed by HelloWorld
$controller = JController::getInstance('HelloWorld');
 
// Perform the Request task
$controller->execute(JRequest::getCmd('task'));
 
// Redirect if set by the controller
$controller->redirect();


Create the general controller

จุด entry point ใช้สร้าง instance ของ controller ที่นำหน้าด้วย HelloWorld

สร้าง admin/controller.php ไว้ในส่วน administrator

<?php
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
 
// import Joomla controller library
jimport('joomla.application.component.controller');
 
/**
 * General Controller of HelloWorld component
 */
class HelloWorldController extends JController
{
        /**
         * display task
         *
         * @return void
         */
        function display($cachable = false) 
        {
                // set default view if not set
                JRequest::setVar('view', JRequest::getCmd('view', 'HelloWorlds'));
 
                // call parent behavior
                parent::display($cachable);
        }
}



ประวัติการแก้ไข
2011-02-04 03:45:21
2011-02-04 06:05:48
2011-02-04 06:27:38
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-02-04 03:24:31 By : SpiderManDark
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : Developing a Model-View-Controller (MVC) Component for Joomla!1.6
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 00
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่