Magento学习手记(第六天)

第六天

一、 Magento系统MySQL读写分离配置

    Magento使用EAV模型,所以对数据库来说,读操作往往比较大,可以使用读写分离技术有效解决这个问题。

    数据库服务器实现主从复制,MySQL提供了内置支持。可以把读压力水平分解(多个从库)。MySQL主从复制可以参考http://www.zuimoban.com/jiaocheng/mysql/2410.html。

    Magento程序本身对读写分离提供了内置支持,可以为每个模块都指定读写适配器,如果没有指定就使用默认的读写适配器,而默认的读写适配器又是使用安装时的适配器。

    比如模块名叫eav,那么可以在配置文件中指定eav_write和eav_read适配器,如果没有指定就使用系统默认的default_write和default_read,而default_write和default_read通过use节点指定它实际使用default_setup配置的适配器。

 1 # app/etc/local.xml
 2     <global>
 3         <resources>
 4             <db>
 5                 <table_prefix><![CDATA[]]></table_prefix>
 6             </db>
 7             <default_setup>
 8                 <connection>
 9                     <host><![CDATA[192.168.1.10]]></host>
10                     <username><![CDATA[magento]]></username>
11                     <password><![CDATA[root]]></password>
12                     <dbname><![CDATA[magento]]></dbname>
13                     <initStatements><![CDATA[SET NAMES utf8]]></initStatements>
14                     <model><![CDATA[mysql4]]></model>
15                     <type><![CDATA[pdo_mysql]]></type>
16                     <pdoType><![CDATA[]]></pdoType>
17                     <active>1</active>
18                 </connection>
19             </default_setup>
20         </resources>
21     </global>

 

    默认的读写适配器是放置在app/etc/config.xml中的:

 1 <default_write>
 2     <connection>
 3         <use>default_setup</use>
 4     </connection>
 5 </default_write>
 6 <default_read>
 7     <connection>
 8         <use>default_setup</use>
 9     </connection>
10 </default_read>

 

    默认它使用use节点指定使用default_setup适配器,所以我们修改这两个配置就可以实现读写分离:

 1 <default_write>
 2     <connection>
 3         <host><![CDATA[192.168.1.10]]></host>
 4         <username><![CDATA[magento]]></username>
 5         <password><![CDATA[root]]></password>
 6         <dbname><![CDATA[magento]]></dbname>
 7         <initStatements><![CDATA[SET NAMES utf8]]></initStatements>
 8         <model><![CDATA[mysql4]]></model>
 9         <type><![CDATA[pdo_mysql]]></type>
10         <pdoType><![CDATA[]]></pdoType>
11         <active>1</active>
12     </connection>
13 </default_write>
14 <default_read>
15     <connection>
16         <host><![CDATA[192.168.1.20]]></host>
17         <username><![CDATA[magento]]></username>
18         <password><![CDATA[root]]></password>
19         <dbname><![CDATA[magento]]></dbname>
20         <initStatements><![CDATA[SET NAMES utf8]]></initStatements>
21         <model><![CDATA[mysql4]]></model>
22         <type><![CDATA[pdo_mysql]]></type>
23         <pdoType><![CDATA[]]></pdoType>
24         <active>1</active>
25     </connection>
26 </default_read>

 

    读操作全部到达192.168.1.20服务器,写操作全部在192.168.1.10进行。注意,不要在local.xml中修改这个配置。虽然local.xml的配置最优先,但是默认配置有use节点,只要有use节点,就使用use节点的适配器,所以需要在config.xml中直接修改(不要出现use节点)。

    每个模块都可以指定自己的读写适配器,如果没有指定就使用默认的配置。这个为读压力的水平分解提供了内置支持。比如某个模块的读操作非常频繁,可以读定向到单独到一个服务器中。通过指定读写适配器,还可以为模块指定使用另一个库等等。

    注意,读写分离时,由于采用了MySQL的主从复制,复制的数据库库决不能进行插入更新这种操作(否则可能导致从库无法同步),实际上,程序可能无法百分百保证初始化一个读适配器后不进行更新操作,所以,为了防止这个情况,只给读适配器这个用户Select权限,就能从数据库级别杜绝这个情况发生。

 

