ระบบควบคุมในการกระจายและเข้าถึงข่าวสาร การประกาศ

วันอาทิตย์ที่ 14 กุมภาพันธ์ พ.ศ. 2559

django cms #6 Extending toolbar

ไม่มีความคิดเห็น :
   toolbar คือแถบเครื่องมือสำหรับใช้งานใน django cms ที่เราจะเห็นก็ต่อเมื่อเราเพิ่มคำว่า ?edit ต่อท้าย url ที่ให้เรา login ก่อนจึงจะใช้งานได้  ในบทนี้เราจะทำการสร้าง extending toolbar คือสร้าง toolbar ขึ้นมาใช้งานเอง โดยเราจะสร้างให้ใช้งานสำหรับ polls app

ให้เราสร้างไฟล์ cms_toolbars.py ในไดเรกทอรี polls_plugin แล้วเขียนโค้ด ดังนี้

from django.utils.translation import ugettext_lazy as _
from cms.toolbar_pool import toolbar_pool
from cms.toolbar_base import CMSToolbar
from cms.utils.urlutils import admin_reverse
from polls.models import Poll


@toolbar_pool.register
class PollToolbar(CMSToolbar):
    supported_apps = (
        'polls',
        'polls_plugin',
    )
    watch_models = [Poll,]

    def populate(self):
        if not self.is_current_app:
            return

        menu = self.toolbar.get_or_create_menu('poll-app', _('Polls'))

        menu.add_sideframe_item(
            name=_('Poll list'),
            url=admin_reverse('polls_poll_changelist'),
        )

        menu.add_modal_item(
            name=_('Add new poll'),
            url=admin_reverse('polls_poll_add'),
        )

อธิบายโค้ดแต่ละส่วน
  มีการอ้างถึง CMSToolbar subclass
  ให้ใช้งานด้วยคำสั่ง @toolbar_pool_register
  ให้ populate เป็น method สำหรับเพิ่ม item ลงไปใน menu
  supported_apps ใส่ชื่อ apps ที่ใช้งาน toolbar นี้
  watch_models ใส่ model ของ app
  การทำงานของ populate() เริ่มต้นจะตรวจสอบก่อนว่า user อยู่นหน้าที่ support กับ toolbar นี้หรือไม่ จากนั้นค่อยสร้าง menu ของ toolbar นี้ ในที่นี้สร้าง sideframe ชื่อ Poll list สำหรับดู list polls และ modal ชื่อ Add new poll สำหรับสร้าง poll ใหม่

ทดลอง run server ใหม่แล้วสังเกตผล
ทดลองใช้ url polls จะเห็น menu Polls ปรากฏใน toolbar


ทดลองเข้าหน้า Poll page ก็ใช้งานได้ เช่นกัน



 ลองดูจะเห็นมามีคำสั่ง Poll list กับ Add new poll


ทดลองเลือก Poll list จะแสดงหน้า list ของ poll ที่เราสร้าง แต่ถ้าเลือก Add new poll จะมีหน้าต่างขึ้นมาให้เราสร้าง poll ใหม่

ไม่มีความคิดเห็น :

แสดงความคิดเห็น