前面講了基於Tiny作服務,這篇來說講用Tiny怎麼作界面。f javascript
下面是一些經常使用的連接,供你們使用: css
GIT地址(必須是OSC家的):https://git.oschina.net/tinyframework/tiny
問題報告:https://git.oschina.net/tinyframework/tiny/issues
html
官方網站:http://www.tinygroup.org java
更多內容,請看本人博客,不同的內容,同樣的精彩! jquery
原本想改改OSChina的界面,可是研究了一下,OSChina界面實在是高大上呀,不是作不出來,只是工做量比較大,所以仍是作個簡單的網站來展現一下用Tiny開發界面的過程,同時在展現過程的同時,會把相關的知識作一個充分的介紹 。要作網站,不能沒有模板,本身不會作網頁設計,咋辦?問谷歌找百度唄,找了一陣,看到下面這個模板不錯,就它了。 ios
http://www.tooplate.com/zip_files/2042_the_block.zip git
相仔細瞭解這篇文章的同窗,建議把原板的下載下來,對比着看,會更有感受。 web
位置:/default.layout 數據庫
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>演示網站-${pageTitle}</title> <meta name="keywords" content="" /> <meta name="description" content="" /> <script src="${TINY_CONTEXT_PATH}/uiengine.uijs"></script> <link href="${TINY_CONTEXT_PATH}/uiengine.uicss" rel="stylesheet" /> </head> <body> ${pageContent} </body> </html>這個是標準佈局了,直接貼過來,惟一要改的就是標題處加了「演示網站-」開頭。
${pageContent} 這個標記了渲染替換的位置,一個layout文檔中必須有且只能有一個(若是沒有,你會發現無論怎麼寫頁面,內容都是佈局的內容;若是有多個,你會發現頁面中的內容會加屢次)。 api
位置:/demosite.ui.xml
<ui-components> <ui-component name="demosite" dependencies=""> <css-resource>/css/jquery.lightbox-0.5.css,/css/slider_style.css,/css/tooplate_style.css</css-resource> <js-resource>/js/jquery.js,/js/jquery.lightbox-0.5.js,/js/swfobject.js</js-resource> </ui-component> </ui-components>這裏主要是定義用到的js和css,因爲只是一個網站,就簡單處理,只寫一個了,實際應用當中,要根據用途和職能不一樣定義爲許多個UI組件包。
位置:/common.component
#macro a(title url) <a href="#link(url)">${title}</a> #end #macro img(url alt) <img src=#link(url) alt="${alt}"> #end #macro link(url)#if(url.startsWith("/"))${TINY_CONTEXT_PATH}#end${url}#end #macro pageTitle(title page) #!set(pageTitle=title) #!set(activePage=page) #end這面主要定義了4個宏,a是超鏈接的,img是圖片的,link是把連接地址轉換成絕對地址,pageTitle用於定義頁面的標題和當前頁是哪一個頁面的。
位置:/demosite.component
#macro header() <div id="tooplate_header"> #bodyContent </div> #end #macro siteTitle(title)) <div id="site_title"><h1><a href="#">${title}</a></h1></div> #end #macro menu() <div id="tooplate_menu"> <ul> #bodyContent </ul> </div> #end #macro menuItem(url title page) <li><a href="#link(url)"#if(activePage==page) class="current"#end >${title}</a></li> #end #macro tooplateWrapper()) <div id="tooplate_wrapper"> #bodyContent </div> #end #macro tooplateMiddleSub() <div id="tooplate_middle_sub"> #bodyContent </div> #end #macro tooplateMiddle() <div id="tooplate_middle"> #bodyContent </div> #end #macro flashGridSlider() <div id="flash_grid_slider"> <a rel="nofollow" href="http://www.adobe.com/go/getflashplayer"> <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player"/> </a> </div> <script type="text/javascript"> var flashvars = {}; flashvars.xml_file = '#link("/photo_list.pagelet")'; var params = {}; params.wmode = "transparent"; var attributes = {}; attributes.id = "slider"; swfobject.embedSWF('#link( "/flash_slider.swf")', "flash_grid_slider", "780", "210", "9.0.0", false, flashvars, params, attributes); </script> #end #macro tooplateContent()) <div id="tooplate_content"> <span class="content_top"></span> #bodyContent <div class="cleaner"></div> </div> #end #macro tooplateFooter()) <div id="tooplate_footer"> #bodyContent <div class="cleaner"></div> </div> #end #macro box220(class) <div class="box_w220 ${class}"> #bodyContent </div> #end #macro box330(class) <div class="box_w330 ${class}"> #bodyContent </div> #end #macro gallery() <div id="gallery"> #bodyContent </div> #end #macro galleryBox(largeImage smallImage title alt info class) <div class="gallery_box ${class}"> <div class="gallery_img"><span></span> <a href="#link(largeImage)" title="${title}"> <img src="#link(smallImage)" alt="${alt}"/> </a> </div> <h6>${info}</h6> </div> #end #macro postBos(comment title imageUrl imageAlt postedInList commentCount) <div class="post_box"> <div class="comment"><a href="#">${comment}</a></div> <h2>${title}</h2> <div class="image_wrapper image_fl"><span></span>#img(imageUrl imageAlt)</div> <p><span class="cat">Posted in #for(postedIn in postedInList) <a href="#">${postedIn}</a> #end </span></p> #bodyContent ${commentCount} comments <a class="more float_r" href="#">More</a> <div class="cleaner"></div> </div> #end
分析一下幾個頁面,都有頁頭,頁腳,菜單,所以能夠把這些共性的文件放在演示網站佈局文件中:
位置:/page/default.layout
#@tooplateWrapper() #@header() #siteTitle("The Block") #@menu() #menuItem("index.page" "Home" "Home") #menuItem("about.page" "About Us" "About") #menuItem("blog.page" "Blog" "Blog") #menuItem("gallery.page" "Gallery" "Gallery") #menuItem("contact.page" "Contact" "Contact") #end #end ${pageContent} #@tooplateFooter() Copyright © 2048 <a href="#">Company Name</a> - Design: <a href="http://www.tooplate.com">tooplate</a> #end #end <script type="text/javascript"> $('#gallery a').lightBox(); </script> <script type="text/javascript"> $('#map a').lightBox(); </script>上面代碼的函義是:
在整個頁面中,上面放置Header,下面旋轉Footer,中間放置內容
最後兩段js,是說:對某指定選擇器中的圖片用lightbox去進行處理。
這裏就把全部的通用的部分都抽取到佈局文件中了。
#pageTitle("Home" "Home") #@tooplateMiddle() #flashGridSlider() #end #@tooplateContent() <h2>Welcome To The Block!</h2> <div class="image_wrapper image_fl"><span></span> #img("/images/tooplate_image_01.jpg" "image") </div> <p><em>The Block is a <a rel="nofollow" href="http://www.tooplate.com">free website template</a> from <a rel="nofollow" href="http://www.tooplate.com">Tooplate</a>. Credit goes to <a rel="nofollow" href="http://www.photovaco.com">Free Photos</a> for photos used in this template.</em></p> <p align="justify">Aliquam et augue et odio luctus posuere sit amet et nisi. Maecenas convallis, est sit amet convallis consectetur, elementum lacus, ut fermentum elit sem. Duis eu elit tortor, sed condimentum nulla. Phasellus varius posuere adipiscing. Mauris sodales dictum ullamcorper. Validate <a href="http://validator.w3.org/check?uri=referer" rel="nofollow"><strong>XHTML</strong></a> and <a href="http://jigsaw.w3.org/css-validator/check/referer" rel="nofollow"><strong>CSS</strong></a>.</p> <div class="cleaner h40"></div> #@box220() <h4>pharetra id turpis<span>Lorem Ipsum Dolor</span></h4> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus porta adi Piscing libero, eget elem ntum lectus varius sed.</p> <a href="#" class="more">more</a> #end #@box220() <h4>semper nisl ac nibh<span>Donec Tincidunt Varius</span></h4> <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum eu mauris id neque porttitor.</p> <a href="#" class="more">more</a> #end #@box220("rmb") <h4>consect adipiscing elit<span>Etiam Gravida Sagittis</span></h4> <p>Cras eu egestas sem. Aenean mollis feugiat massa, eget pharetra nunc interdum non. Etiam euismod sem ac sem tincidunt adipiscin.</p> <a href="#" class="more">more</a> #end #end因爲這個裏面的數據是具體寫的,所以就沒有再進行抽象,若是這些數據是從數據庫來的,那能夠再進行一下抽象,就能夠用for循環直接搞定了。
#pageTitle("About" "About") #@tooplateMiddleSub() <h2>About Our Company</h2> <p>Sed tempus nunc dolor, sit amet aliquet ligula. Ut euismod lectus vel ligula euismod id porttitor tortor placerat. Aenean tincidunt magna sit amet turpis auctor sagittis. Phasellus aliquet augue nec elit lacinia et faucibus massa scelerisque.</p> #end #@tooplateContent() <h2>Our Company Objectives</h2> <div class="image_wrapper image_fr"><span></span> #img("/images/tooplate_image_01.jpg" "image") </div> <p><em>Morbi congue lorem sit amet odio iaculis tincidunt. Donec nibh, molestie nec pellentesque non, in diam. Class aptent taciti sociosqu ad litora torquent per conubia nostra.</em></p> <p>Aliquam et augue et odio luctus posuere sit amet et nisi. Maecenas, est sit amet convallis consectetur, lacus ligula elementum lacus, ut fermentum elit sem et nisi. Duis eu elit tortor, sed condimentum nulla. Phasellus varius posuere adipiscing. Mauris sodales ullamcorper. Validate <a href="http://validator.w3.org/check?uri=referer" rel="nofollow"><strong>XHTML</strong></a> and <a href="http://jigsaw.w3.org/css-validator/check/referer" rel="nofollow"><strong>CSS</strong></a>.</p> <div class="cleaner h40"></div> #@box330("float_l") <h4>what our customers say<span>Testimonial</span></h4> <blockquote> <p>Fusce nec felis id lacus sollicitudin vulputate. Sed vitae elit at diam vestibulum ullamcorper et nec quam. Aenean eit ut luctus sit amet, elementum quis enim. Proin tincidunt, arcu id pellentesque accumsan, neque dolor imperdiet ligula, quis viverra tellus nulla a odio. Curabitur vitae enim risus, at placerat turpis. Mauris feugiat suscipit tempus fringilla, felis in velit.</p> <cite>Harry - <span>Senior Webmaster</span></cite> </blockquote> <a href="#" class="more">more</a> #end #@box330("float_r") <h4>what we do<span>Services</span></h4> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit eget elementum lectus varius sed.</p> <ul class="tooplate_list"> <li>Morbi quis lorem risus</li> <li>Suspendisse cursus</li> <li>Donec at viverra</li> <li>Proin eget purus ante</li> </ul> <a href="#" class="more">more</a> #end #end
#pageTitle("Blog" "Blog") #@tooplateMiddleSub() <h2>Our Blog Posts</h2> <p>Vestibulum eleifend consequat laoreet. Pellentesque vel orci sapien. Duis lacus ipsum, pretium ut accumsan in, tempor nec mauris. Aenean accumsan placerat elit, sit amet faucibus ante commodo a. In et neque nibh, ac tristique dui. </p> #end #@tooplateContent() #@postBos("20" "Lorem ipsum dolor sit amet" "/images/tooplate_image_02.jpg" "Image 02" ["Templates","Freebie"] "148") <p>Vestibulum adipiscing tempus elit eu condimentum. Fusce at mi felis. Etiam sed velit nibh. Nunc bibendum justo elementum auctor. Donec at magna eu neque. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia. </p> #end #@postBos("17" "Etiam gravida sagittis lacus" "/images/tooplate_image_03.jpg" "Image 03" ["CSS Templates","Web Design"] "128") <p>Ellentesque vitae velit eu lectus rhoncus tincidunt. Phasellus dictum dignissim sapien et dapibus. Sed egestas consequat mauris, orci tincidunt sit amet. Donec pharetra porta ultrices. Sed sit amet lectus libero, at porttitor odio. Validate <a href="http://validator.w3.org/check?uri=referer" rel="nofollow"><strong>XHTML</strong></a> and <a href="http://jigsaw.w3.org/css-validator/check/referer" rel="nofollow"><strong>CSS</strong></a>.</p> #end #@postBos("10" "Aenean vitae velit eget" "/images/tooplate_image_04.jpg" "Image 04" ["Illustrations","Graphics"] "208") <p>Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Proin gravida ornare mauris ac lobortis. Praesent elit neque, lacinia eget interdum eu. Phasellus posuere nisl et odio egestas ac tristique justo ultrices. </p> #end #end
#pageTitle("Gallery" "Gallery") #@tooplateMiddleSub() <h2>Our Gallery</h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus porta adipiscing libero, eget elementum lectus varius sed. Aliquam metus urna, dignissim quis posuere at, posuere eget mauris. Vestibulum laoreet sodales tellus nec mollis. Validate <a href="http://validator.w3.org/check?uri=referer" rel="nofollow"><strong>XHTML</strong></a> and <a href="http://jigsaw.w3.org/css-validator/check/referer" rel="nofollow"><strong>CSS</strong></a>.</p> #end #@tooplateContent() #@gallery() #galleryBox("/images/gallery/image_01_l.jpg" "/images/gallery/image_01_s.jpg" "Nunc et tellus id risus ultrices" "Image 01" "Nunc et tellus id risus ultrices") #galleryBox("/images/gallery/image_02_l.jpg" "/images/gallery/image_02_s.jpg" "Nunc et tellus id risus ultrices" "Image 02" "Nunc et tellus id risus ultrices") #galleryBox("/images/gallery/image_03_l.jpg" "/images/gallery/image_03_s.jpg" "Nunc et tellus id risus ultrices" "Image 03" "Nunc et tellus id risus ultrices" "gb_rmb") #galleryBox("/images/gallery/image_04_l.jpg" "/images/gallery/image_04_s.jpg" "Nunc et tellus id risus ultrices" "Image 04" "Nunc et tellus id risus ultrices") #galleryBox("/images/gallery/image_05_l.jpg" "/images/gallery/image_05_s.jpg" "Nunc et tellus id risus ultrices" "Image 05" "Nunc et tellus id risus ultrices") #galleryBox("/images/gallery/image_06_l.jpg" "/images/gallery/image_06_s.jpg" "Nunc et tellus id risus ultrices" "Image 06" "Nunc et tellus id risus ultrices" "gb_rmb") #end #end
首頁
上面的完整示例展示了採用Tiny框架開發頁面的完整過程,下面總結一下須要說明的一些內容:
採用Tiny框架製做前臺,須要考慮好以下角色的協做:
經過上面的分工,使得不一樣的開發人員關注於不一樣的技術細節,從而最大化的提高最終界面開發工程師的開發效率,同時由於有了必定的封裝性,可使得底層的變化不致於影響上層開發人員的工做成果。