二、 magento后台中的各种Form Widget 

 1. Text Field

 1 $fieldset->addField('title', 'text', array(
 2           'label'     => Mage::helper('form')->__('Title3'),
 3           'class'     => 'required-entry',
 4           'required'  => true,
 5           'name'      => 'title',
 6           'onclick' => "alert('on click');",
 7           'onchange' => "alert('on change');",
 8           'style'   => "border:10px",
 9           'value'  => 'hello !!',
10           'disabled' => false,
11           'readonly' => true,
12           'after_element_html' => '<small>Comments</small>',
13           'tabindex' => 1
14         ));

 2. Time

 1 $fieldset->addField('time', 'time', array(
 2           'label'     => Mage::helper('form')->__('Time'),
 3           'class'     => 'required-entry',
 4           'required'  => true,
 5           'name'      => 'title',
 6           'onclick' => "",
 7           'onchange' => "",
 8           'value'  => '12,04,15',
 9           'disabled' => false,
10           'readonly' => false,
11           'after_element_html' => '<small>Comments</small>',
12           'tabindex' => 1
13         ));

 3. TextArea

 1 $fieldset->addField('textarea', 'textarea', array(
 2           'label'     => Mage::helper('form')->__('TextArea'),
 3           'class'     => 'required-entry',
 4           'required'  => true,
 5           'name'      => 'title',
 6           'onclick' => "",
 7           'onchange' => "",
 8           'value'  => '<b><b/>',
 9           'disabled' => false,
10           'readonly' => false,
11           'after_element_html' => '<small>Comments</small>',
12           'tabindex' => 1
13         ));

 4. Submit Button

1 $fieldset->addField('submit', 'submit', array(
2           'label'     => Mage::helper('form')->__('Submit'),
3           'required'  => true,
4           'value'  => 'Submit',
5           'after_element_html' => '<small>Comments</small>',
6           'tabindex' => 1
7         ));

 5. DropDown

 1 $fieldset->addField('select', 'select', array(
 2           'label'     => Mage::helper('form')->__('Select'),
 3           'class'     => 'required-entry',
 4           'required'  => true,
 5           'name'      => 'title',
 6           'onclick' => "",
 7           'onchange' => "",
 8           'value'  => '1',
 9           'values' => array('-1'=>'Please Select..','1' => 'Option1','2' => 'Option2', '3' => 'Option3'),
10           'disabled' => false,
11           'readonly' => false,
12           'after_element_html' => '<small>Comments</small>',
13           'tabindex' => 1
14         ));
 1 $fieldset->addField('select2', 'select', array(
 2     'label'     => Mage::helper('form')->__('Select Type2'),
 3     'class'     => 'required-entry',
 4         'required'  => true,
 5     'name'      => 'title',
 6     'onclick' => "",
 7     'onchange' => "",
 8     'value'  => '4',
 9     'values' => array(
10         '-1'=>'Please Select..',
11         '1' => array(
12                  'value'=> array(array('value'=>'2' , 'label' => 'Option2') , array('value'=>'3' ,'label' =>'Option3') ),
13               'label' => 'Size'
14             ),
15             '2' => array(
16                  'value'=> array(array('value'=>'4' , 'label' => 'Option4') , array('value'=>'5' ,
17 'label' =>'Option5') ),
18                  'label' => 'Color'   
19              ),                                         
20     ),
21         'disabled' => false,
22     'readonly' => false,
23     'after_element_html' => '<small>Comments</small>',
24      'tabindex' => 1
25 ));

 6. Radio Button

 1 $fieldset->addField('radio', 'radio', array(
 2           'label'     => Mage::helper('form')->__('Radio'),
 3           'name'      => 'title',
 4           'onclick' => "",
 5           'onchange' => "",
 6           'value'  => '1',
 7           'disabled' => false,
 8           'readonly' => false,
 9           'after_element_html' => '<small>Comments</small>',
10           'tabindex' => 1
11         ));
 1 $fieldset->addField('radio2', 'radios', array(
 2           'label'     => Mage::helper('form')->__('Radios'),
 3           'name'      => 'title',
 4           'onclick' => "",
 5           'onchange' => "",
 6           'value'  => '2',
 7           'values' => array(
 8                             array('value'=>'1','label'=>'Radio1'),
 9                             array('value'=>'2','label'=>'Radio2'),
10                             array('value'=>'3','label'=>'Radio3'),
11                        ),
12           'disabled' => false,
13           'readonly' => false,
14           'after_element_html' => '<small>Comments</small>',
15           'tabindex' => 1
16         ));

 7. Password Field

 1 $fieldset->addField('password', 'password', array(
 2           'label'     => Mage::helper('form')->__('Password'),
 3           'class'     => 'required-entry',
 4           'required'  => true,
 5           'name'      => 'title',
 6           'onclick' => "",
 7           'onchange' => "",
 8           'style'   => "",
 9           'value'  => 'hello !!',
10           'disabled' => false,
11           'readonly' => false,
12           'after_element_html' => '<small>Comments</small>',
13           'tabindex' => 1
14         ));
 1 $fieldset->addField('obscure', 'obscure', array(
 2           'label'     => Mage::helper('form')->__('Obscure'),
 3           'class'     => 'required-entry',
 4           'required'  => true,
 5           'name'      => 'obscure',
 6           'onclick' => "",
 7           'onchange' => "",
 8           'style'   => "",
 9           'value'  => '123456789',
10           'after_element_html' => '<small>Comments</small>',
11           'tabindex' => 1
12         ));

 8. Note

