สร้าง list เพื่อดึงข้อมูลจังหวัดมาแสดงใน listbox ทำอย่างไรค่ะ

ถามตอบ ปัญหาการพัฒนา Extension ไม่ว่าจะเป็น Module plugin Component หรือ แม้แต่ template การปรับแต่งโค้ด Joomla ต่างๆ ทุกเวอร์ชั่น 1.5 2.5 หรือ 3.x

Moderator: mindphp, ผู้ดูแลกระดาน

ภาพประจำตัวสมาชิก
Parichat
PHP VIP Members
PHP VIP Members
โพสต์: 1906
ลงทะเบียนเมื่อ: 08/01/2018 10:03 am

สร้าง list เพื่อดึงข้อมูลจังหวัดมาแสดงใน listbox ทำอย่างไรค่ะ

โพสต์โดย Parichat » 05/02/2018 10:56 pm

พอดีว่าหนูต้องการที่จะดึงข้อมูลจังหวัดมาแสดงใน listbox หนูต้องเขียนโค้ดอย่างไรค่ะ
อันนี้หนูได้โค้ด listbox มาแล้วแต่เขียนโค้ดตรง Option ไม่ถูกค่ะ ถ้าหนูเขียนแบบนี้จะถูกไหมค่ะ

โค้ด: เลือกทั้งหมด

<field name="mylistvalue" type="list" default="" label="Select an option" description="">
 <?php
 $stmt = $db->listProvince();
 $num_rows = 0;
  while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
?>
<option value="<?= $row["id"] ?>"><?= $row["name"]; ?></option>
</field>


อยากทำ listbox ดังรูป
listbox.png
listbox.png (13.53 KiB) เปิดดู 463 ครั้ง
Live Simply, Laugh Often, Love Deeply.....

ภาพประจำตัวสมาชิก
thatsawan
PHP VIP Members
PHP VIP Members
โพสต์: 12769
ลงทะเบียนเมื่อ: 31/03/2014 10:02 am
ติดต่อ:

Re: สร้าง list เพื่อดึงข้อมูลจังหวัดมาแสดงใน listbox ทำอย่างไรค่ะ

โพสต์โดย thatsawan » 06/02/2018 12:48 am

โค้ด: เลือกทั้งหมด

<select name="month" id="month">
 <?php
 $stmt 
= $db->listProvince();
 $num_rows = 0;
  while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
?>
<option value="<?= $row["id"] ?>"><?= $row["name"]; ?></option>

 <?php
}
?>

</select>

ภาพประจำตัวสมาชิก
Parichat
PHP VIP Members
PHP VIP Members
โพสต์: 1906
ลงทะเบียนเมื่อ: 08/01/2018 10:03 am

Re: สร้าง list เพื่อดึงข้อมูลจังหวัดมาแสดงใน listbox ทำอย่างไรค่ะ

โพสต์โดย Parichat » 06/02/2018 9:35 am

thatsawan เขียน:

โค้ด: เลือกทั้งหมด

<select name="month" id="month">
 <?php
 $stmt 
= $db->listProvince();
 $num_rows = 0;
  while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
?>
<option value="<?= $row["id"] ?>"><?= $row["name"]; ?></option>

 <?php
}
?>

</select>


ขอบคุณมากๆค่ะ
Live Simply, Laugh Often, Love Deeply.....

ภาพประจำตัวสมาชิก
tsukasaz
PHP VIP Members
PHP VIP Members
โพสต์: 8443
ลงทะเบียนเมื่อ: 18/04/2012 9:39 am

Re: สร้าง list เพื่อดึงข้อมูลจังหวัดมาแสดงใน listbox ทำอย่างไรค่ะ

โพสต์โดย tsukasaz » 06/02/2018 9:53 am

ถ้าใช้เป็น XML Form ของ Component ต้องสร้าง Field สำหรับใช้ใน XML มาก่อน

ในโฟลเดอร์ models ต้องมีโฟลเดอร์ fields ให้สร้างไฟล์ .php กำหนดชื่อตามข้อมูลที่ต้องการดึงมาแสดง เช่น provinces.php

ตัวอย่างโค้ด models/fields/provinces.php

โค้ด: เลือกทั้งหมด

<?php
defined
('_JEXEC') or die;

JFormHelper::loadFieldClass('list');

class JFormFieldProvinces extends JFormFieldList
{
 
    protected $type 
= 'Provinces';

    public function getOptions()
    {
        $db = Joomla\CMS\Factory::getDbo();
        $query = $db->getQuery(true)
            ->select('xx AS value, xx AS text')
            ->from('#__xxxxxxxxx')
            ->where($db->qn('xxxx') . '=' . $db->q('xxxx'));
        $db->setQuery($query);
        $arr_options = $db->loadObjectList();

        return array_merge(parent::getOptions(), $arr_options);
    }
}


