含有章节索引的 *PUG 文章通用模板 ::-- hf_linux [2008-09-28 07:07:21]

CPUG联盟::

CPUG::门户plone

BPUG

SPUG

ZPUG

SpreadPython Python宣传

1. 文章大标

用python生成xtree树形菜单

1.1. 模型

1.1.1. 模型代码

   1 #coding=utf-8
   2 class TreeObject(object):
   3     def __init__(self,name="",action="",xmlSrc=""):
   4         self.name = name
   5         if action:
   6             self.action = "\""+action+"\""
   7         else:
   8             self.action = "null"
   9         self.__xmlSrc = xmlSrc #tree.xmlSrc="/getNOde ?...."
  10         self.icon = "null"
  11         self.openIcon = "null"
  12         self.parent = ""
  13         self.spanLevel = 1
  14         self.subTreeItems = []
  15     def addSubTreeItem(self,treeItem):
  16         self.subTreeItems.append(treeItem)
  17         treeItem.parent = self
  18 #TODO :escape
  19     def setXmlSrc(self,xmlSrc):
  20         self.__xmlSrc  = xmlSrc
  21     def getXmlSrc(self):
  22         return  self.__xmlSrc
  23     xmlSrc = property(getXmlSrc,setXmlSrc)
  24     def toXml(self):
  25         buf = ""
  26         buf += "<tree>\n"
  27         i=0
  28         for item in self.subTreeItems:
  29             tmp = item.itemToXml(i)
  30             buf += tmp
  31             i+=1
  32         buf += "</tree>\n"
  33         return buf
  34 class JsTree(TreeObject):
  35     #static variable
  36     idxGenerator = ""
  37     def __init__(self,name="",action="",xmlSrc=""):
  38         if name == "":
  39             name = "jsTree"
  40         super(JsTree, self).__init__(name,action,xmlSrc)
  41         self.rootName = ""
  42         self.behavior = "classic"
  43     def getJsTreeStr(self):
  44         buf= "<script language=\"JavaScript\">" + "\n"
  45         if not self.rootName:
  46             self.rootName = "root"+ str(JsTree.getJsVariableIndex())
  47       #TODO :escapeJavaScript
  48         treeRootName = self.rootName
  49         if not self.xmlSrc:
  50             buf += "\tvar "+treeRootName+"  = new WebFXTree('" + self.name +"',"+\
  51                      self.action+",null,"+self.icon +\
  52                      ","+self.openIcon+");"+"\n";
  53         else:
  54             buf += "\tvar "+treeRootName+"  = new WebFXTree('" + self.name +"',"+\
  55                      self.xmlSrc + "\",\"" +\
  56                      self.action+",null,"+self.icon +\
  57                      ","+self.openIcon+");"+"\n";
  58         buf += "\t"+treeRootName+".setBehavior('" + self.behavior + "');" + "\n";
  59         for treeItem in self.subTreeItems:
  60             tmp =  treeItem.buildJsTreeStr(treeRootName,2)
  61             buf += tmp
  62 #            buf += treeItem.buildJsTreeStr(treeRootName,2)
  63         buf += "\tdocument.write(" + treeRootName + ");" + "\n"+"</script>\n"
  64         return buf
  65     @staticmethod
  66     def indexGenerator():
  67         i = 0
  68         while True:
  69             i = i+1
  70             yield i
  71     @staticmethod
  72     def getJsVariableIndex():
  73         if not JsTree.idxGenerator:
  74             JsTree.idxGenerator = JsTree.indexGenerator()
  75         return JsTree.idxGenerator.next()
  76 class TreeItem(TreeObject):
  77     def __init__(self,name="",action="",xmlSrc=""):
  78         if name == "":
  79             name = "TreeItem"
  80         super(TreeItem, self).__init__(name,action,xmlSrc)
  81     def buildJsTreeStr(self,parent,indent):
  82         prefix = ""
  83         buf = ""
  84         try:
  85             indent = int(indent)
  86         except:
  87             indent = 0
  88         for i in range(indent):
  89             prefix = prefix+"\t"
  90         item = "tree" + str(JsTree.getJsVariableIndex())
  91         buf += prefix + "var " + item
  92         if not self.xmlSrc:
  93             buf += "  = new WebFXTreeItem('"
  94         else:
  95             buf += " = new WebFXLoadTreeItem('"
  96         buf += self.name + "',"
  97         if self.xmlSrc:
  98             buf += "\"" + self.xmlSrc + "\","
  99         buf += self.action
 100         buf += ",null,"
 101         buf += self.icon+","+self.openIcon+");\n"
 102         for treeItem in self.subTreeItems:
 103             buf += treeItem.buildJsTreeStr(item,indent+1)
 104         buf += prefix
 105         buf += parent
 106         buf += ".add("+item+");\n"
 107         return buf
 108     def itemToXml(self,indent=0):
 109         prefix = ""
 110         buf=""
 111         try:
 112             indent = int(indent)
 113         except:
 114             indent = 0
 115         for i in range(indent):
 116             prefix = prefix+"\t"
 117         buf += prefix+ "<tree text=\""+self.name+"\" "
 118         buf += " spanLevel=\""+str(self.spanLevel)+"\"  "
 119         if self.xmlSrc:
 120 #            TODO:ESCAPE XML
 121             buf += " src=\""+self.xmlSrc+"\"  "
 122         if self.action:
 123             buf += " action=\""+ self.action+"\"  "
 124         if self.icon:
 125             buf += " icon=\""+ self.icon+"\" "
 126         if self.openIcon:
 127             buf += " openIcon=\""+ self.openIcon+"\" "
 128         if self.subTreeItems:
 129             buf += "/>\n"
 130             for treeItem in self.subTreeItems:
 131                 tmp = treeItem.itemToXml(indent+1)
 132                 buf += tmp
 133             buf += prefix+"</tree>\n"
 134         else:
 135             buf += "/>\n"
 136         return buf
 137 class InputTreeItem(TreeItem):
 138     def __init__(self,name="",action="",xmlSrc=""):
 139         super(InputTreeItem, self).__init__(name,action,xmlSrc)
 140         self.fieldName = ""
 141         self.fieldValue = ""
 142         self.checked = False
 143         self.inputType = "checkbox"
 144         self.js_cls = "WebFXCheckBoxTreeItem"
 145         self.js_xload_cls = "WebFXCheckBoxLoadTreeItem"
 146     def buildJsTreeStr(self,parent,indent):
 147         if not self.fieldName:
 148             raise ValueError("fieldName can't be null")
 149         if not self.fieldValue:
 150             raise ValueError("fieldValue can't be null")
 151         try:
 152             indent = int(indent)
 153         except:
 154             indent = 0
 155         buf = ""
 156         prefix = ""
 157         for i in range(int(indent)):
 158             prefix += "\t"
 159         treeItem = "tree" + str(JsTree.getJsVariableIndex())
 160         buf += prefix + "var " + treeItem
 161         if self.xmlSrc:
 162             buf += " = new " +self.js_xload_cls +"('"
 163         else:
 164             buf += " = new "+ self.js_cls+" ('"
 165         buf += self.name + "',"
 166         if self.xmlSrc:
 167             buf += "\""+self.xmlSrc+"\","
 168         buf += "'  " + self.fieldName + "','"+self.fieldValue
 169         if self.checked:
 170             booleanStr = "true"
 171         else:
 172             booleanStr = "false"
 173         buf += "' , "+self.action+","+booleanStr+",null,"
 174         buf += self.icon + "," + self.openIcon+");\n"
 175         for curItem in self.subTreeItems:
 176             tmp = curItem.buildJsTreeStr(treeItem,indent+1)
 177             buf += tmp
 178         buf += prefix + parent+".add("+treeItem+");\n"
 179         return buf
 180     def itemToXml(self,indent):
 181         prefix = ""
 182         buf=""
 183         try:
 184             indent = int(indent)
 185         except:
 186             indent = 0
 187         for i in range(indent):
 188             prefix = prefix+"\t"
 189         buf += prefix+ "<tree text=\""+self.name+"\"  "
 190         buf += " inputType=\""+self.inputType+"\"  "
 191         buf += " spanLevel=\""+str(self.spanLevel)+"\"  "
 192         if self.xmlSrc:
 193             buf += " src=\""+self.xmlSrc+"\"  "
 194         if self.fieldName:
 195             buf += "  fieldName=\""+self.fieldName+"\"  "
 196         if self.fieldValue:
 197             buf += "  fieldValue=\""+self.fieldValue+"\"  "
 198         if self.checked:
 199             booleanStr = "true"
 200         else:
 201             booleanStr = "false"
 202         buf += " checked=\""+booleanStr+"\" "
 203         if self.action:
 204             buf += " action=\""+ self.action+"\"  "
 205         if self.icon:
 206             buf += " icon=\""+ self.icon+"\"  "
 207         if self.openIcon:
 208             buf += " openIcon=\""+ self.openIcon+"\" "
 209         if self.subTreeItems:
 210             buf += "/>\n"
 211             for treeItem in self.subTreeItems:
 212                 tmp = treeItem.itemToXml(indent+1)
 213                 buf += tmp
 214             buf += prefix+"</tree>\n"
 215         else:
 216             buf += "/>\n"
 217         return buf
 218 class CheckboxTreeItem(InputTreeItem):
 219     def __init__(self,name="",action="",xmlSrc=""):
 220         super(CheckboxTreeItem, self).__init__(name,action,xmlSrc)
 221         self.inputType = "checkbox"
 222         self.js_cls = "WebFXCheckBoxTreeItem"
 223         self.js_xload_cls = "WebFXCheckBoxLoadTreeItem"
 224 class RadioTreeItem(InputTreeItem):
 225     def __init__(self,name="",action="",xmlSrc=""):
 226         super(RadioTreeItem, self).__init__(name,action,xmlSrc)
 227         self.inputType = "radio"
 228         self.js_cls = "WebFXRadioTreeItem"
 229         self.js_xload_cls = "WebFXRadioLoadTreeItem"
 230 if __name__ == "__main__":
 231     tree = JsTree()
 232     tree1 = TreeItem('tree1')
 233     tree2 = TreeItem('tree2')
 234     tree3 = TreeItem('tree3')
 235     tree2.addSubTreeItem(tree3)
 236     tree1.addSubTreeItem(tree2)
 237     tree.addSubTreeItem(tree1)
 238     input1 = RadioTreeItem('input1')
 239     input1.fieldName = "input1"
 240     input1.fieldValue = "input1"
 241     input2 = RadioTreeItem('input2')
 242     input2.fieldName = "input2"
 243     input2.fieldValue = "input2"
 244     input2.xmlSrc = "dddd"
 245     input3 = RadioTreeItem('input3')
 246     input3.fieldName = "input3"
 247     input3.fieldValue = "input3"
 248     input2.addSubTreeItem(input3)
 249     input1.addSubTreeItem(input2)
 250     tree.addSubTreeItem(input1)
 251     tree1.addSubTreeItem(input1)
 252     print tree.getJsTreeStr()
 253     print tree1.itemToXml()

1.1.1.1. 次节标题1

目标效 果 http://static.haokanbu.com/media/blog/52358ed7193247e197b29d5d8565ed92.jpeg

1.2. 章标题2

1.2.1. 小节标题2

其它
代码引用

1.2.1.1. 次节标题2

2. 反馈

hf_linux/2008-09-28 (last edited 2009-12-25 07:15:33 by localhost)