sobipro是joomla上的cck元件,之所以會有這樣的元件是因為joomla並沒有為內容新增欄位的功能,joomla雖然是cms,但它的內容元件可定製性十分弱,內容表現性並不豐富,所以不得不依賴第三方cck元件。而sobipro是joomla cck元件中算得上比較專業的一款。
joomla由於joomla1.5至joomla2.5過渡框架差異比較大,而且joomla框架提供的架構也不夠靈活,所以不少元件會在joomla之上再建造相容框架,為了可以同時相容joomla新舊版本。而sobipro雖然也是mvc結構,但與joomla框架差異很大如果官方沒有提供開發文件,只憑自己消耗時間閱讀**。
├─base
│ └─fs
├─cms (joomla相容層)
│ ├─joomla15
│ │ ├─base
│ │ └─html
│ ├─joomla16
│ │ ├─base
│ │ ├─elements
│ │ └─html
│ └─joomla_common
│ ├─base
│ ├─elements
│ └─html
├─ctrl (控制器)
│ └─adm
├─env
├─helpers (輔助)
│ └─adm
├─js
│ ├─adm
│ ├─calendar
│ │ └─lang
│ └─codemirror
├─mlo
├─models (模型)
│ ├─adm
│ └─fields
├─plugins (外掛程式)
├─services
│ └─installers
│ └─schemas
├─types
└─views (檢視)
└─adm
我第一次使用xslt就是在sobipro上,才知道xslt有多麼難用,語法冗長、模板不靈活、除錯難度大等問題嚴重影響開發效率。假設你只需要小修改它的模板,你必須先學習xslt語法,以下是我做乙個動態鏈結的**
position
這僅僅只是改模板,如果你需要新增一些資料屬性,而xml並沒有輸出,那你只能修改view層給它新增資料,以下是sobipro輸出xml之前的部分**
$data[ 'name' ] = array(
'_complex' => 1,
'_data' => $this->get( 'listing_name' ),
'_attributes' => array( 'lang' => sobi::lang( false ) )
);if( sobi::cfg( 'category.show_desc' ) )
$data[ 'description' ] = array(
'_complex' => 1,
'_cdata' => 1,
'_data' => $desc,
'_attributes' => array( 'lang' => sobi::lang( false ) )
);}$data[ 'meta' ] = array(
'description' => $current->get( 'metadesc' ),
'keys' => $this->metakeys( $current ),
'author' => $current->get( 'metaauthor' ),
'robots' => $current->get( 'metarobots' ),
);$data[ 'entries_in_line' ] = $this->get( '$einline' );
$data[ 'categories_in_line' ] = $this->get( '$cinline' );
這只是很小的一部分,其它簡直是不知所云。如果官方有文件提供,這裡的資料屬性應該會比較好理解。
只是這種難度可能對於大多數人來是可以接受的,但你還得先找到你所見頁面的view層在**,因為它真的很難找。joomla一般可以通過url找到對應**
index.php?option=com_content&view=article&id=1788
以上位址很容易可以知道**在components/com_content/views/article/view.html.php
但sobipro並不總是這樣,例如這個位址
index.php?option=com_sobipro&sid=5980
這個頁面是分類列表頁?分類頁?內容頁?都可能是!sobipro把三大資料型別section, category, content都叫entity,並且放在同乙個資料表中,而且都用sid作為主鍵。所以你給它乙個sid,它先在資料庫查這個entity是什麼型別,如果是category,就會給你category的controller, model, view, template。而因為這三大型別具有許多相同屬性,所以它們的mvc是會放上繼承的。例如category的view層其實是使用了section的view層,找起來像麵條似的,你不做一些標記很容易會漏掉。幸好它只有這三種層次,所以我給所有的view層都加debug**還是能找出來的,只是debug資訊它都會屏敝。也由於輸出是xml再用xslt轉為html,像var_dump這樣粗暴的方法會直接破壞xml**,讓xslt轉換失敗直接給你反饋空白頁。sobipro改錯一點就出現空白頁,所以很難知道是什麼原因導致的。
joomla2開始已經有crud可用了,不像joomla 1.5需要寫sql。但如果要相容新舊版本就可能需要再造crud的輪子。但造輪子也不至於這麼難看吧
$table = $db->join(
array(
array( 'table' => 'spdb_field_option_selected', 'as' => 'opts' ),
array( 'table' => 'spdb_language', 'as' => 'lang', 'key' => array( 'opts.optvalue', 'lang.skey' ) ),
array( 'table' => 'spdb_object', 'as' => 'spo', 'key' => array( 'opts.sid', 'spo.id' ) ),
array( 'table' => 'spdb_relations', 'as' => 'sprl', 'key' => array( 'opts.sid', 'sprl.id' ) ),
));try
catch ( spexception $x )
一般c層作為入口都代表頁面或者功能入口,但sobipro而資料型別為入口,我真不知道這種層次有什麼優點,但缺點倒是不少。例如alpha外掛程式(字母列表)只不過在原來的分類列表頁加上字母篩選,用的都是同一套template,但alpha的m層竟然需要仿照分類頁的m層重寫一次,也就是我如果在列表頁上新增新功能,我就需要在alpha外掛程式再加一次。那是因為alpha不能復用m層,不得不在c層寫sql**,並且還是很近似的**,這樣做成mvc有何用?
sobipro如此美麗又專業的外觀,卻隱藏如此不合理的設計,但這在joomla的擴充套件群裡是個普遍現象,好看不好使,好使不好改,sobipro也已經是其中做得不錯的乙個元件了,建議在做joomla二次開發時最好不要做太複雜的功能,也許簡單的修改你都有可能改到**。
Android網路程式設計吐糟一
客戶端採用tcp連線的方式建立及時訊息通道,android客戶端採用nio做socket程式設計,漢字出現亂碼,同樣的 在pc上不會出現亂碼,結果一到android上就出現了亂碼。如下 public class connector socketaddress socketaddress new in...
吐糟2011,希望2012能起死回生。
2011年,即使即將迎來28歲高齡,還是依然單純得冒傻氣,面試我的技術總監給我留下了技術上很nb的印象,如果不是還琢磨著跟著學技術,我想我也不會來這家連個像樣的產品都沒有,簡潔的一塌糊塗的像個皮包公司。另外乙個原因,淺薄認為是前台漂亮 某老員工說,以前那個前台更漂亮 在外觀豪華的寫字樓辦公的公司是好...
被程式設計師吐糟的9大困難,你有嗎?
這篇文章是一名程式設計師在工作中總結的比較困難的事情,在這裡為大家呈現出其中的9個。你可以看到,寫 並不是最難的事情,如果你也在從事軟體開發,看看哪些內容你認為也是很難的。1.設計解決方案 任務描述 給你一系列的需求,你被要求設計和構造技術上的解決方案。這包括了設計資料結構,演算法,邏輯上的封裝等等...