เป็นไลบรารี PHP ที่ช่วยให้สร้างฟอร์ม (ดู) ได้อย่างง่ายดาย สะอาดตา และไม่ทำให้ประสิทธิภาพลดลง ใช้ไลบรารี BladeOne เพื่อเรนเดอร์มุมมอง ไลบรารีนี้ใช้การอ้างอิงเดียว ไฟล์เดียวเท่านั้น และไม่มีอะไรเพิ่มเติม
ห้องสมุดนี้ทำงานในสองวิธี:
ผู้แต่งต้องการ eftec/ BladeOneHtml
include " vendor/autoload.php " ;
use eftec bladeone BladeOne ;
use eftec BladeOneHtml BladeOneHtml ;
class myBlade extends BladeOne {
use BladeOneHtml ;
}
$ blade = new myBlade ();
// for our example:
$ myvalue =@ $ _REQUEST [ ' myform ' ];
echo $ blade -> run ( " exampleview " , [ ' myvalue ' => $ myvalue ]);
< body >
@form()
@input(type="text" name="myform" value=$myvalue)
@button(type="submit" value="Send")
@endform()
</ body >
$blade=ใหม่ myBlade();
ไลบรารีนี้จะเพิ่มแท็กชุดใหม่สำหรับเทมเพลต แท็กใช้อาร์กิวเมนต์ที่มีชื่อ ดังนั้นจึงกำหนดค่าได้ง่าย
@<tag>(argument1="value" argument2='value' argument3=value argument4=$variable argument5=function(), argument6="aaa $aaa")
ไลบรารีนี้ใช้อาร์กิวเมนต์ html ดั้งเดิม แต่บางอาร์กิวเมนต์เป็นแบบพิเศษ
การโต้แย้ง | คำอธิบาย | ตัวอย่าง |
---|---|---|
ข้อความ | มันเพิ่มเนื้อหาระหว่างแท็ก ค่าภายในจะไม่ถูกยกมาเสมอ | @tag(text="hello") -> <tag>สวัสดี</tag> |
ก่อน | มันเพิ่มเนื้อหาก่อนแท็ก | @tag(pre="hello") -> สวัสดี<tag></tag> |
โพสต์ | มันเพิ่มเนื้อหาหลังแท็ก | @tag(post="hello") -> <tag></tag>สวัสดี |
ระหว่าง | เพิ่มเนื้อหาระหว่างแท็ก (ทำงานคล้ายกับข้อความ) | @tag(between="hello") -> <tag>สวัสดี</tag> |
ค่า | โดยปกติแล้วมันจะทำงานเป็น " ค่า " ปกติของ html แต่ก็สามารถทำงานแตกต่างออกไปได้ (ใน @textarea ทำงานเหมือน text ) | @tag(value="hello") -> < tag value="hello"></tag> |
ค่านิยม | ส่วนประกอบบางอย่างจำเป็นต้องมีรายการวัตถุ/อาร์เรย์ อาร์กิวเมนต์นี้ใช้เพื่อตั้งค่ารายการค่า | @tag(ค่า=$ประเทศ) |
นามแฝง | ส่วนประกอบบางอย่างต้องการหรือใช้รายการวัตถุ/อาร์เรย์ อาร์กิวเมนต์นี้มีไว้เพื่ออ้างอิงแถวใดๆ ภายในรายการ หากมีการตั้ง ค่า ไว้และไม่มี นามแฝง ระบบจะสร้างนามแฝงใหม่ที่เรียกว่าค่า+"แถว" | @tag($values=$ประเทศ นามแฝง=$ประเทศ) @tag($values=$countries ) ถือว่า alias=$countriesRow |
เลือกกลุ่ม | แท็ก @select สามารถแสดงรายการองค์ประกอบที่จัดกลุ่มได้ อาร์กิวเมนต์นี้ใช้เพื่อตั้งค่าการจัดกลุ่ม | @tag($values=$countries alias=$country @optgroup=$country->ทวีป) |
สมมติว่าตัวอย่างถัดไป
@input(value="hello world" type="text" )
มันแสดงผลเป็น
<input value="hello world" type="text" />
หากแท็กใช้ตัวแปรของฟังก์ชัน ดังนั้นมุมมองนี้
@input(value=$hello type="text" )
ถูกแปลงเป็น
<input value="<?php echo $this->e($hello);?>" type="text" />
เมธอด $this->e ใช้เพื่อหลีกเมธอด
หมายเหตุ: ไลบรารีนี้อนุญาตให้ใช้แท็กใดๆ แม้แต่แท็กที่กำหนดเอง (แต่เฉพาะในกรณีที่แท็กไม่ขัดแย้งกับแท็กพิเศษ โปรดดูตาราง)
@input(value="hello world" type="text" mycustomtag="hi" )
ถูกแปลงเป็น
< input value =" hello world " type =" text " mycustomtag =" hi " />
มันแสดงอินพุต HTML
ตัวอย่างพื้นฐาน:
@input(id="id1" value="hello world$somevar" type="text" )
มันสร้างสนามที่ซ่อนอยู่
ตัวอย่างพื้นฐาน:
@hidden(name="id1" value="hello world$somevar" )
มันแสดงป้ายกำกับ html
@label(for="id1" text="hello world:")
มันแสดงภาพ
@image(src="https://via.placeholder.com/350x150")
มันแสดงให้เห็นวัตถุ html เลือก (รายการแบบหล่นลง)
ตัวอย่าง:
@select(id="aaa" value=$selection values=$countries alias=$country)
@item(value='aaa' text='hello world')
@item(value='aaa' text='hello world')
@item(value='aaa' text='hello world')
@items( id="chkx" value=$country->id text=$country->name)
@endselect
หมายเหตุ 1: @items ต้องการค่าอาร์กิวเมนต์ในพาเรนต์ (@select) และ ค่า อาร์กิวเมนต์ (ค่าที่เลือกได้) และ ข้อความ (ค่าที่มองเห็นได้) หมายเหตุ 2: @items ต้องการ รหัส ซึ่งกำหนดในแท็กเดียวกันหรือในพาเรนต์ แท็ก (ในกรณีนี้ พาเรนต์คือ @select) หมายเหตุ 3: ตามมาตรฐาน อาร์กิวเมนต์ id จะต้องไม่ซ้ำกัน
@item เป็นแท็กยูทิลิตี้ที่ใช้ภายในแท็กอื่นๆ ลักษณะการทำงานนี้ขึ้นอยู่กับแท็กพาเรนต์ โดยจะเพิ่มบรรทัด/แถวแบบธรรมดาให้กับวัตถุหลัก
ตัวอย่าง:
@select()
@item(value='aaa' text='hello world')
@endselect
มันแสดงผล
<select>
<option value="aaa">hello world</option>
</select>
@items เป็นแท็กที่มีประโยชน์ซึ่งใช้ภายในแท็กบางแท็ก ลักษณะการทำงานนี้ขึ้นอยู่กับแท็กพาเรนต์ โดยจะเพิ่มหลายบรรทัด/แถวให้กับออบเจ็กต์หลักโดยใช้ ค่า แท็ก
หมายเหตุ: แท็กนี้ต้องการข้อโต้แย้งบางประการ:
- พาเรนต์ (หรือแท็กนี้) ต้องใช้ ค่า แท็ก
- ผู้ปกครองต้องการ ค่า แท็ก โดยระบุถึงการเลือกปัจจุบัน (ถ้ามี)
- พาเรนต์ (หรือแท็กนี้) ต้องใช้ นามแฝง แท็ก หากไม่มีนามแฝง จะใช้ชื่อของค่า + "แถว" เช่น ค่า=ผลิตภัณฑ์ -> นามแฝง= productRow
- พาเรนต์ (หรือแท็กนี้) ต้องใช้ รหัส แท็ก
- "id" ที่แสดงผลจะถูกสร้างขึ้นโดยใช้ id+"_"+"id ของแถวนี้" เช่น id="idproduct" => idproduct_0, idproduct_1
- ทำไม เป็นเพราะรหัสต้องไม่ซ้ำกัน (ข้อกำหนด html)
ตัวอย่าง ถ้า $countries เป็นรายการของออบเจ็กต์ ดังนั้น:
@select(id="aaa" value=$selection values=$countries alias=$country)
@items( id="chkx" value=$country->id text=$country->name)
@endselect
หาก $country เป็นรายการอาร์เรย์:
@select(id="aaa" value=$selection values=$countries alias=$country)
@items( id="chkx" value=$country['id'] text=$country['name'])
@endselect
ภายในรายการแท็ก คุณสามารถใช้ตัวแปรถัดไปได้
ตัวแปร (โดยที่ค่าเป็นตัวแปรที่ใช้) | ข้อมูลจำเพาะ |
---|---|
$values กลุ่มตัวเลือก | จะเก็บ optgroup ปัจจุบัน (ถ้ามี) ตัวอย่าง: $productOptGroup |
คีย์ $values | ระบุคีย์ปัจจุบันของแถวปัจจุบัน ตัวอย่าง: $productKey |
$alias (หากไม่ได้ตั้งค่านามแฝงไว้ จะใช้ $values Row) | แถวปัจจุบันของตัวแปร ตัวอย่าง: $productRow |
มันเริ่มกลุ่มตัวเลือก (เลือก)
ตัวอย่าง:
@select(id="aaa" value=$selection values=$countries alias=$country)
@optgroup(label="group1")
@item(value='aaa' text='hello world')
@item(value='aaa' text='hello world')
@item(value='aaa' text='hello world')
@endoptgroup
@endselect
หมายเหตุ: แท็กนี้ต้องลงท้ายด้วยแท็ก @endoptgroup
มันเพิ่มช่องทำเครื่องหมายเดียว
ตัวอย่าง:
@checkbox(id="idsimple" value="1" checked="1" post="it is a selection")
มันเพิ่มปุ่มตัวเลือกปุ่มเดียว
ตัวอย่าง:
@radio(id="idsimple" value="1" checked="1" post="it is a selection")
มันวาดพื้นที่ข้อความ
ตัวอย่าง:
@textarea(id="aaa" value="3333 3333 aaa3333 ")
มันดึงปุ่ม
ตัวอย่าง:
@button(value="click me" type="submit" class="test" onclick='alert("ok")')
มันเพิ่มไฮเปอร์ลิงก์
ตัวอย่าง:
@link(href="https://www.google.cl" text="context")
มันแสดงรายการช่องทำเครื่องหมาย
@checkboxes(id="checkbox1" value=$selection alias=$country)
@item(id="aa1" value='aaa' text='hello world' post="<br>")
@item(id="aa2" value='aaa' text='hello world2' post="<br>")
@items(values=$countries value='id' text='name' post="<br>")
@endcheckboxes
มันแสดงรายการปุ่มตัวเลือก
@radios(id="radios1" name="aaa" value=$selection alias=$country)
@item(value='aaa' text='hello world' post="<br>")
@item(value='aaa' text='hello world2' post="<br>")
@items(values=$countries value='id' text='name' post="<br>")
@endradios
มันสร้างค่าอินพุตไฟล์
@file(name="file" value="123.jpg" post="hello world")
หมายเหตุ: มันยังแสดงไฟล์ที่ซ่อนด้วยชื่อ "name"+"_file" ด้วยค่าดั้งเดิม
มันสร้างรายการที่ไม่เรียงลำดับ
@ul(id="aaa" value=$selection values=$countries alias=$country)
@item(value='aaa' text='hello world')
@item(value='aaa' text='hello world')
@item(value='aaa' text='hello world')
@items(value=$country->id text=$country->name)
@endul
มันสร้างรายการเรียงลำดับ
@ol(id="aaa" value=$selection values=$countries alias=$country)
@item(value='aaa' text='hello world')
@item(value='aaa' text='hello world')
@item(value='aaa' text='hello world')
@items(value=$country->id text=$country->name)
@endol
มันสร้างการแบ่งหน้า ต้องใช้ bootstrap3, bootstrap4 หรือ bootstrap5
คุณสามารถดูตัวอย่างได้ที่ example/examplepagination.php
รหัสพีเอชพี
$ current = isset ( $ _GET [ ' _page ' ]) ? $ _GET [ ' _page ' ] : 1 ;
echo $ blade -> run ( " examplepagination " ,
[ ' totalpages ' => count ( $ products )
, ' current ' => $ current
, ' pagesize ' => 10
, ' products ' => $ items
]);
แม่แบบ
@pagination(numpages=$totalpages current=$current pagesize=$pagesize urlparam='_page')
หมายเหตุ: หน้านี้เป็นฐาน 1 หมายเหตุ: อาร์กิวเมนต์ urlparam ใช้ในการสร้างลิงก์ (domain.dom/web.php?_page=999)
คุณสามารถเปลี่ยนชื่อของปุ่ม ก่อนหน้า และ ถัดไป ได้ดังนี้:
$ this -> setTranslation ([ ' pagination ' =>[ ' prev ' => ' <<> ' , ' next ' => ' > ' ]]);
มันทำให้ตาราง
@table(class="table" values=$countries alias=$country border="1")
@tablehead
@cell(text="id")
@cell(text="cod")
@cell(text="name")
@endtablehead
@tablebody(id='hello world' )
@tablerows(style="background-color:azure")
@cell(text=$country->id style="background-color:orange")
@cell(text=$country->cod )
@cell(text=$country->name)
@endtablerows
@endtablebody
@tablefooter
@cell(text="id" colspan="3")
@endtablefooter
@endtable
มันทำให้ส่วนหัวของตาราง (ไม่จำเป็น) แต่ละเซลล์ที่เพิ่มเข้าไปข้างในจะแสดงผลเป็นแท็ก HTML "th"
มันทำให้เนื้อหาของตาราง (ไม่จำเป็น) แต่ละเซลล์ที่เพิ่มเข้าไปในตารางจะแสดงผลเป็นแท็ก HTML "td"
มันแสดงส่วนท้ายของตาราง (ไม่จำเป็น) แต่ละเซลล์ที่เพิ่มเข้าไปข้างในจะแสดงผลเป็นแท็ก HTML "th"
มันสร้างแถวอยู่ภายในร่างกาย
มันสร้างการแสดงผลเซลล์ภายใน tablehead, tablebody (tablerows) หรือ tablefooter
มันเรนเดอร์และเพิ่ม CSS ลงในกล่อง
< head >
@cssbox
</ head >
ใช้เมธอด addCss($css,$name)
$ this -> addCss ( ' <link rel="stylesheet" href="mystyle.css"> ' , ' mystyle ' );
$ this -> addCss ( ' css/stylename.css ' );
$css อาจเป็นลิงก์หรือแท็กลิงก์
$name เป็นทางเลือก แต่หลีกเลี่ยงการเพิ่มข้อมูลซ้ำ หากเราเพิ่ม CSS ใหม่ด้วยชื่อเดียวกันกับชื่อก่อนหน้า CSS นั้นก็จะถูกละเว้น
มันแสดงลิงก์ JavaScript ทั้งหมดที่เพิ่มลงในกล่อง
< body >
<!-- our page -->
@jsbox
</ body >
ใช้เมธอด addJs($script,$name)
$ this -> addJs ( ' <script src="js/jquery.js"></script> ' , ' jquery ' );
< body >
<!-- our page -->
@jsbox <!-- we could load jquery here -->
@jscodebox(ready)
</ body >
รหัสนี้จะเพิ่มแท็ก < script > โดยอัตโนมัติ
อาร์กิวเมนต์ พร้อม ระบุว่าเราต้องการเรียกใช้ฟังก์ชันเมื่อเอกสารพร้อมหรือไม่
จะเพิ่มโค้ด JavaScript ใหม่ลงใน jscodebox ได้อย่างไร?
$ blade -> addJsCode ( ' alert("hello"); ' );
BladeOneHtml อนุญาตให้แก้ไขแท็กที่ใช้และตั้งค่าคลาสเริ่มต้นสำหรับแต่ละคลาส
คุณสามารถตั้งค่าคลาสและแท็กเริ่มต้นสำหรับ Bootstrap 3/4/5 ได้โดยใช้วิธีถัดไป (เลือกเพียงวิธีเดียว)
// if true then it loads the css and js from a cdn into the css and jsbox so it requires @cssbox and @jsbox
$ blade -> useBootstrap5 ( true );
// if true then it loads the css and js from a cdn into the css and jsbox so it requires @cssbox and @jsbox
$ blade -> useBootstrap4 ( true );
// if true then it loads the css and js from a cdn into the css and jsbox so it requires @cssbox and @jsbox
$ blade -> useBootstrap3 ( true );
หรือคุณสามารถสร้างแท็กและคลาสของคุณเองได้
$ blade -> defaultClass [ $ tagname ]= ' default class ' ;
$ blade -> pattern [ ' nametag ' ]= ' pattern ' ;
โดยที่ nametag อาจเป็นดังนี้
ชื่อ | คำอธิบาย | ตัวอย่าง | รหัส |
---|---|---|---|
ป้ายชื่อ | จะใช้รูปแบบที่จะใช้เมื่อมีการใช้แท็ก | ป้อนข้อมูล | {{pre}}<อินพุต{{inner}} >{{ระหว่าง}}< /input>{{โพสต์}} |
nametag_empty | ระบบจะใช้รูปแบบนี้หากเนื้อหา (ระหว่าง/ข้อความ) ว่างเปล่าหรือไม่ได้ตั้งค่า (แท็กปิดตัวเอง) หากไม่ได้ตั้งค่า ระบบจะใช้ เนมแท็ก แม้ว่าเนื้อหาจะว่างเปล่าก็ตาม | input_empty | {{pre}}< อินพุต{{ภายใน}} />{{โพสต์}} |
nametag_item | ระบบใช้รูปแบบนี้สำหรับแท็ก @item และ @items | เลือก_รายการ | < option{{inner}} >{{between}}< /option> |
nametag_end | โดยจะใช้รูปแบบนี้เมื่อต้องปิดแท็ก | form_end | </ /แบบฟอร์ม> |
ตัวแปร | คำอธิบาย | หลบหนี (*) |
---|---|---|
{{ก่อน}} | โค้ดที่อยู่หน้าแท็ก : pre <tag ></tag> | เลขที่ |
{{โพสต์}} | โค้ดที่อยู่หลังแท็ก : < tag ></tag> โพสต์ | เลขที่ |
{{ภายใน}} | คุณลักษณะภายในแท็ก : < tag inside > </tag> | ใช่ |
{{ระหว่าง}} | เนื้อหาระหว่างแท็ก : < tag > ระหว่าง </tag> | โดยค่าเริ่มต้น ค่านี้จะถูกหลีกหนี แต่ก็ไม่อาจหลบหนีไปได้ |
{{id}} | แอตทริบิวต์ id (รวมอยู่ใน {{inner}} ด้วย): < tag id > </tag> | ใช่ |
{{ชื่อ}} | แอตทริบิวต์ชื่อ (รวมอยู่ใน {{inner}} ด้วย): < ชื่อ แท็ก > </tag> | ใช่ |
ตัวอย่างของแท็กปกติ:
$ blade -> pattern [ ' input ' ]= ' {{pre}}<input{{inner}} >{{between}}</input>{{post}} ' ;
หมายเหตุ :(*) หนีอะไรมา?. เช่น ข้อความ "" ถ้าเป็น Escape จะแสดงเป็น "<hello>"
คุณสามารถเพิ่มแอตทริบิวต์ที่กำหนดเองซึ่งสามารถนำมาใช้ภายในรูปแบบได้
ตัวอย่างเช่น เพิ่มแท็กที่กำหนดเองชื่อ customtag
$ blade -> customAttr [ ' customtag ' ]= ' This attr is missing! ' ;
$ blade -> pattern [ ' alert ' ]= ' {{pre}}<div {{inner}}><h1>{{customtag}}</h1>{{between}}</div>{{post}} ' ;
และในมุมมอง
@alert(text="hi there" class="alert-danger" customtag="it is a custom tag") < br >
@alert(text="hi there" class="alert-danger" ) < br >
ไลบรารีมีวิธีการมากมายที่สามารถใช้เพื่อเริ่มต้นและกำหนดค่าไลบรารีได้ พวกเขาเป็นทางเลือก
มันกำหนดรูปแบบและคลาสให้เข้ากันได้กับ bootstrap 4
หากอาร์กิวเมนต์เป็นจริง ระบบจะเพิ่ม CSS ลงใน กล่อง css จาก CDN
รหัสของเรา
$ blade -> useBootstrap5 ( true );
< header >
@cssbox
</ header >
มันกำหนดรูปแบบและคลาสให้เข้ากันได้กับ bootstrap 4
หากอาร์กิวเมนต์เป็นจริง ระบบจะเพิ่ม CSS ลงใน กล่อง css จาก CDN
รหัสของเรา
$ blade -> useBootstrap4 ( true );
< header >
@cssbox
</ header >
มันกำหนดรูปแบบและคลาสให้เข้ากันได้กับ bootstrap 3
หากอาร์กิวเมนต์เป็นจริง ระบบจะเพิ่ม CSS ลงใน กล่อง css จาก CDN
$ blade -> useBootstrap3 ( true );
มันเพิ่ม CSS ลงใน กล่อง CSS
$ this -> addCss ( ' css/datepicker.css ' , ' datepicker ' );
มันเพิ่มลิงค์จาวาสคริปต์ไปที่ กล่อง js
$ this -> addJs ( ' <script src="js/jquery.js"></script> ' , ' jquery ' );
มันเพิ่มรหัสจาวาสคริปต์ลงใน กล่อง js
$ blade -> addJsCode ( ' alert("hello"); ' );
เป็นรายการช่องสาธารณะของชั้นเรียน ฟิลด์เป็นแบบสาธารณะเพราะเพื่อวัตถุประสงค์ด้านประสิทธิภาพ (เทียบกับการใช้ setter และ getters)
มันเก็บรายการรูปแบบที่ใช้โดยโค้ด
$ this -> pattern [ ' sometag ' ]= ' {{pre}}<tag {{inner}}>{{between}}</tag>{{post}} ' ;
หมายเหตุ: ดู "รูปแบบ-ตัวแปรภายในโค้ด" เพื่อดูรายการตัวแปรรูปแบบ
คลาส CSS เริ่มต้นที่ถูกเพิ่มให้กับแท็กเฉพาะ
$ this -> defaultClass [ ' sometag ' ]= ' classred classbackgroundblue ' ;
โดยจะเพิ่มส่วนเสริมแบบกำหนดเองที่สามารถใช้ร่วมกับ $this->รูปแบบได้
$ this -> customAttr [ ' customtag ' ]= ' XXXXX ' ; // So we could use the tag {{customtag}}. 'XXXXX' is the default value
แอตทริบิวต์ที่กำหนดเองจะลบเครื่องหมายคำพูดและเครื่องหมายคำพูดคู่เสมอ ดังนั้นหากค่าของเราคือ "hello" -> hello
เป็นไปได้ที่จะเพิ่มรูปแบบใหม่โดยขยายคลาส PHP
$this->pattern['mynewtag']='<mycustomtag {{inner}}>{{between}}</mycustomtag>';
คุณสามารถสร้างคลาสหรือคุณลักษณะ PHP ใหม่และขยายคลาสของเราได้ ภายในโครงสร้างใหม่นี้ คุณต้องเพิ่มวิธีการใหม่พร้อมกับโครงสร้างถัดไป
การใช้คลาสใหม่
use eftec bladeone BladeOne ;
use eftec BladeOneHtml BladeOneHtml ;
class MyBlade extends BladeOne {
use BladeOneHtml ;
}
class MyClass extends MyBlade {
protected function compileMyNewTag ( $ expression ) { // the method must be called "compile" + your name of tag.
$ args = $ this -> getArgs ( $ expression ); // it separates the values of the tags
$ result = [ '' , '' , '' , '' ]; // inner, between, pre, post
// your custom code here
return $ this -> render ( $ args , ' mynewtag ' , $ result ); // we should indicate to use our pattern.
}
}
การใช้ลักษณะ (แนะนำ เพราะเหตุใด เนื่องจากลักษณะมีความยืดหยุ่นมากกว่า)
trait MyTrait {
protected function compileMyNewTag ( $ expression ) { // the method must be called "compile" + your name of tag.
$ args = $ this -> getArgs ( $ expression ); // it separates the values of the tags
$ result = [ '' , '' , '' , '' ]; // inner, between, pre, post
// your custom code here
return $ this -> render ( $ args , ' mynewtag ' , $ result ); // we should indicate to use our pattern.
}
}
class MyClass extends BladeOne {
use BladeOneHtml ;
use MyTrait; // <-- our trait
}
สำหรับการสร้างเมธอดพาเรนต์ คุณต้องพุชค่าใหม่ภายใน $this->htmlItem คุณสามารถจัดเก็บสิ่งที่คุณต้องการ
$ this -> pattern [ ' mynewtag ' ]= ' <mycustomtag {{inner}}>{{between}} ' ;
protected function compileMyNewTag ( $ expression ) {
$ args = $ this -> getArgs ( $ expression ); // it loads and separates the arguments.
$ this -> htmlItem [] = [ ' type ' => ' mynewtag ' , ' value ' => @ $ args [ ' value ' ]
];
$ result = [ '' , '' , '' , '' ]; // inner, between, pre, post
//unset($args['value']); // we could unset values that we don't want to be rendered.
return $ this -> render ( $ args , ' select ' , $ result );
}
วัตถุประสงค์ของเราคือการแสดงผลโค้ด PHP ไม่ใช่เพื่อประเมินโค้ด ตัวอย่างเช่น ถ้า $args['somearg']=$variable ค่าของเราจะเป็น $variable (เป็นข้อความ) ไม่ว่าค่าจริงของตัวแปรจะเป็นเช่นไรก็ตาม
คุณต้องสร้างวิธีการสิ้นสุดคอนเทนเนอร์ด้วย และเราต้องเพิ่มรูปแบบใหม่ด้วย
$ this -> pattern [ ' mynewtag_end ' ]= ' </mycustomtag> ' ;
protected function compileEndNewTag () {
$ parent = @ array_pop ( $ this -> htmlItem ); // remove the element from the stack
if ( is_null ( $ parent ) || $ parent [ ' type ' ]!== ' newtag ' ) { // if no element in the stack or it's a wrong one then error
$ this -> showError ( " @endnewtag " , " Missing @initial tag " , true );
}
// our code
return $ this -> pattern [ $ parent [ ' type ' ] . ' _end ' ]; // renders the element of the stack
}
รายการของเราจะรู้ได้ว่าอยู่ในแท็กที่มีการดำเนินการถัดไปหรือไม่
$ parent = end ( $ this -> htmlItem );
เราสามารถสร้างส่วนประกอบที่ต้องใช้ CSS และ JavaScript
ตัวอย่างเช่น ตัวเลือกวันที่
protected function compileDatePicker ( $ expression ) {
$ args = $ this -> getArgs ( $ expression ); // it loads and separates the arguments.
array_push ( $ this -> htmlItem , [ ' type ' => ' mynewtag ' , ' value ' => @ $ args [ ' value ' ]]);
$ result = [ '' , '' , '' , '' ]; // inner, between, pre, post
if (! isset ( $ args [ ' id ' ])) {
$ this -> showError ( " @datepicker " , " Missing @id tag " , true );
}
$ this -> addJs ( ' <script src="js/jquery.js"></script> ' , ' jquery ' ); // our script needs jquery (if it is not loaded)
$ this -> addCss ( ' css/datepicker.css ' , ' datepicker ' );
$ this -> addjscode ( ' $(. ' . $ args [ ' id ' ]. ' ).datepicker(); ' );
//unset($args['value']); // we could unset values that we don't want to be rendered.
return $ this -> render ( $ args , ' select ' , $ result );
}
หมายเหตุ: เป็นการดีกว่าถ้าเพิ่มไลบรารีของ jQuery และตัวเลือกวันที่หนึ่งครั้งในโค้ดของเรา