1 $fieldset->addField('note', 'note', array(
2 
3           'text'     => Mage::helper('form')->__('Text Text'),
4 
5         ));

 9. Multiselect

 1 $fieldset->addField('multiselect2', 'multiselect', array(
 2     'label'     => Mage::helper('form')->__('Select Type2'),
 3     'class'     => 'required-entry',
 4     'required'  => true,
 5     'name'      => 'title',
 6     'onclick' => "return false;",
 7     'onchange' => "return false;",
 8     'value'  => '4',
 9      'values' => array(
10         '-1'=> array( 'label' => 'Please Select..', 'value' => '-1'),
11         '1' => array(
12             'value'=> array(array('value'=>'2' , 'label' => 'Option2') , array('value'=>'3' ,
13 'label' =>'Option3') ),
14             'label' => 'Size'    
15         ),
16         '2' => array(
17             'value'=> array(array('value'=>'4' , 'label' => 'Option4') , array('value'=>'5' ,
18 'label' =>'Option5') ),
19             'label' => 'Color'   
20         ),                                         
21     ),    
22     'disabled' => false,
23         'readonly' => false,
24     'after_element_html' => '<small>Comments</small>',
25     'tabindex' => 1
26 ));

 10. Multiline

 1 $fieldset->addField('multiline', 'multiline', array(
 2           'label'     => Mage::helper('form')->__('Multi Line'),
 3           'class'     => 'required-entry',
 4           'required'  => true,
 5           'name'      => 'title',
 6           'onclick' => "",
 7           'onchange' => "",
 8           'style'   => "border:10px",
 9           'value'  => 'hello !!',
10           'disabled' => false,
11           'readonly' => true,
12           'after_element_html' => '<small>Comments</small>',
13           'tabindex' => 1
14         ));

 11. Link

1 $fieldset->addField('link', 'link', array(
2           'label'     => Mage::helper('form')->__('Link'),
3           'style'   => "",
4           'href' => 'www.excellencemagentoblog.com',
5           'value'  => 'Magento Blog',
6           'after_element_html' => ''
7         ));

 12. Label

1 $fieldset->addField('label', 'label', array(
2           'value'     => Mage::helper('form')->__('Label Text'),
3         ));

 13. Image Upload

1 $fieldset->addField('image', 'image', array(
2 
3           'value'     => 'http://www.excellencemagentoblog.com/wp-content/themes/excelltheme/images/logo.png',
4         ));

 14. File Upload

 

1 $fieldset->addField('file', 'file', array(
2           'label'     => Mage::helper('form')->__('Upload'),
3           'value'  => 'Uplaod',
4           'disabled' => false,
5           'readonly' => true,
6           'after_element_html' => '<small>Comments</small>',
7           'tabindex' => 1
8         ));

 

 15. Date

 

1 $fieldset->addField('date', 'date', array(
2           'label'     => Mage::helper('form')->__('Date'),
3           'after_element_html' => '<small>Comments</small>',
4           'tabindex' => 1,
5           'image' => $this->getSkinUrl('images/grid-cal.gif'),
6           'format' => Mage::app()->getLocale()->getDateFormat(Mage_Core_Model_Locale::FORMAT_TYPE_SHORT)
7         ));

 

 16. Checkbox

 

 1 $fieldset->addField('checkbox', 'checkbox', array(
 2           'label'     => Mage::helper('form')->__('Checkbox'),
 3           'name'      => 'Checkbox',
 4           'checked' => false,
 5           'onclick' => "",
 6           'onchange' => "",
 7           'value'  => '1',
 8           'disabled' => false,
 9           'after_element_html' => '<small>Comments</small>',
10           'tabindex' => 1
11         ));

 

 1 $fieldset->addField('checkboxes', 'checkboxes', array(
 2           'label'     => Mage::helper('form')->__('Checkboxs'),
 3           'name'      => 'Checkbox',
 4           'values' => array(
 5                             array('value'=>'1','label'=>'Checkbox1'),
 6                             array('value'=>'2','label'=>'Checkbox2'),
 7                             array('value'=>'3','label'=>'Checkbox3'),
 8                        ),
 9           'onclick' => "",
10           'onchange' => "",
11           'value'  => '1',
12           'disabled' => false,
13           'after_element_html' => '<small>Comments</small>',
14           'tabindex' => 1
15         ));

 

posted @ 2016-03-15 19:15  爱偷懒的程序员pisTol  阅读(304)  评论(0编辑  收藏  举报