Magento 1: Правила и условия порядок сортировки, если более одного
У меня есть 3 Условия и положения для процесса оформления заказа. Все 3 T&C - это просто флажки, потому что я внес некоторые изменения в шаблон, скрыв поле содержимого. По умолчанию Magento перечисляет термины один за другим на основе их идентификаторов. Кто-нибудь изменил модуль, вставив в таблицу checkout_agreement новое поле под названием позиция и разрешив сортировку Magento по нему?
1 answers
Поехали...
App\code\community\Sr\AgreementPosition\sql\sr_agreement_setup\mysql4-install-0.0.1.php
<?php
/** @var $installer Mage_Catalog_Model_Resource_Eav_Mysql4_Setup */
$installer = $this;
$installer->startSetup();
if (version_compare(Mage::getVersion(), '1.6', '<')) {
$installer->run("
ALTER TABLE `{$installer->getTable('checkout/agreement')}`
ADD `position` SMALLINT( 2 ) NOT NULL COMMENT 'Agreement Position'
");
} else {
$installer->getConnection()->addColumn(
$installer->getTable('checkout/agreement'),
'position',
array(
'type' => Varien_Db_Ddl_Table::TYPE_SMALLINT,
'length' => 2,
'nullable' => false,
'default' => 0,
'comment' => 'Agreement Position'
)
);
}
$installer->endSetup();
App\code\community\Sr\AgreementPosition\etc\config.xml
<?xml version="1.0"?>
<config>
<modules>
<Sr_AgreementPosition>
<version>0.0.1</version>
</Sr_AgreementPosition>
</modules>
<global>
<helpers>
<sr_agreement>
<class>Sr_AgreementPosition_Helper</class>
</sr_agreement>
</helpers>
<models>
<sr_agreement>
<class>Sr_AgreementPosition_Model</class>
<resourceModel>sr_agreement_resource</resourceModel>
</sr_agreement>
<sr_agreement_resource>
<class>Sr_AgreementPosition_Model_Resource</class>
</sr_agreement_resource>
</models>
<resources>
<sr_agreement_setup>
<setup>
<module>Sr_AgreementPosition</module>
<class>Mage_Catalog_Model_Resource_Eav_Mysql4_Setup</class>
</setup>
</sr_agreement_setup>
</resources>
</global>
<frontend>
<events>
<core_block_abstract_to_html_before>
<observers>
<sr_agreement_observer>
<class>sr_agreement/observer</class>
<type>model</type>
<method>sortAgreements</method>
</sr_agreement_observer>
</observers>
</core_block_abstract_to_html_before>
</events>
</frontend>
<adminhtml>
<events>
<adminhtml_block_html_before>
<observers>
<sr_agreement_observer_agreement>
<class>sr_agreement/observer</class>
<type>model</type>
<method>addAgreementsPosition</method>
</sr_agreement_observer_agreement>
</observers>
</adminhtml_block_html_before>
</events>
</adminhtml>
</config>
App\code\community\Sr\AgreementPosition\Model\Observer.php
<?php
class Sr_AgreementPosition_Model_Observer
{
/**
* Add "Postion" to Checkout Agreements
*/
public function addAgreementsPosition(Varien_Event_Observer $observer)
{
$block = $observer->getEvent()->getBlock();
if ($block instanceof Mage_Adminhtml_Block_Checkout_Agreement_Edit_Form) {
$helper = Mage::helper('sr_agreement');
$form = $block->getForm();
$form->getElement('content')->setRequired(false);
/** @var Varien_Data_Form_Element_Fieldset $fieldset */
$fieldset = $form->getElement('base_fieldset');
$fieldset->addField('position', 'text', array(
'label' => $helper->__('Position'),
'title' => $helper->__('Position'),
'name' => 'position',
'value' => '0',
'class' => 'validate-zero-or-greater',
));
$model = Mage::registry('checkout_agreement');
$form->setValues($model->getData());
$block->setForm($form);
}
return $this;
}
/**
* Sort agreements
*/
public function sortAgreements(Varien_Event_Observer $observer)
{
$block = $observer->getEvent()->getBlock();
if ($block->getType() == 'checkout/agreements') {
if ($agreements = $block->getAgreements()) {
$agreements->setOrder('position', Varien_Data_Collection::SORT_ORDER_ASC);
$collection = new Varien_Data_Collection();
foreach ($agreements as $agreement) {
$collection->addItem($agreement);
}
$observer->getEvent()->getBlock()->setAgreements($collection);
}
}
return $this;
}
}
Не публиковал xml-файлы помощника и модулей... скачать можно здесь: https://github.com/sreichel/magento-Sr-AgreementPosition
Примечание: Если вы найдете вопросы пожалуйста, откройте билет на Github.
Редактировать: сделать контент необязательным - это всего лишь одна строка в observer, и она будет добавлена позже (сейчас не больше времени)
$form->getElement('content')->setRequired(false);