SobiPro笔记

SobiPro笔记 – 猫之良品 – 博客园

必要扩展库

php_xsl, php_curl, php_openssl
 

URL参数的意义

Section是最大的单元,只有一级。Section之下有多级的Category,最小的单元是Enity。但其实所有单元,都是同一组结构,存储于#__sobipro_object表中,对系统来说没什么分别。
sid = Section ID & Category ID & Enity ID
pid = parent section ID
 

源数据调试

sobipro的模板结构基于XSLT,也就是源数据是XML,经过XSLT加工后会转换为HTML,即PHP -> XML -> XSLT -> HTML,所以修改模板也就是修改XSLT文件。如果要深度修改模板,有时候需要修改源数据,修改XML输出,所以查看输出XML成为了模板调试的关键。后台设置Allow Raw XML Output为YES,前台在URL后面添加&xml=1,就会输出XML源数据。
 

XSLT编辑器

XSLT是标准格式文档,所以多数编辑器都会支持,而如果有条件,可以使用微软的visual studio 2012,会提供很好的语法提示。
 

目录结构

控制器 : components/com_sobipro/lib/ctrl/*
数据模型 : components/com_sobipro/lib/models/*
视图 : components/com_sobipro/lib/views/*
默认模板 : components/com_sobipro/usr/templates/default/*
模块模板 : components/com_sobipro/usr/templates/front/modules/*
字段:components/com_sobipro/opt/fields/*
 

源数据调整

模板的数据源是XML数据,XML数据从视图提供,例如category.php, entry.php, section.php
视图程序中只会生成array数据,而sobipro的框架会自动把它转换为XML。不过关于node的array描述有固定的格式,格式如下:
            array(
                ‘_complex’ => 1,
                ‘_data’ => ‘data’,
                ‘_attributes’ => array(‘class’ => ‘item’)
            );
 

常用代码:

// 得到section下的所有category
SPLoader::loadController( ‘section’ );
$SPSectionCtrl = new SPSectionCtrl();
$SPSectionCtrl->setModel( SPLoader::loadModel( ‘section’ ) );
$sectionModel = $SPSectionCtrl->getModel();
$sectionModel->load(1);
$dbCategories = $sectionModel->getChilds( ‘category’, true );
 
// 得到某entry的name属性
SPFactory::Entry($id)->get( ‘name’ );
 
// 得到指定field name的文本值
$fields = SPFactory::Entry($id)->getFields();
echo $fields[‘field_firstname’]->getRaw();
 
// 得到指定field的输入框
$fields = SPFactory::Entry($id)->getFields();
SPLoader::loadClass( ‘mlo.input’ );
$fields[‘field_firstname’]->field();
 
// 得到image field的路径
$product = SPFactory::Entry( $id );
$files = SPConfig::unserialize($product->getField($fid)->getRaw());
echo $files[‘image’];
 
PS: image是一种field type,可以查field的代码得知field的属性
 

从其它地方载入sobipro框架

require_once ( implode( DS, array( JPATH_ROOT, ‘components’, ‘com_sobipro’, ‘lib’, ‘sobi.php’ ) ) );
Sobi::Init( JPATH_ROOT, JFactory::getConfig()->getValue( ‘config.language’ ), $sid );
 

模板说明(后台可以查)

category/view.xslDefault category view template inclusive top menu, navigation, entries and categories.
common/alphamenu.xslTemplate for the alpha menu.
common/catchooser.xslSub-Template for the category chooser for the edit entry form.
common/category.xslTemplate for a single category in the categories list.
common/entries.xslTemplate to display the block with all entries (entriesLoop) within a category or the search function. Build the structure of all entries and calls the “vcard” template while displaying single entry.
common/manage.xslDisplay the managing functions like edit entry, approve aso, within an entry.
common/navigation.xslTemplate for the site navigation.
common/topmenu.xslTemplate for the top menu.
common/vcard.xsl在category或者search中的单个enity
css/default.cssDefault CSS file.
css/edit.cssCSS file with extra styles for the add antry or edit entry page.
css/search.cssCSS file with extra styles for the search function.
entry/details.xslTemplate for the entry details view page.
entry/edit.xslTemplate for the add entry or edit entry page.
feeds/rss.xslTemplate for Atom/RSS feeds.
js/edit.jsJavaScript functions for the edit entry page.
js/osx.jsSimpleModal OSX Style Modal Dialog.
js/search.jsJavaScript functions for the search page.
listing/alpha.xslAlpha-Listing template.
payment/payment.xslView of the payment after an entry has been added.
payment/submit.xslTemplate for the preview of the payment.
search/view.xslTemplate for the search function.
section/view.xslTemplate for the section main view.
template.phpPHP file with additional functions to use within templates.