- การตั้งชื่อ Class ขึ้นต้นด้วย JFormField แล้วต่อด้วยชื่อไฟล์ เช่น ไฟล์ชื่อ provinces.php จะได้ JFormFieldProvinces
- protected $type เอามาจากชื่อไฟล์
- ใน function getOptions() เป็นการดึงข้อมูลจากตารางที่ต้องการ
- ใน select จะต้องกำหนดค่าที่จะเป็น value และข้อความที่แสดงใน Options นึกถึงตอนเขียน <select> จะมี <option value="***">***</option>

หลังจากเสร็จจากการสร้าง Field ให้นำ Field ไปใช้ใน Form

โค้ด: เลือกทั้งหมด

<field
        name="xxxxx"
        type="provinces"
        label="xxxxx">
        <option value="">xxxxx</option>
</field>
The last bug isn't fixed until the last user is dead. (Sidney Markowitz, 1995)

ภาพประจำตัวสมาชิก
Parichat
PHP VIP Members
PHP VIP Members
โพสต์: 1906
ลงทะเบียนเมื่อ: 08/01/2018 10:03 am

Re: สร้าง list เพื่อดึงข้อมูลจังหวัดมาแสดงใน listbox ทำอย่างไรค่ะ

โพสต์โดย Parichat » 06/02/2018 10:03 am

ขอบคุณมากๆค่ะ :) :) :)
Live Simply, Laugh Often, Love Deeply.....

ภาพประจำตัวสมาชิก
Parichat
PHP VIP Members
PHP VIP Members
โพสต์: 1906
ลงทะเบียนเมื่อ: 08/01/2018 10:03 am

Re: สร้าง list เพื่อดึงข้อมูลจังหวัดมาแสดงใน listbox ทำอย่างไรค่ะ

โพสต์โดย Parichat » 06/02/2018 11:41 am

ลองทำแล้วค่ะแต่ดึงข้อมูลมาไม่ได้ไม่แน่ใจว่าผิดตรงไหนค่ะ

อันนี้เป็นโค้ดที่อยู่ใน models/fields/provinces.php

โค้ด: เลือกทั้งหมด

<?php
defined('_JEXEC') or die;

JFormHelper::loadFieldClass('list');

class JFormFieldProvinces extends JFormFieldList
{
 
    protected $type = 'Provinces';

    public function getOptions()
    {
        $db = Joomla\CMS\Factory::getDbo();
        $query = $db->getQuery(true)
            ->select('id AS value, name AS text')
            ->from('#__province')
            ->where($db->qn('id') . '=' . $db->q('id'));
        $db->setQuery($query);
        $arr_options = $db->loadObjectList();

        return array_merge(parent::getOptions(), $arr_options);
    }
}


สร้าง Field ให้นำ Field ไปใช้ใน Form

โค้ด: เลือกทั้งหมด

<field
            name="province_id"
            type="provinces"
            label="Province"
            <option value="value">text</option>
        </field>


ผลลัพธ์ที่ได้ดังรูป
list.png
list.png (3.66 KiB) เปิดดู 435 ครั้ง
Live Simply, Laugh Often, Love Deeply.....

ภาพประจำตัวสมาชิก
tsukasaz
PHP VIP Members
PHP VIP Members
โพสต์: 8443
ลงทะเบียนเมื่อ: 18/04/2012 9:39 am

Re: สร้าง list เพื่อดึงข้อมูลจังหวัดมาแสดงใน listbox ทำอย่างไรค่ะ

โพสต์โดย tsukasaz » 06/02/2018 11:54 am

SQL where ถ้าไม่มีเงื่อนไขในการดึงข้อมูลไม่ต้องใส่ก็ได้
The last bug isn't fixed until the last user is dead. (Sidney Markowitz, 1995)

ภาพประจำตัวสมาชิก
Parichat
PHP VIP Members
PHP VIP Members
โพสต์: 1906
ลงทะเบียนเมื่อ: 08/01/2018 10:03 am

Re: สร้าง list เพื่อดึงข้อมูลจังหวัดมาแสดงใน listbox ทำอย่างไรค่ะ

โพสต์โดย Parichat » 06/02/2018 12:07 pm

tsukasaz เขียน:SQL where ถ้าไม่มีเงื่อนไขในการดึงข้อมูลไม่ต้องใส่ก็ได้


ค่ะ ขอบคุณมากๆค่ะ
Live Simply, Laugh Often, Love Deeply.....


ย้อนกลับไปยัง

ผู้ใช้งานขณะนี้

กำลังดูบอร์ดนี้: 4 และ บุคคลทั่วไป 0 ท่าน