Magento 1: Правила и условия порядок сортировки, если более одного


У меня есть 3 Условия и положения для процесса оформления заказа. Все 3 T&C - это просто флажки, потому что я внес некоторые изменения в шаблон, скрыв поле содержимого. По умолчанию Magento перечисляет термины один за другим на основе их идентификаторов. Кто-нибудь изменил модуль, вставив в таблицу checkout_agreement новое поле под названием позиция и разрешив сортировку Magento по нему?

Author: sv3n, 2017-05-13

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);
 2
Author: sv3n, 2017-05-24 08:56:37