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 > ช่วยดูด้วยครับว่าต้องเขียน Link CSS ยังไง ไว้ตรงไหนใน php code นี้



 

ช่วยดูด้วยครับว่าต้องเขียน Link CSS ยังไง ไว้ตรงไหนใน php code นี้

 



Topic : 136131



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



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




ช่วยดูด้วยครับว่าต้องเขียน Link CSS ยังไง ไว้ตรงไหนใน php code นี้ ผมก็ทำตามคำแนะนำแบบนี้แต่มันก็ใช้ไม่ได้

Code (PHP)
<?echo "<head><link rel="stylesheet" href="yearpicker.css"></head>" ?>


รบกวนช่วยดูให้ด้วยครับ ว่าต้องเขียนยังไง หรือ วางตรงไหน ขอบคุณครับ (มือใหม่หัดทำ)

Code (PHP)
<?php

namespace Dms\Index;

use Kotchasan\DataTable;
use Kotchasan\Date;
use Kotchasan\Http\Request;
use Kotchasan\Language;

/**
 * module=dms
 *
 *
 * @since 1.0
 */
class View extends \Gcms\View
{
    /**
     * @var object
     */
    private $category;

    /**
     * แสดงรายการเอกสารส่ง.
     *
     * @param Request $request
     * @param array $login
     *
     * @return string
     */
    public function render(Request $request, $login)
    {
        // ค่าที่ส่งมา
        $params = array(
            'module' => 'borrow-search',
            'from' => $request->request('from')->date(),
            'to' => $request->request('to')->date(),
            'search' => $request->request('search')->topic(),
        );
        foreach (Language::get('DMS_CATEGORIES') as $k => $label) {
            $params[$k] = $request->request($k)->toInt();
        }
        // หมวดหมู่
        $this->category = \Dms\Category\Model::init();
        // URL สำหรับส่งให้ตาราง
        $uri = $request->createUriWithGlobals(WEB_URL.'index.php');
        // ตาราง
        $table = new DataTable(array(
            /* Uri */
            'uri' => $uri,
            /* Model */
            'model' => \Dms\Index\Model::toDataTable($params, $login),
            /* รายการต่อหน้า */
            'perPage' => $request->cookie('dmsIndex_perPage', 30)->toInt(),
            /* เรียงลำดับ */
            'sort' => 'create_date DESC',
            /* ฟังก์ชั่นจัดรูปแบบการแสดงผลแถวของตาราง */
            'onRow' => array($this, 'onRow'),
            /* คอลัมน์ที่ไม่ต้องแสดงผล */
            'hideColumns' => array('id', 'dms_id', 'url','ext', 'file_name', 'create_date', 'document_no', 'downloads', 'detail', 'group'),
            /* ตัวเลือกการแสดงผลที่ส่วนหัว */

            /* ตั้งค่าการกระทำของของตัวเลือกต่างๆ ด้านล่างตาราง ซึ่งจะใช้ร่วมกับการขีดถูกเลือกแถว */
            'action' => 'index.php/dms/model/index/action',
            'actionCallback' => 'dataTableActionCallback',
            /* ส่วนหัวของตาราง และการเรียงลำดับ (thead) */
            'headers' => array(
                'create_date' => array(
                    'text' => '{LNG_Date}',
                ),
                'document_no' => array(
                    'text' => '{LNG_Document No.}',
                ),
              
               
..............................................................................................................





Tag : PHP, HTML, CSS









ประวัติการแก้ไข
2021-05-22 23:19:58
2021-05-22 23:21:28
2021-05-22 23:23:24
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2021-05-22 23:16:43 By : npolkhet View : 2260 Reply : 32
 

 
คุณบอกเองว่าเป็นมือใหม่ คำแนะนำคือ เขียนแบบธรรมดา อย่าพึ่งไปใช้เฟรมเวิรกอิสระที่เป็น mvc เพราะการโปรแกรมคือการทำความเข้าใจลำดับขั้นตอนของโปรแกรม เชื่อหรือไม่ว่างานแก้แพงกว่างานใหม่ งานใหม่เราเขียนเองหมดตามความเข้าใจ ส่วนงานแก้ต้องแกะโปรซีเยอร์และอัลกอริทึมของคนอื่นก่อนจึงจะสามารถแก้ไขเพิ่มเติมงานนั้นได้

หรือถ้าอยากจะดึงดันงมต่อไป ลองศึกษา oop programming concepts ค่อยแกะงานของเขาซึ่งต้องเข้าใจการทำงานของ mvc ด้วย
จากคราวก่อนๆ ที่คุณเคยนำมาโพสต์และบอกที่มา ผมได้ลองว๊าปเข้าไปดูแล้วก็ไม่ได้มีอะไรยากเป็นพิเศษ แต่ถ้าจะให้ศึกษาโครงสร้างต้องใช้เวลาเพราะไม่ใช่เฟรมเวิร์กตามท้องตลาดที่มีเอกสารการใช้งานแบบ well documented ซึ่งผมเองก็ไม่มีเวลาไปไล่ดูขนาดนั้น ส่วนคนอื่นไม่แน่จะรอผู้ใจดีสละเวลามาชี้ทางหรือศึกษาพื้นฐานแล้วแกะเองหรือเปลี่ยนไปใช้แบบธรรมดาก็ลองชั่งใจดู

ส่วนคำตอบของคำถามบอกได้แค่ว่า ไม่น่าจะทำได้เพียงแค่แก้ไขส่วน view เพราะถ้าเกี่ยวข้องกับฐานข้อมูลต้องเช็คทั้ง โมเดล และคอนโทรลเลอร์ประกอบด้วย






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-05-22 23:58:13 By : พญามัจจุราช
 


 

No. 2



โพสกระทู้ ( 4,169 )
บทความ ( 7 )

Hall of Fame 2012

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


โดยปกติถ้าเป็น MVC Concept มาตราฐานสากล Included ไว้หน้า view ที่เป็น layout หลักได้เลยครับ

แต่ถ้าคุณเป็นมือใหม่ PHP Framwork ผมเห็นว่าควรย้ายไป Laravel จะดีกว่า Community ใหญ่กว่า หาคำตอบกาแก้ไขปัญหาง่ายกว่า document ชัดเจน pugin ครบไม่ว่าจะเป็น API ฯลฯ

ปล. ผมไม่ได้ Anti Framwork ตัวนี้ แต่ผมแนะนำ Framework ที่สอดคล้องกับตลาดแรงงาน
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-05-23 12:25:12 By : Genesis™
 

 

No. 3



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



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


<?

<?php

ไปเอาตัวอย่างมาจากไหน ขยันเขียนผิดกันได้ทุกปีสิน่า.
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-05-23 13:18:25 By : mr.v
 


 

No. 4



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



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


ตอบความคิดเห็นที่ : 3 เขียนโดย : mr.v เมื่อวันที่ 2021-05-23 13:18:25
รายละเอียดของการตอบ ::
ลองเปลี่ยนแล้วครับก็ยังไม่ได้

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-05-23 14:56:50 By : npolkhet
 


 

No. 5



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



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


ขอขอบคุณสำหรับคำแนะนำของความเห็นท่านที่ 1 และ 2 ที่แรกก็ชั่งใจอยู่ว่าจะเอาแบบนี้ หรือ เขียนขึ้นมาเอง แต่พอดูแล้วระบบหลังบ้านเค้าโอเคเลย และด้วยเวลาที่จำกัด ซึ่งในเวลานี้ทางด้านโปรแกรมมิ่งก็เสร็จสมบูรณ์เกือบหมดแล้ว เหลือแค่ตกแต่งนิดหน่อย โดยจะอาศัย css คือในตอนนี้ผมเพียงต้องการเวลาเพิ่มข้อมูลในรูปแบบปฎิทิน แต่จะให้ขึ้นให้เลือกเฉพาะปีเท่านั้น ซึ่งก็เข้าไปตามเวปแล้วก็มีวิธี แต่ต้องใช้งานผ่าน css ซึ่งผมก็ไม่ทราบจริงๆว่าต้องเขียนรูปแบบยังไงในไฟล์นี้ครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-05-23 15:08:58 By : npolkhet
 


 

No. 6



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



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


หาทางเพิ่ม ใน html
Code (PHP)
<!doctype html>
<html lang=en >
<head>
  <title>xxxxx</title>
  <link rel="stylesheet" href="yearpicker.css">



ไม่ใช่เพิ่ม แบบที่เอามาลง ต้องศึกษาไวยกรณ์ของ html ด้วย อย่าสักแต่เอาโค๊ดมาบวกต่อกัน

tag head มันมีอยู่แล้ว ก็ไม่ควรจะมีซ้ำซ้อน
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-05-23 17:01:31 By : Chaidhanan
 


 

No. 7



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



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


จขกท.ควรตรวจดูโค้ดของตัวเองให้ละเอียดด้วยนะครับ

ตัวอย่างที่บอก ใช้แท็กเปิด PHP ผิด อันนี้บอกไปแล้ว แล้วยังไม่แค่นั้น คือเขียนรัวๆติดๆกันแบบนั้น มันใช่หรือ? ไม่มี semicolon ปิดท้าย มันใช่หรือ?

ลองอ่านดูจากหน้านี้ https://www.php.net/manual/en/getting-started.php getting start
อ่านบทแรก Introduction > What is PHP? https://www.php.net/manual/en/intro-whatis.php

อ่านไปจนถึง
Quote:
start and end processing instructions <?php and ?>
มันจะมีลิ้งค์ให้เข้าไปอ่านเพิ่ม ในนั้นจะบอกไว้หมดเลยว่าทำไมจึงต้องใช้แท็กเปิด PHP ที่ถูก แล้วก็เขาเขียนกันยังไง ดูให้ละเอียด ย้ำว่าละเอียด. ดูว่าเขาเขียนติดๆกันไหม? มีอะไรปิดท้ายไหม?

นอกจากนี้ใน php.ini ของ จขกท. มีเปิดแสดง error ทุกอย่างหรือไม่? เพราะถ้ามาแท็กเปิดแนวนี้ก็เดาได้เลยว่าซ่อน error แน่นอน ซึ่งเวลามีปัญหาจะไม่รู้เรื่องอะไรกัน
แล้วเวลารันบน server จริงก็จะมาถามอีกทำไมบน localhost ได้, ฯลฯ บลาๆ ทั้งที่จริงๆพวกที่มีปัญหาแบบนั้น ถ้าไม่ปิด error บน localhost มันก็ไม่ใช่ว่าจะรันได้หรอก.

2 อย่าง
1. ดูเอกสารดูตัวอย่างให้ละเอียด
2. เปิดแสดง error เสมอในขั้นตอน development


ประวัติการแก้ไข
2021-05-23 20:24:38
2021-05-23 21:54:00
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-05-23 20:14:52 By : mr.v
 


 

No. 8



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



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


ตอบความคิดเห็นที่ : 7 เขียนโดย : mr.v เมื่อวันที่ 2021-05-23 20:14:52
รายละเอียดของการตอบ ::
ในส่วน tag เปิด php ใส่แล้วครับ และ Semi colon ก็ลองใส่แล้วครับ ตั้งแต่ที่ได้ code จากเวปนี้ล่ะครับที่เค้าแนะนำกันมา ก็จากบอร์ดนี้ล่ะครับ และที่แนะนำมาให้ดู Document นั้น ผมก็ไม่ได้แก่งภาษามาก แต่ก็ยังไม่เห็นจุดที่จะแก้ปัญหานี้ได้ อย่างที่บอกไปว่าด้วยเวลาที่จำกัด และที่บอกไปผมมือใหม่ด้านโปรแกรมเมอร์ มันไม่ได้มาทางด้านนี้โดยเฉพาะ เพียงแค่เห็นว่าโปรแกรมนี้มันเป็นประโยชน์น่าเอามาปรับใช้ แต่มันก็ติดเรื่องที่ว่านั่นล่ะ คือ จะเอา Link ไป CSS ไฟล์ได้ยังไง เพื่อจัดให้มันเข้าที่เข้าทางอีกนิดก็เท่านั้นเอง จะไล่ให้ผมไปศึกษาตั้งแต่เริ่มต้นเลยก็คงไม่ไหว ผมไม่ใช่เด็กยี่สิบสามสิบ ผมเลยมามากแล้ว เพียงคิดว่าในนี้คงมีผู้รู้ที่พอช่วยได้ ผู้ที่แนะนำให้ความรู้ผมก็ขอบคุณ ถ้าไม่ก็ไม่เป็นไร คนเรามันเก่งคนละเรื่องไม่เหมือนกัน ผมให้เกียรติทุกคนเสมอ ยังไงขอบคุณทุกคำแนะนำครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-05-25 15:07:52 By : npolkhet
 


 

No. 9



โพสกระทู้ ( 1,994 )
บทความ ( 10 )



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

ลองดูบทความนี้ครับ [ตอนที่ 6] เวิร์คช้อปการสร้างเว็บไซต์อย่างง่ายด้วยคชสาร

https://kotchasan.com/knowledge/%E0%B9%80%E0%B8%A7%E0%B8%B4%E0%B8%A3%E0%B9%8C%E0%B8%84%E0%B8%8A%E0%B9%89%E0%B8%AD%E0%B8%9B%E0%B8%81%E0%B8%B2%E0%B8%A3%E0%B8%AA%E0%B8%A3%E0%B9%89%E0%B8%B2%E0%B8%87%E0%B9%80%E0%B8%A7%E0%B9%87%E0%B8%9A%E0%B9%84%E0%B8%8B%E0%B8%95%E0%B9%8C%E0%B8%AD%E0%B8%A2%E0%B9%88%E0%B8%B2%E0%B8%87%E0%B8%87%E0%B9%88%E0%B8%B2%E0%B8%A2%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2%E0%B8%84%E0%B8%8A%E0%B8%AA%E0%B8%B2%E0%B8%A3_%E0%B8%95%E0%B8%AD%E0%B8%99%E0%B8%97%E0%B8%B5%E0%B9%88_6.html
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-05-25 15:34:21 By : {Cyberman}
 


 

No. 10



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



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


ตอบความคิดเห็นที่ : 8 เขียนโดย : npolkhet เมื่อวันที่ 2021-05-25 15:07:52
รายละเอียดของการตอบ ::
อันนี้ผมว่าคงไม่ได้ล่ะมั้งครับ เมื่อเราอยากสั่งให้เครื่องจักรทำงานได้ตามต้องการเราก็ต้องอ่านคู่มือนะครับ
ถ้าไม่อยากอ่านแนะนำให้จ้างครับ


ตัวคชสารตอนนี้ยังมีคนใช้งานน้อยอยู่ หาคนรู้คำสั่งจริงๆ จังๆ น้อย นอกจากคนที่เขาเขียน frame work ตัวนี้
จะเขียนได้ก็ต้องอ่านให้รู้เรื่องให้เข้าใจ คนที่เข้ามาตอบส่วนใหญ่ในนี้ก็แค่งูปลาๆ กับ frame work ตัวนี้ทั้งนั้นครับ
แนะนำได้แค่เล็กน้อย แค่เทคนิควิธีการเท่านั้น ส่วนใหญ่ก็ต้องพี่งจขกทเอง ที่จะทดสอบทดลองทำเอง

อย่างตอนนี้ ผมจะแนะนำ ให้ใช้ browser view source ออกมาดูโครงสร้างของ ภาษา html ก่อน เพราะ html ก็เป็นอีกภาษาหนึ่งที่เกี่ยวข้อง ลอง view source ออกมา แล้วลองเปรียบเทียบดูว่า ตัว frame work ตัวนี้ มันมีคำสั่ง generate อยู่ตรงไหน ใช้ template ตัวไหนแล้วเข้าไปแก้ไขที่ตรงนั้น

ผมอยากรู้ว่า จขกท เข้าใจโครงสร้างการทำงานของ mvc มากน้อยแค่ไหน
ช่วยลองเอา control , view , modal มาแปะให้ดูหน่อยครับ แยกชื่อไฟล ต่างๆ ให้ชัดเจน
อย่างน้อย คนที่ไม่เคยใช้ frame work ตัวนี้อาจจะพอเข้าใจ ได้ว่ามันทำงานยังไง และเจาะจงแก้ไข ให้คุณได้
คือถ้าเอามาแค่ บางส่วน บางที่มันไม่รู้ที่มาที่ไปของชุดคำสั่ง มันก็ตอบไม่ได้หรอกครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-05-25 17:04:07 By : Chaidhanan
 


 

No. 11



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



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


มาแนวนี้อีกคนแล้ว หาคำแนะนำให้ บอกว่าทำแล้วแต่ไม่ให้เห็นว่าทำยังไง พอไล่จี้จุดรายละเอียดเล็กน้อย ซึ่งถ้ามันผิดมันก็จะไม่รัน อย่างเช่นการเว้นวรรคหลังแท็กเปิด, การปิด semi colon, การเปิดแสดง error ก็ไม่พอใจอีก
จะให้มันทำงานได้ ดูเหมือนจะเอาเร็วด้วย แต่เวลาจี้จุดรายละเอียดที่มันจะเป็นอุปสรรคได้ก็ไม่ค่อยจะพอใจกัน แต่จะให้มันเวิร์ค

แล้ว framework นี้ก็อย่างที่ข้างบนบอกกันมาหลายแล้ว มันไม่ค่อยแพร่หลาย หาคนช่วยยาก จะหวังให้มันเวิร์คเหมือนพลิกฝ่ามือมันเป็นไปไม่ได้หรอก มันต้องช้าแน่ และก็ต้องค่อยๆไปด้วย ไม่เหมือนกับตัวที่แพร่หลายมาก คนใช้มากก็จะหาคนช่วยได้ง่ายขึ้น

ถ้ามือใหม่แล้วจะแก้เอาให้มันเวิร์คได้ดั่งใจเร็วๆ มันเป็นไปไม่ได้หรือแทบไม่ได้เลย แต่ถ้าจะค่อยเป็นค่อยไปมันก็พอช่วยกันลากไปไหวอยู่ แต่ก็ควรรู้ด้วยว่าการเขียนโปรแกรมมันต้องหมั่นทดลอง, ต้องละเอียด บางครั้งการปรับเปลี่ยนเพียงเล็กน้อยในสายตาคนทั่วไปรู้สึกว่ามันไม่น่ามีผลอะไร แต่มันให้ผลพลิกหน้าพลิกหลังก็มี ดังนั้นเวลาทำอะไรไปแล้วก็ต้องเอามาอัพเดทด้วยว่าอะไรแก้ไปถึงไหน ได้ผลยังไง รับข้อแนะนำ ทดลอง แก้ไขใหม่ ได้ผลยังไงอีก มันก็ต้องไปอย่างงี้ ยกเว้นพวกที่เขาชำนาญเขาก็รับไปทดลองพลิกแพลงเองแป๊บเดียวได้
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-05-25 17:55:43 By : mr.v
 


 

No. 12



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



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


โค้ดที่ไปเอามาใช้ ไปดาวน์โหลดจากหน้าไหน เอาลิ้งค์มาลงหน่อย ผมและหลายๆคนจะได้ดาวน์โหลดไปทดลองดู บางทีอาจจะเร็วขึ้น ได้แก้พุ่งเป้าได้ทดลองตรงจุดรวดเดียวเลย
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-05-25 18:22:52 By : mr.v
 


 

No. 13



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



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


ขอบคุณสำหรับคำแนะนำของทุกท่าน ผมขอลงลิ้งค์ที่มาของโปรแกรมนี้ให้ด้านล่างครับ ก็ขอขอบคุณสำหรับทุกท่านที่สละเวลาช่วยดูให้ ไม่ได้ไม่เป็นไรครับ ก็คงให้น้องที่ทำงานไปใช้งานก่อน แล้วค่อยหาวิธีแก้ตามเอา ขอบคุณครับ.

https://kotchasan.com/knowledge/%E0%B9%81%E0%B8%88%E0%B8%81%E0%B8%9F%E0%B8%A3%E0%B8%B5_%E0%B8%A3%E0%B8%B0%E0%B8%9A%E0%B8%9A%E0%B8%88%E0%B8%B1%E0%B8%94%E0%B9%80%E0%B8%81%E0%B9%87%E0%B8%9A%E0%B9%80%E0%B8%AD%E0%B8%81%E0%B8%AA%E0%B8%B2%E0%B8%A3%E0%B8%AD%E0%B8%AD%E0%B8%99%E0%B9%84%E0%B8%A5%E0%B8%99%E0%B9%8C_php_electronic_document_manageme.html
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-05-26 13:56:12 By : npolkhet
 


 

No. 14



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



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


ตอบความคิดเห็นที่ : 10 เขียนโดย : Chaidhanan เมื่อวันที่ 2021-05-25 17:04:07
รายละเอียดของการตอบ ::
ขอบคุณสำหรับคำแนะนำครับ ผมขอส่งไฟล์ index.php ที่ทำงานสัมพันธ์กัน ทั้งใน 3 ส่วน อันแรกจะอยู่ในส่วนของ Controller อันที่สองเป็นส่วนของ Model ที่จะดึงข้อมูลต่างๆจากฐานข้อมูลออกมา และ อันที่สามเป็นส่วนของ View ที่จะเป็นส่วนจัดการส่วนแสดงผลหน้าเวปครับ

ส่วนแรก Controller/index.php
Code (PHP)
<?php
/**
 * @filesource modules/dms/controllers/index.php
 *
 * @copyright 2016 Goragod.com
 * @license http://www.kotchasan.com/license/
 *
 * @see http://www.kotchasan.com/
 */

namespace Dms\Index;

use Gcms\Login;
use Kotchasan\Html;
use Kotchasan\Http\Request;
use Kotchasan\Language;

/**
 * module=dms
 *
 * @author Goragod Wiriya <[email protected]>
 *
 * @since 1.0
 */
class Controller extends \Gcms\Controller
{
    /**
     * แสดงรายการเอกสาร
     *
     * @param Request $request
     *
     * @return string
     */
    public function render(Request $request)
    {
        // ข้อความ title bar
        $this->title = Language::trans('{LNG_List of} {LNG_Document}');
        // เลือกเมนู
        $this->menu = 'dms';
        // สมาชิก
        $login = Login::isMember();
        // สามารถดูหรือดาวน์โหลดเอกสารได้
        if (Login::checkPermission($login, 'can_download_dms')) {
            // แสดงผล
            $section = Html::create('section', array(
                'class' => 'content_bg',
            ));
            // breadcrumbs
            $breadcrumbs = $section->add('div', array(
                'class' => 'breadcrumbs',
            ));
            $ul = $breadcrumbs->add('ul');
            $ul->appendChild('<li><span class="icon-edocument">{LNG_Document management system}</span></li>');
            $ul->appendChild('<li><span>{LNG_Document}</span></li>');
            $ul->appendChild('<li><span>{LNG_List of}</span></li>');
            $section->add('header', array(
                'innerHTML' => '<h2 class="icon-documents">'.$this->title.'</h2>',
            ));
            // ตารางรายการเอกสาร
            $section->appendChild(createClass('Dms\Index\View')->render($request, $login));
            // คืนค่า HTML
            return $section->render();
        }
        // 404
        return \Index\Error\Controller::execute($this, $request->getUri());
    }
}



ส่วนที่สอง Model/index.php
Code (PHP)
<?php
/**
 * @filesource modules/dms/models/index.php
 *
 * @copyright 2016 Goragod.com
 * @license http://www.kotchasan.com/license/
 *
 * @see http://www.kotchasan.com/
 */

namespace Dms\Index;

use Gcms\Login;
use Kotchasan\Database\Sql;
use Kotchasan\Http\Request;
use Kotchasan\Language;

/**
 * module=dms
 *
 * @author Goragod Wiriya <[email protected]>
 *
 * @since 1.0
 */
class Model extends \Kotchasan\Model
{
    /**
     * Query ข้อมูลสำหรับส่งให้กับ DataTable
     *
     * @param array $params
     * @param array $login
     *
     * @return \Kotchasan\Database\QueryBuilder
     */
    public static function toDataTable($params, $login)
    {
        $where = array();
        if (!empty($params['from'])) {
            $where[] = array('A.create_date', '>=', $params['from']);
        }
        if (!empty($params['to'])) {
            $where[] = array('A.create_date', '<=', $params['to']);
        }
        $select = array('A.id', 'A.create_date', 'A.document_no', 'A.topic');
        $query = static::createQuery()
            ->from('dms A');
        $n = 1;
        foreach (Language::get('DMS_CATEGORIES') as $k => $label) {
            $query->join('dms_meta N'.$n, 'LEFT', array(array('N'.$n.'.dms_id', 'A.id'), array('N'.$n.'.type', $k)))
                ->join('category C'.$n, 'LEFT', array(array('C'.$n.'.category_id', 'N'.$n.'.value'), array('C'.$n.'.type', $k)));
            if ($k == 'department') {
                $select[] = Sql::GROUP_CONCAT('C'.$n.'.topic', $k);
                if (!empty($login['department'])) {
                    $where[] = array('N'.$n.'.value', $login['department']);
                }
            } else {
                $select[] = 'C'.$n.'.topic '.$k;
            }
            if ($params[$k] > 0) {
                $where[] = array('N'.$n.'.value', $params[$k]);
            }
            $n++;
        }
        $select[] = 'A.url';
        $q1 = $query->select($select)
            ->where($where)
            ->groupBy('A.id');
        $where = array();
        if (!empty($params['search'])) {
            $where[] = Sql::create("(A.`document_no` LIKE '%$params[search]%' OR A.`topic` LIKE '%$params[search]%' OR F.`topic` LIKE '%$params[search]%')");
        }
        return static::createQuery()
            ->select(Sql::IFNULL('F.id', 0, 'id'), 'A.id dms_id', 'A.create_date', 'A.document_no', 'A.topic', 'F.topic file_name', 'F.ext', 'A.department', 'A.cabinet', 'W.downloads', 'A.url')
            ->from(array($q1, 'A'))
            ->join('dms_files F', 'LEFT', array('F.dms_id', 'A.id'))
            ->join('dms_download W', 'LEFT', array(array('W.file_id', Sql::create('CASE WHEN A.`url`="" THEN F.`id` ELSE 0 END')), array('W.dms_id', 'A.id'), array('W.member_id', $login['id'])))
            ->where($where);
    }

    /**
     * รับค่าจาก action
     *
     * @param Request $request
     */
    public function action(Request $request)
    {
        $ret = array();
        // session, referer, member, สามารถดูหรือดาวน์โหลดเอกสารได้
        if ($request->initSession() && $request->isReferer() && $login = Login::isMember()) {
            if (Login::checkPermission($login, 'can_download_dms')) {
                // ค่าที่ส่งมา
                $file_id = $request->post('id')->toInt();
                if (preg_match('/(detail|download)_([0-9]+)/', $request->post('action')->toString(), $match)) {
                    if ($match[1] == 'detail') {
                        $document = \Dms\View\Model::get($match[2]);
                        if ($document) {
                            $ret['modal'] = Language::trans(createClass('Dms\View\View')->render($document, $login));
                        }
                    } elseif ($match[1] == 'download') {
                        if ($file_id > 0) {
                            // ดาวน์โหลดไฟล์
                            $ret = $this->fileDownload($file_id, $login['id']);
                        } else {
                            // เปิด URL
                            $ret = $this->openUrl($match[2], $login['id']);
                        }
                    }
                }
            }
        }
        // คืนค่าเป็น JSON
        echo json_encode($ret);
    }

    /**
     * เปิด URL
     *
     * @param int $id
     * @param int $member_id
     *
     * @return array
     */
    public function openUrl($id, $member_id)
    {
        $download = $this->db()->createQuery()
            ->from('dms_download')
            ->where(array(
                array('dms_id', $id),
                array('file_id', 0),
                array('member_id', $member_id),
            ))
            ->first('id', 'downloads');
        $save = array(
            'downloads' => $download ? $download->downloads + 1 : 1,
            'dms_id' => $id,
            'file_id' => 0,
            'member_id' => $member_id,
            'last_update' => date('Y-m-d H:i:s'),
        );
        if ($download) {
            $this->db()->update($this->getTableName('dms_download'), $download->id, $save);
        } else {
            $this->db()->insert($this->getTableName('dms_download'), $save);
        }
        return array();
    }

    /**
     * ดาวน์โหลดไฟล์
     *
     * @param int $file_id
     * @param int $member_id
     *
     * @return array
     */
    public function fileDownload($file_id, $member_id)
    {
        $ret = array();
        // อ่านรายการที่เลือก
        $result = $this->db()->createQuery()
            ->from('dms_files')
            ->where(array('id', $file_id))
            ->first('id', 'dms_id', 'size', 'name', 'file', 'ext');
        if ($result) {
            // ไฟล์
            $file = ROOT_PATH.DATA_FOLDER.$result->file;
            if (is_file($file)) {
                // สามารถดาวน์โหลดได้
                $download = $this->db()->createQuery()
                    ->from('dms_download')
                    ->where(array(
                        array('file_id', $result->id),
                        array('member_id', $member_id),
                    ))
                    ->first('id', 'downloads');
                $save = array(
                    'downloads' => $download ? $download->downloads + 1 : 1,
                    'dms_id' => $result->dms_id,
                    'file_id' => $result->id,
                    'member_id' => $member_id,
                    'last_update' => date('Y-m-d H:i:s'),
                );
                if ($download) {
                    $this->db()->update($this->getTableName('dms_download'), $download->id, $save);
                } else {
                    $this->db()->insert($this->getTableName('dms_download'), $save);
                }
                // id สำหรบไฟล์ดาวน์โหลด
                $id = uniqid();
                // บันทึกรายละเอียดการดาวน์โหลดลง SESSION
                $file = array(
                    'file' => $file,
                    'size' => $result->size,
                );
                if (self::$cfg->dms_download_action == 1 && in_array($result->ext, array('pdf', 'jpg', 'jpeg', 'png', 'gif'))) {
                    $file['name'] = '';
                    $file['mime'] = \Kotchasan\Mime::get($result->ext);
                } else {
                    $file['name'] = $result->name.'.'.$result->ext;
                    $file['mime'] = 'application/octet-stream';
                }
                $_SESSION[$id] = $file;
                // คืนค่า
                $ret['open'] = WEB_URL.'modules/dms/filedownload.php?id='.$id;
            } else {
                // ไม่พบไฟล์
                $ret['alert'] = Language::get('File not found');
            }
        }
        return $ret;
    }
}



ส่วนที่สาม view/index.php
Code (PHP)
<?php
/**
 * @filesource modules/dms/views/index.php
 *
 * @copyright 2016 Goragod.com
 * @license http://www.kotchasan.com/license/
 *
 * @see http://www.kotchasan.com/
 */

namespace Dms\Index;

use Kotchasan\DataTable;
use Kotchasan\Date;
use Kotchasan\Http\Request;
use Kotchasan\Language;

/**
 * module=dms
 *
 * @author Goragod Wiriya <[email protected]>
 *
 * @since 1.0
 */
class View extends \Gcms\View
{
    /**
     * @var object
     */
    private $category;

    /**
     * แสดงรายการเอกสารส่ง.
     *
     * @param Request $request
     * @param array $login
     *
     * @return string
     */
    public function render(Request $request, $login)
    {
        // ค่าที่ส่งมา
        $params = array(
            'module' => 'borrow-search',
            'from' => $request->request('from')->date(),
            'to' => $request->request('to')->date(),
            'search' => $request->request('search')->topic(),
        );
        foreach (Language::get('DMS_CATEGORIES') as $k => $label) {
            $params[$k] = $request->request($k)->toInt();
        }
        // หมวดหมู่
        $this->category = \Dms\Category\Model::init();
        // URL สำหรับส่งให้ตาราง
        $uri = $request->createUriWithGlobals(WEB_URL.'index.php');
        // ตาราง
        $table = new DataTable(array(
            /* Uri */
            'uri' => $uri,
            /* Model */
            'model' => \Dms\Index\Model::toDataTable($params, $login),
            /* รายการต่อหน้า */
            'perPage' => $request->cookie('dmsIndex_perPage', 30)->toInt(),
            /* เรียงลำดับ */
            'sort' => 'create_date DESC',
            /* ฟังก์ชั่นจัดรูปแบบการแสดงผลแถวของตาราง */
            'onRow' => array($this, 'onRow'),
            /* คอลัมน์ที่ไม่ต้องแสดงผล */
            'hideColumns' => array('id', 'dms_id', 'url'),
            /* ตัวเลือกการแสดงผลที่ส่วนหัว */
            'filters' => array(
                array(
                    'name' => 'from',
                    'type' => 'date',
                    'text' => '{LNG_from}',
                    'value' => $params['from'],
                ),
                array(
                    'name' => 'to',
                    'type' => 'date',
                    'text' => '{LNG_to}',
                    'value' => $params['to'],
                ),
            ),
            /* ตั้งค่าการกระทำของของตัวเลือกต่างๆ ด้านล่างตาราง ซึ่งจะใช้ร่วมกับการขีดถูกเลือกแถว */
            'action' => 'index.php/dms/model/index/action',
            'actionCallback' => 'dataTableActionCallback',
            /* ส่วนหัวของตาราง และการเรียงลำดับ (thead) */
            'headers' => array(
                'create_date' => array(
                    'text' => '{LNG_Date}',
                ),
                'document_no' => array(
                    'text' => '{LNG_Document No.}',
                ),
                'topic' => array(
                    'text' => '{LNG_Document title}',
                ),
                'file_name' => array(
                    'text' => '{LNG_File name}',
                ),
                'ext' => array(
                    'text' => '',
                ),
                'downloads' => array(
                    'text' => '',
                ),
            ),
            /* รูปแบบการแสดงผลของคอลัมน์ (tbody) */
            'cols' => array(
                'ext' => array(
                    'class' => 'center',
                ),
                'downloads' => array(
                    'class' => 'center',
                ),
            ),
            /* ฟังก์ชั่นตรวจสอบการแสดงผลปุ่มในแถว */
            'onCreateButton' => array($this, 'onCreateButton'),
            /* ปุ่มแสดงในแต่ละแถว */
            'buttons' => array(
                'download' => array(
                    'class' => 'icon-download button purple',
                    'id' => ':dms_id_:id',
                    'text' => '{LNG_Download}',
                ),
                'detail' => array(
                    'class' => 'icon-info button orange',
                    'id' => ':dms_id_:id',
                    'text' => '{LNG_Detail}',
                ),
            ),
        ));
        foreach (Language::get('DMS_CATEGORIES') as $k => $label) {
            if ($k != 'department') {
                $table->filters[] = array(
                    'name' => $k,
                    'text' => $label,
                    'options' => array(0 => '{LNG_all items}') + $this->category->toSelect($k),
                    'value' => $params[$k],
                );
            }
            $table->headers[$k] = array(
                'text' => $label,
                'class' => 'center',
            );
            $table->cols[$k] = array(
                'class' => 'center',
            );
        }
        $table->filters['search'] = array(
            'name' => 'search',
            'type' => 'text',
            'text' => '{LNG_Search}',
            'value' => $params['search'],
        );
        // save cookie
        setcookie('dmsIndex_perPage', $table->perPage, time() + 2592000, '/', HOST, HTTPS, true);
        // คืนค่า HTML
        return $table->render();
    }

    /**
     * จัดรูปแบบการแสดงผลในแต่ละแถว
     *
     * @param array $item
     *
     * @return array
     */
    public function onRow($item, $o, $prop)
    {
        $item['create_date'] = Date::format($item['create_date'], 'd M Y');
        if ($item['url'] != '') {
            $item['ext'] = '';
        } else {
            $item['ext'] = '<img src="'.(is_file(ROOT_PATH.'skin/ext/'.$item['ext'].'.png') ? WEB_URL.'skin/ext/'.$item['ext'].'.png' : WEB_URL.'skin/ext/file.png').'" alt="'.$item['ext'].'">';
        }
        $item['downloads'] = '<span id="downloads_'.$item['id'].'" class="icon-valid color-'.(empty($item['downloads']) ? 'silver' : 'green').' notext"></span>';
        return $item;
    }

    /**
     * ฟังกชั่นตรวจสอบว่าสามารถสร้างปุ่มได้หรือไม่
     *
     * @param array $item
     *
     * @return array
     */
    public function onCreateButton($btn, $attributes, $item)
    {
        if ($btn == 'download') {
            if ($item['url'] != '') {
                $attributes['href'] = $item['url'];
                $attributes['class'] = 'button blue icon-world';
                $attributes['text'] = '{LNG_URL}';
                $attributes['target'] = '_blank';
            }
            return $attributes;
        } else {
            return $attributes;
        }
    }
}



ขอบคุณครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-05-26 14:17:11 By : npolkhet
 


 

No. 15



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



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


ตอบตามหัวกระทู้นะครับ ต้องเขียน link CSS ยังไง

เข้าไปที่่ [folder ที่ติดตั้ง]/skin/default/index.html เปิดไฟล์นี้ขึ้นมา
แก้ลงไปใน <head>...</head> ได้เลย
แต่... จากที่ผมทดลอง

Code
<head> <meta charset=utf-8> <meta name=viewport content="width=device-width, initial-scale=1.0"> <link rel="shortcut icon" href="{WEBURL}favicon.ico"> <title>{TITLE}</title> <link rel=stylesheet href="index.php/css/view/index"> <link rel="stylesheet" href="somewhere.css"> <script src="index.php/js/view/index/{LANGUAGE}"></script> </head>

มันจะไปมองหาไฟล์ css ที่ [folder ที่ติดตั้ง]/somewhere.css
ซึ่งพอผมสร้างไฟล์ไว้ตรงนั้นมันก็เจอจริงๆ
แต่ถ้าไฟล์ไม่อยู่ตรงนั้น แทนที่มันจะแจ้ง error 404 ให้เหมือนปกติที่ระบบทั่วไปเขาทำกัน ระบบนี้ดันไปเอาหน้า html เดาว่าของ index.html มาแทนแล้วส่ง status 200

คือถ้าทำแบบนี้แล้วไฟล์ไม่มีอยู่จริงจะไม่มีทางรู้ตัวเลย
ผมมองว่าการทำแบบนี้ไม่เป็นมิตรกับทีมออกแบบ แต่ด้วยตัว framework ของเขาคงจะมีวิธีที่ดีกว่านี้ในการเพิ่ม css ซึ่งผมยังไม่ได้ศึกษา.

ทีนี้พอลองดูตัวอย่างจาก css ของเขาที่มี index.php/css/view/index มันก็จะไปเจอที่ไฟล์ [folder ที่ติดตั้ง]/modules/css/views/index.php ให้เปิดไฟล์นี้ขึ้นมาดู
ถ้าจะทำตามแบบเขาก็เพิ่มโค้ดแบบนี้ลงไป

Code (PHP)
public function index()
    {
        // โหลด css หลัก
        $data = file_get_contents(ROOT_PATH.'skin/fonts.css');
        $data = preg_replace('/url\(([\'"])?fonts\//isu', 'url(\\1'.WEB_URL.'skin/fonts/', $data);
        $data .= file_get_contents(ROOT_PATH.'skin/gcss.css');
        // css ของ template
        $data2 = file_get_contents(ROOT_PATH.self::$cfg->skin.'/style.css');
        $data2 = preg_replace('/url\(([\'"])?(img|fonts)\//isu', 'url(\\1'.WEB_URL.self::$cfg->skin.'/\\2/', $data2);
        // ที่เพิ่มเข้ามา 
        $data3 = file_get_contents(ROOT_PATH.'/somewhere.css');
        // โหลดโมดูลที่ติดตั้งแล้ว
        $modules = \Gcms\Modules::create();
        // ไดเร็คทอรี่โมดูล
        $dir = $modules->getDir();
        // css ของโมดูล
        foreach ($modules->get() as $module) {
            if (is_file($dir.$module.'/style.css')) {
                $data2 .= preg_replace('/url\(img\//isu', 'url('.WEB_URL.'modules/'.$module.'/img/', file_get_contents($dir.$module.'/style.css'));

            }
        }
        $data2 .= 'header.header,body.admin.welcomepage,.language-menu li>a:hover,.topmenu>ul ul>li.hover>a,.topmenu>ul ul>li.hover>.menu-arrow,.topmenu>ul ul>li:hover>a,.topmenu>ul ul>li:hover>.menu-arrow,.gdpanel a:hover{background-color:'.self::$cfg->bg_color.'}';
        $data2 .= 'header.header,.topmenu>ul>li,.language-menu li>a:hover,.topmenu>ul ul>li.hover>a,.topmenu>ul ul>li.hover>.menu-arrow,.topmenu>ul ul>li:hover>a,.topmenu>ul ul>li:hover>.menu-arrow,.gdpanel a:hover{color:'.self::$cfg->color.'}';
        $data2 .= '.tab_menus>li.select,.tab_menus>li:hover{background-color:'.self::$cfg->bg_color.';color:'.self::$cfg->color.'}';
        $data2 .= '.tab_menus ul>li:hover{background-color:'.self::$cfg->bg_color.';color:'.self::$cfg->color.'}';
        $data2 .= '.border-color{border-color:'.self::$cfg->bg_color.'}';
        foreach (self::$cfg->color_status as $key => $value) {
            $data2 .= '.status'.$key.'{color:'.$value.'}';
        }
        // compress css
        $data = self::compress($data.$data2.$data3);
        // Response
        $response = new \Kotchasan\Http\Response();
        $response->withHeaders(array(
            'Content-type' => 'text/css; charset=utf-8',
            'Cache-Control' => 'max-age=31557600',
        ))
            ->withContent($data)
            ->send();
    }


ผมเพิ่ม $data3 ลงไปเพื่อพอเป็นตัวอย่าง ยังไม่ได้ทดลอง แต่คิดว่าน่าจะพอได้ ตำแหน่งไฟล์ก็คงที่เดียวกันกับที่ผมบอกข้างบนนู่น
ทดลองดูครับ หวังว่าจะได้ผล
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-05-26 14:55:07 By : mr.v
 


 

No. 16



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



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


ตอบความคิดเห็นที่ : 15 เขียนโดย : mr.v เมื่อวันที่ 2021-05-26 14:55:07
รายละเอียดของการตอบ ::
สุดยอดครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-05-26 15:37:54 By : Chaidhanan
 


 

No. 17



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



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


framework ตัวนี้มีอะไรแปลกไม่เหมือนคนอื่นหลายอย่างเลย เรื่อง 404 ก็อย่างที่บอกไปแล้วข้างบน
อีกเรื่องคือ Views

อ้างอิงจาก Symfony PHP framework ระดับสากลที่มีมาเก่าแก่ https://symfony.com/doc/2.0/quick_tour/the_view.html
Codeigniter ที่เคยโด่งดัง https://codeigniter.com/userguide3/general/views.html
Laravel https://laravel.com/docs/master/views

จะเห็นว่าทุกตัวเขาใช้ View ในการแสดงผล HTML ทั้งนั้น จะบอกว่า views คือ template ก็พอได้ แต่มันคือส่วนที่แสดงผลออกมาเป็น HTML
ส่วนของ framework เจ้านี้ View เป็น php class .........ทำไมเป็นอย่างนั้นไม่รู้??

ทำให้ตอนแรกผมจะพุ่งเป้าไปที่ไฟล์ views เพื่อแก้แท็ก link css ในนั้น พอเปิดเข้าไปกลายเป็น php class ที่ไม่เกี่ยวกับ views อย่างที่ค่ายอื่นๆเขาเป็นกัน
สุดท้ายต้องมั่วๆไปเข้าโฟลเดอร์ skin ถึงจะเจอ. อันนี้ก็เป็นอีกหนึ่งความสับสนที่เชื่อว่าถ้าคนใช้ framework เจ้าอื่นๆในตลาดมาใช้แบบนี้จะต้องหาไม่เจอ งงเป็นไก่ตาแตกอยู่พักใหญ่แน่นอน

มี framework อีกตัวหนึ่งที่มี view class คล้ายๆกัน คือ FuelPHP https://fuelphp.com/docs/classes/view.html
แต่ว่าของเขาไม่ได้มาลักษณะนี้ เป็นเหมือน class ให้ใช้งานได้เฉยๆ เพราะใน view ปกติของเขานั้น https://fuelphp.com/docs/general/views.html ก็ยังคงเหมือน framework อื่นๆทั่วไป คือเป็น HTML, อยู่ในโฟลเดอร์ที่ไม่ชวนสับสน.
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-05-26 21:35:49 By : mr.v
 


 
สรุปท่าน จขกท. ได้นำวิธีแก้ปัญหาของ ท่าน V ไปใช้หรือยัง ...ผมรอคำตอบอยู่นะ

ถ้าดีจริงๆ เผื่อภายภาคหน้าจะได้มีโอกาสศึกษากลยุทธ์การสับมือหลอกหรือนำไปใช้บ้าง
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-05-28 13:21:12 By : พญามัจจุราช
 


 

No. 19



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



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


ตอบความคิดเห็นที่ : 18 เขียนโดย : พญามัจจุราช เมื่อวันที่ 2021-05-28 13:21:12
รายละเอียดของการตอบ ::
ต้องขอขอบคุณ mr.v มากครับ ที่เสียสละเวลาช่วยดูให้ แต่พอดีช่วงนี้มีงานแทรกยังไม่มีเวลาลองทำดู เดี๋ยวสักวันสองวันจะลองทำดูครับ และ ได้ผลยังไงจะมาแจ้งให้ทราบครับ

ขอบคุณครับ



ประวัติการแก้ไข
2021-05-28 16:10:33
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-05-28 16:09:18 By : npolkhet
 


 

No. 20



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



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


ตอบความคิดเห็นที่ : 15 เขียนโดย : mr.v เมื่อวันที่ 2021-05-26 14:55:07
รายละเอียดของการตอบ ::
ขอบคุณมากครับ ที่เสียสละเวลาช่วยดูให้ พอดีช่วงนี้จะยุ่งหน่อยเสร็จแล้วผมจะลองทำดู แล้วจะมาบอกผลนะครับ

ขอบคุณครับ



ประวัติการแก้ไข
2021-05-28 16:15:05
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-05-28 16:14:32 By : npolkhet
 


 

No. 21



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



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


ตอบความคิดเห็นที่ : 15 เขียนโดย : mr.v เมื่อวันที่ 2021-05-26 14:55:07
รายละเอียดของการตอบ ::
ลองแล้วครับ ตามตัวอย่างแรกได้ครับ แต่ตัวที่สองที่เขียนบน php ไม่ได้ผลครับ ยังไงก็ขอบคุณ mr.v มากครับ แต่ก็ยังแปลกใจอยู่ที่ว่า ถ้าลองเขียนลงไปที่ไฟล์ css ของเค้าเลย อย่างเช่น gcss.css หรือ style.css ก็ไม่ได้ผล แต่ถ้าเอา class เดิมที่มี เขียนเพิ่มเติมเข้าไปใช้ได้ ทั้งที่เขียนเหมือนกันทุกอย่าง

ขอสอบถามเพิ่มเติมนิดนะครับ คุณ mr.v พอรู้การเขียน css ตัดประโยคให้สั้นลงไหมครับ พอดีผมได้เขียนตามที่ได้มาตาม link นี้ ก็ไม่ได้ผล คือ เป็นการดึงข้อมูลมาจาก database แล้วมาใช้ css ตัด ไม่ได้ผล แต่ถ้าเอา css นี้ มาตัดประโยคที่เป็นข้อความที่เขียนบน html ตรงๆ ตัดได้ พอรู้สาเหตุไหมครับ

https://qrgo.page.link/LZfHB

ขอบคุณครับ.



ประวัติการแก้ไข
2021-06-01 16:52:59
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-01 16:48:10 By : npolkhet
 


 

No. 22



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



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


ดูจาก วิวซอร์ส ครับ ว่าที่เราแก้ไข มันได้เข้าไปปรากฏใน css บน browser หรือเปล่า
อาจจะแก้ไขผิด ไฟล์
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-01 18:34:48 By : Chaidhanan
 


 

No. 23



โพสกระทู้ ( 4,169 )
บทความ ( 7 )

Hall of Fame 2012

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


Code (PHP)
.card-text {
    display: block;
    display: -webkit-box;
    line-height: 2;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
    text-overflow: ellipsis;
}


ข้อความ 3 บรรทัด ตัดด้วย ...
kkkk


ประวัติการแก้ไข
2021-06-01 19:02:27
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-01 19:00:50 By : Genesis™
 


 

No. 24



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



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


ตอบความคิดเห็นที่ : 21 เขียนโดย : npolkhet เมื่อวันที่ 2021-06-01 16:48:10
รายละเอียดของการตอบ ::
ถ้าแก้บน php จำได้ว่ามันจะไม่งอกไฟล์ใหม่นะครับ มันรวมเป็นไฟล์เดียวกันเลย ดังนั้นต้องทดลองด้วยอะไรที่โดดเด่นประหลาดสุด อย่างเช่น
Code
body { background-color: green; color: white; }

ให้พื้นหลังเขียวปี๋ตัวหนังสือขาวๆ ถ้ามันเปลี่ยนแสดงว่าได้ผล
ซึ่งผมเคยลองแล้วมันก็เปลี่ยนนะ ต้องดูจากตรงนี้เป็นหลักแล้วค่อยไปเปลี่ยนเป็นไฟล์อื่น

อย่างที่ผมบอก คือ framework ตัวนี้มันไม่เป็นมิตรกับ ทีมออกแบบ เลย เพราะตรวจอะไรแทบไม่ได้เลย ไฟล์หาพบไม่พบก็จะไม่รู้กันเลย
debug bar ให้รู้ก็ไม่มี หรือมีแต่ผมไม่ทราบวิธีเปิดดู...
ต้องนั่งงมไป ผมก็ช่วยอะไรไม่ได้มาก เพราะจะต้องมาดูโครงสร้างไฟล์ทั้งหมดว่ามีอะไรอยู่ตรงไหน

ถ้าเป็นไปได้ลองหาตัวอื่นๆมาใช้แทน ผมหาเจอของตปท.มีทำแจกฟรีเยอะแยะ แต่ไม่รู้ตรงที่ต้องการมั้ย.

ส่วน css ตัดคำมีคนตอบแล้วครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-01 20:19:37 By : mr.v
 


 

No. 25



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



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


ตอบความคิดเห็นที่ : 23 เขียนโดย : Genesis™ เมื่อวันที่ 2021-06-01 19:00:50
รายละเอียดของการตอบ ::
ขอบคุณครับ ลองดูแล้วครับ อย่างที่บอกถ้าใช้กับ Text ที่เขียนบน html ธรรมดาจะตัดได้ แต่ของผมเป็นการดึงมาจาก Database ที่เก็บข้อมูลไว้ จะไม่ตัดเลยครับ พอเคยลองดึงมาจาก database แล้วเขียน css ตัดได้หรือเปล่าครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-01 21:48:46 By : npolkhet
 


 

No. 26



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



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


ตอบความคิดเห็นที่ : 24 เขียนโดย : mr.v เมื่อวันที่ 2021-06-01 20:19:37
รายละเอียดของการตอบ ::
ครับ ผมก็เริ่มจากใส่สีแดงอย่างเดียวเลยในไฟล์ css ที่สร้างใหม่ ก็ไม่เป็นผล เลยมาทำตามตัวอย่างแรกที่ลิ้งค์ในไฟล์ html ได้ผลครับ ก็เลยทำตามนั้นไปก่อน ถ้า คุณ mr.v มีตัวอย่างอื่นผมขอด้วยแล้วกันครับ เผื่อมีไอเดียใหม่ๆ ขอบคุณมากครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-01 21:59:16 By : npolkhet
 


 

No. 27



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



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


ปัญหา CSS ไม่ตัดคำไม่ใช่ว่ามันไม่ตัดหรอกมั้ง มันเป็นเพราะการเขียน override ไม่ถูกไม่ครบรอบของมัน มันเลยไม่ยอม override ให้มากกว่า
คือถ้าของเดิมมันมี css เขียนนำมายังไงก็ต้องเขียนอิงจากเดิมไปเพื่อให้มันทำงานทับ
ตัวอย่างเช่นของเดิมเป็น .table .tr .td จู่ๆไปเขียนให้ทำงานทับแค่ .td มันก็ไม่ได้ผลหรอก เรื่องนี้มันต้องเปิด inspector ดูด้วยเพราะปัญหามันอาจจะมาจากอย่างอื่นอีกก็ได้

ส่วนการเรียกใช้ CSS ก็ตามตย.โค้ดที่ผมเขียนไว้ด้านบนนั่นแหละครับ ทั้งตำแหน่งทั้งชื่อไฟล์
มันเปลี่ยน body background ได้จริงๆผมเคยลองหลักจากโพสต์ข้างบนเสร็จ มันก็เปลี่ยน ที่ไม่เปลี่ยนเพราะมันหาไฟล์ไม่เจอมากกว่า ก็ต้องไล่ดูตามที่ผมบอกจนกว่ามันจะไปเจอตำแหน่งไฟล์ที่ถูกต้อง ซึ่งไม่รู้ด้วยว่าจะไล่ยังไงเพราะ framework เขาไม่เอื้ออำนวยให้อย่างที่บอกไปแล้ว ต้องค่อยๆคลำเอาเองจนกว่าจะได้.

หลังจากผมโพสต์ข้างบนนู่น ลอง css ใน php ได้ผล ผมก็ลบทิ้งหมดแล้วครับ

Code (PHP)
$data3 = file_get_contents(ROOT_PATH.'/somewhere.css');
// ไฟล์อยู่ที่ [folder ที่ติดตั้ง]/somewhere.css

// ...

$data = self::compress($data.$data2.$data3);



ประวัติการแก้ไข
2021-06-01 22:29:30
2021-06-01 22:42:29
2021-06-01 22:43:32
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-01 22:24:00 By : mr.v
 


 

No. 28



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



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


ตอบความคิดเห็นที่ : 27 เขียนโดย : mr.v เมื่อวันที่ 2021-06-01 22:24:00
รายละเอียดของการตอบ ::
ขอแก้ไข

- จากคำแนะนำของ คุณ Genesis ทำได้ครับ ที่ครั้งแรกไม่ได้ก็เพราะว่า ไม่ได้ Clear browsing data ของ chrome หลักจากทำ css เสร็จ อันนี้ก็งงอยู่นะว่า ทุกครั้งที่มีการแก้ css ต้อง Clear browsing data ของ chrome ทุกครั้ง ย้ำว่าต้อง Clear ทุกครั้งจริงๆ ไม่งั้นไม่แสดงผล

- จากคำแแนะนำของ คุณ Mr.v ล่าสุด เรื่องลิงค์ไป css ไฟล์ พอดีผมตกบรรทัดนี้ไป $data = self::compress($data.$data2.$data3); พอแก้แล้วก็ใช้ได้ผลครับ

ผมขอรบกวน mr.v อีกเรื่อง (ถ้าพอมีเวลานะครับ) คุณ mr.v คงเคยได้เข้าไปดูเวปไซต์ตัวนี้ที่เจ้าของเค้าทำไว้ พอดีผมก็ติดอยู่เรื่องนึง อย่างหน้านี้ https://edms.acc.in.th/#module=dms พอเข้าไปดูรายละเอียดของเอกสาร ผมอยากให้มันเอารายการของ แผนก มาแสดงในหน้ารายละเอียดด้วย ผมได้ลองเขียนคำสั่งเพื่อ Join ตารางในฐานข้อมูล ทำแล้วหลายวิธีก็ไม่มา ถ้าคุณ mr.v หรือท่านใดเก่งเรื่อง sql command ถ้ามีเวลารบกวนแนะนำด้วยนะครับ

ขอบคุณครับ.

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-03 16:18:44 By : npolkhet
 


 

No. 29



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



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


ลองศึกษา เรื่อง plagma nocache ดูบ้างครับ ช่วง developer นี่ ใช้งานจะสดวกมากกว่า พอโค๊ดอยู่อยู่ ค่อยเอาออก
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-03 17:48:04 By : Chaidhanan
 


 

No. 30



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



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


ตอบความคิดเห็นที่ : 28 เขียนโดย : npolkhet เมื่อวันที่ 2021-06-03 16:18:44
รายละเอียดของการตอบ ::
ctrl+f5 ก็ไม่ต้องเคลียร์ บางทีสำหรับ chrome ต้อง ctrl+f5 สองรอบ+

เรื่องเพิ่ม self::compress ก็ตรงที่ผมบอกเลยในตอนต้นๆของกระทู้ ว่าต้องดูให้ละเอียด จะไปมองข้ามเล็กๆน้อยๆไม่ได้ ถ้าไม่แน่ใจควรหาเครื่องมือ compare มาช่วย ยกตัวอย่างเช่น winmerge ของฟรี ช่วยแจงบรรทัดต่อบรรทัดเลย
https://winmerge.org/?lang=en

แล้วก็ถ้าไม่ได้ ไม่ควรแค่บอกว่าไม่ได้เหมือนที่ตอบไปแล้ว คือควรเอาที่ทำไปแล้วมาลงด้วยว่าไม่ได้แต่ทำอะไรไปแล้ว ไม่งั้นคนตอบก็เดาไม่ได้ มันก็วนอยู่ตรงนี้คือคนตอบทำได้ คนทำทำไม่ได้แต่ไม่บอกว่าทำไปยังไง



ประวัติการแก้ไข
2021-06-03 17:50:46
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-03 17:48:18 By : mr.v
 


 

No. 31



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



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


เรื่อง sql ก็เหมือนกันครับ ทำแล้วไม่มา ทำยังไงบ้าง เอาโค้ดมาดูเผื่อมีคนตอบได้
ส่วนผมอย่างที่บอก ผมลองเสร็จก็ลบไปแล้ว จำไม่ได้แล้วล่ะว่าอะไรยังไง
แล้วผมก็ไม่ค่อยแม่น sql ซะด้วย ถ้าดูรู้ก็จะพอตอบได้บ้างนะครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-03 17:58:46 By : mr.v
 


 

No. 32



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



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


ตอบความคิดเห็นที่ : 31 เขียนโดย : mr.v เมื่อวันที่ 2021-06-03 17:58:46
รายละเอียดของการตอบ ::
จากคำแนะนำของ คุณ mr.v ผมขอเอาโค๊ดมาลงเผื่อท่านใดพอมีคำแนะนำได้ครับ

Code (PHP)
<?php
/**
 * @filesource modules/dms/models/index.php
 *
 * @copyright 2016 Goragod.com
 * @license http://www.kotchasan.com/license/
 *
 * @see http://www.kotchasan.com/
 */

namespace Dms\Index;

use Gcms\Login;
use Kotchasan\Database\Sql;
use Kotchasan\Http\Request;
use Kotchasan\Language;

/**
 * module=dms
 *
 * @author Goragod Wiriya <[email protected]>
 *
 * @since 1.0
 */
class Model extends \Kotchasan\Model
{
    /**
     * Query ข้อมูลสำหรับส่งให้กับ DataTable
     *
     * @param array $params
     * @param array $login
     *
     * @return \Kotchasan\Database\QueryBuilder
     */
    public static function toDataTable($params, $login)
    {
        $where = array();
        if (!empty($params['from'])) {
            $where[] = array('A.create_date', '>=', $params['from']);
        }
        if (!empty($params['to'])) {
            $where[] = array('A.create_date', '<=', $params['to']);
        }
        $select = array('A.id', 'A.create_date', 'A.document_no', 'A.topic', 'A.detail', 'A.agency', 'A.author', 'A.syear', 'A.group');
        $query = static::createQuery()
            ->from('dms A');
        $n = 1;
        foreach (Language::get('DMS_CATEGORIES') as $k => $label) {
            $query->join('dms_meta N'.$n, 'LEFT', array(array('N'.$n.'.dms_id', 'A.id'), array('N'.$n.'.type', $k)))
                ->join('category C'.$n, 'LEFT', array(array('C'.$n.'.category_id', 'N'.$n.'.value'), array('C'.$n.'.type', $k)));
            if ($k == 'department') {
                $select[] = Sql::GROUP_CONCAT('C'.$n.'.topic', $k);
                if (!empty($login['department'])) {
                    $where[] = array('N'.$n.'.value', $login['department']);
                }
            } else {
                $select[] = 'C'.$n.'.topic '.$k;
            }
            if ($params[$k] > 0) {
                $where[] = array('N'.$n.'.value', $params[$k]);
            }
            $n++;
        }
        $select[] = 'A.url';
        $q1 = $query->select($select)
            ->where($where)
            ->groupBy('A.id');
        $where = array();
        if (!empty($params['search'])) {
            $where[] = Sql::create("(A.`detail` LIKE '%$params[search]%' OR A.`document_no` LIKE '%$params[search]%' OR A.`topic` LIKE '%$params[search]%' OR F.`topic` LIKE '%$params[search]%' OR A.`agency` LIKE '%$params[search]%' OR A.`author` LIKE '%$params[search]%' OR A.`syear` LIKE '%$params[search]%' OR A.`group` LIKE '%$params[search]%')");
        }
        return static::createQuery()
            ->select(Sql::IFNULL('F.id', 0, 'id'), 'A.id dms_id', 'A.create_date', 'A.document_no', 'A.topic', 'A.detail', 'A.agency', 'A.author', 'A.syear', 'F.topic file_name', 'F.ext', 'W.downloads', 'A.url', 'A.group', 'A.department')
            ->from(array($q1, 'A'))
            ->join('dms_files F', 'LEFT', array('F.dms_id', 'A.id'))
            ->join('dms_download W', 'LEFT', array(array('W.file_id', Sql::create('CASE WHEN A.`url`="" THEN F.`id` ELSE 0 END')), array('W.dms_id', 'A.id'), array('W.member_id', $login['id'])))
            ->where($where);
    }

    /**
     * รับค่าจาก action
     *
     * @param Request $request
     */
    public function action(Request $request)
    {
        $ret = array();
        // session, referer, member, สามารถดูหรือดาวน์โหลดเอกสารได้
        if ($request->initSession() && $request->isReferer() && $login = Login::isMember()) {
            if (Login::checkPermission($login, 'can_download_dms')) {
                // ค่าที่ส่งมา
                $file_id = $request->post('id')->toInt();
                if (preg_match('/(detail|download)_([0-9]+)/', $request->post('action')->toString(), $match)) {
                    if ($match[1] == 'detail') {
                        $document = \Dms\View\Model::get($match[2]);
                        if ($document) {
                            $ret['modal'] = Language::trans(createClass('Dms\View\View')->render($document, $login));
                        }
                    } elseif ($match[1] == 'download') {
                        if ($file_id > 0) {
                            // ดาวน์โหลดไฟล์
                            $ret = $this->fileDownload($file_id, $login['id']);
                        } else {
                            // เปิด URL
                            $ret = $this->openUrl($match[2], $login['id']);
                        }
                    }
                }
            }
        }
        // คืนค่าเป็น JSON
        echo json_encode($ret);
    }

    /**
     * เปิด URL
     *
     * @param int $id
     * @param int $member_id
     *
     * @return array
     */
    public function openUrl($id, $member_id)
    {
        $download = $this->db()->createQuery()
            ->from('dms_download')
            ->where(array(
                array('dms_id', $id),
                array('file_id', 0),
                array('member_id', $member_id),
            ))
            ->first('id', 'downloads');
        $save = array(
            'downloads' => $download ? $download->downloads + 1 : 1,
            'dms_id' => $id,
            'file_id' => 0,
            'member_id' => $member_id,
            'last_update' => date('Y-m-d H:i:s'),
        );
        if ($download) {
            $this->db()->update($this->getTableName('dms_download'), $download->id, $save);
        } else {
            $this->db()->insert($this->getTableName('dms_download'), $save);
        }
        return array();
    }

    /**
     * ดาวน์โหลดไฟล์
     *
     * @param int $file_id
     * @param int $member_id
     *
     * @return array
     */
    public function fileDownload($file_id, $member_id)
    {
        $ret = array();
        // อ่านรายการที่เลือก
        $result = $this->db()->createQuery()
            ->from('dms_files')
            ->where(array('id', $file_id))
            ->first('id', 'dms_id', 'size', 'name', 'file', 'ext');
        if ($result) {
            // ไฟล์
            $file = ROOT_PATH.DATA_FOLDER.$result->file;
            if (is_file($file)) {
                // สามารถดาวน์โหลดได้
                $download = $this->db()->createQuery()
                    ->from('dms_download')
                    ->where(array(
                        array('file_id', $result->id),
                        array('member_id', $member_id),
                    ))
                    ->first('id', 'downloads');
                $save = array(
                    'downloads' => $download ? $download->downloads + 1 : 1,
                    'dms_id' => $result->dms_id,
                    'file_id' => $result->id,
                    'member_id' => $member_id,
                    'last_update' => date('Y-m-d H:i:s'),
                );
                if ($download) {
                    $this->db()->update($this->getTableName('dms_download'), $download->id, $save);
                } else {
                    $this->db()->insert($this->getTableName('dms_download'), $save);
                }
                // id สำหรบไฟล์ดาวน์โหลด
                $id = uniqid();
                // บันทึกรายละเอียดการดาวน์โหลดลง SESSION
                $file = array(
                    'file' => $file,
                    'size' => $result->size,
                );
                if (self::$cfg->dms_download_action == 1 && in_array($result->ext, array('pdf', 'jpg', 'jpeg', 'png', 'gif'))) {
                    $file['name'] = '';
                    $file['mime'] = \Kotchasan\Mime::get($result->ext);
                } else {
                    $file['name'] = $result->name.'.'.$result->ext;
                    $file['mime'] = 'application/octet-stream';
                }
                $_SESSION[$id] = $file;
                // คืนค่า
                $ret['open'] = WEB_URL.'modules/dms/filedownload.php?id='.$id;
            } else {
                // ไม่พบไฟล์
                $ret['alert'] = Language::get('File not found');
            }
        }
        return $ret;
    }
}



นี่เป็นหน้าแสดงรายการที่ดึงตัวแปร department ออกมาแสดง ซึ่งคำสั่งหลักอยู่ที่บรรทัดที่ 73 (A.department)

Code (PHP)
<?php
/**
 * @filesource modules/dms/models/view.php
 *
 * @copyright 2016 Goragod.com
 * @license http://www.kotchasan.com/license/
 *
 * @see http://www.kotchasan.com/
 */

namespace Dms\View;

/**
 * โมเดลสำหรับอ่านเอกสาร
 *
 * @author Goragod Wiriya <[email protected]>
 *
 * @since 1.0
 */
class Model extends \Kotchasan\Model
{
    /**
     * อ่านเอกสารที่ $id
     * ไม่พบ คืนค่า null
     *
     * @param int $id
     *
     * @return object
     */
    public static function get($id)
    {
        return static::createQuery()
            ->from('dms A')
            ->where(array('A.id', $id))
            ->first('A.id', 'A.document_no', 'A.topic', 'A.member_id', 'A.create_date', 'A.detail', 'A.url', 'A.agency', 'A.author', 'A.syear', 'A.subagen', 'A.group');
    }

    /**
     * อ่านรายการไฟล์
     * และ ประวัติการดาวน์โหลดของคนที่ login
     *
     * @param int $id
     * @param array $login
     *
     * @return array
     */
    public static function files($id, $login)
    {
        $sql = static::createQuery()
            ->select('D.downloads')
            ->from('dms_download D')
            ->where(array(
                array('D.file_id', 'F.id'),
                array('D.member_id', $login['id']),
            ));
        return static::createQuery()
            ->select('F.topic', 'F.ext', array($sql, 'downloads'))
            ->from('dms_files F')
            ->where(array('F.dms_id', $id))
            ->cacheOn()
            ->execute();
    }
}



ส่วนอันนี้เป็นหน้าที่แสดงรายละเอียดของรายการใน ตัวอย่างแรก โดยคำสั่งหลักในการดึงข้อมูลมาแสดงจะอยู่ที่บรรทัดที่ 35 ซึ่งถ้าผมเขียนคำสั่งเหมือน ตัวอย่างแรก คือเอา A.department ใส่ลงไป ต่อท้าย A.group จะไม่เป็นผล รบกวนผู้รู้ให้คำแนะนำด้วยครับ

ขอบคุณครับ.

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2021-06-04 09:30:32 By : npolkhet
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ช่วยดูด้วยครับว่าต้องเขียน Link CSS ยังไง ไว้ตรงไหนใน php code นี้
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ 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 02
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 อัตราราคา คลิกที่นี่