سؤال

يمكن لأي شخص تقديم دمية دليل \ مقتطفات الشفرة على كيفية إنشاء الأمامية في شكل الماجنتو التي المشاركات البيانات إلى وحدة تحكم العمل.

أحاول أن أكتب البديل من الاتصال بنا من.(أعلم أن من السهل تعديل نموذج الاتصال بنا ، على النحو المبين هنا).أحاول أيضا إنشاء نموذج الملاحظات مع حقول إضافية.

ونظرا لهذا النموذج الأساسي:

<form action="<?php echo $this->getFormAction(); ?>" id="feedbackForm" method="post">   
                <div class="input-box">
                    <label for="name"><?php echo Mage::helper('contacts')->__('Name') ?> <span class="required">*</span></label><br />
                    <input name="name" id="name" title="<?php echo Mage::helper('contacts')->__('Name') ?>" value="<?php echo $this->htmlEscape($this->helper('contacts')->getUserName()) ?>" class="required-entry input-text" type="text" />
                </div>

    <div class="button-set">
        <p class="required"><?php echo Mage::helper('contacts')->__('* Required Fields') ?></p>
        <button class="form-button" type="submit"><span><?php echo Mage::helper('contacts')->__('Submit') ?></span></button>
    </div>
</form>

ما هي الخطوة الأساسية لا تحتاج إلى الحصول على إدخالها اسم وحدة تحكم العمل للتجهيز ؟

هل كانت مفيدة؟

المحلول

إذا أي أحد يهتم، أنا تحل بذلك عن طريق بناء وحدة بلدي الذي تعتمد إلى حد كبير على وحدة Magento_Contacts.

وهنا بعض الروابط التي ساعدتني على معرفة الأمور.

http://www.magentocommerce.com/wiki/custom_module_with_custom_database_table

http://inchoo.net/ecommerce/magento/magento-custom- رسائل البريد الإلكتروني /

نصائح أخرى

لجعل $this->getFormAction() عودة URL مخصص تحكم لديك خياران:

  1. الاتصال setFormAction() في مكان آخر في الحي.
  2. استخدام مخصص كتلة النوع الذي ينفذ getFormAction().

(1) هو ما يحدث في Mage_Contacts_IndexController::indexAction(), ولكن (2) هو نظافة النهج و سأشرح ذلك بالتفصيل:

إنشاء وحدة مخصصة

app/etc/modules/Stack_Form.xml:

<?xml version="1.0"?>
<config>
    <modules>
        <Stack_Form>
            <active>true</active>
            <codePool>local</codePool>
        </Stack_Form>
    </modules>
</config>

app/code/local/Stack/Form/etc/config.xml:

<?xml version="1.0"?>
<config>
    <modules>
        <Stack_Form>
            <version>0.1.0</version>
        </Stack_Form>
    </modules>
    <frontend>
        <routers>
            <stack_form>
                <use>standard</use>
                <args>
                    <module>Stack_Form</module>
                    <frontName>feedback</frontName>
                </args>
            </stack_form>
        </routers>
    </frontend>
    <global>
        <blocks>
            <stack_form>
                <class>Stack_Form_Block</class>
            </stack_form>
        </blocks>
    </global>
</config>

هذا التكوين يسجل stack_form كتلة الاسم المستعار الخاص كتل ، feedback أمام اسم الخاصة وحدات تحكم.

إنشاء مخصص كتلة

app/code/local/Stack/Form/Block/Form.php

class Stack_Form_Block_Form extends Mage_Core_Block_Template
{
    public function getFormAction()
    {
        return $this->getUrl('stack_form/index/post`);
    }
}

نحن هنا تنفيذها getFormAction() لإنشاء عنوان URL عادتنا تحكم (ستكون النتيجة BASE_URL/التعليقات/index/آخر).

إنشاء مخصص تحكم

app/code/local/Stack/Form/controllers/IndexController.php

class Stack_Form_IndexController extends Mage_Contacts_IndexController
{
    public function postAction()
    {
        // your custom post action
    }
}

إذا كان النموذج يجب أن تتصرف تماما مثل شكل من أشكال الاتصال, فقط مع مختلف قالب البريد الإلكتروني الإضافية حقول النموذج ، هناك نوعان من الحلول التي ذكرتها في https://magento.stackexchange.com/q/79602/243 حيث لا يوجد سوى واحد منهم يتطلب في الواقع مخصص تحكم العمل إلى إرسال النموذج:

إذا نظرتم إلى الاتصالات تحكم تستخدم في شكل العمل ، سوف تجد أن

  1. المعاملات القالب مباشرة من التكوين
  2. بعد يتم تمرير البيانات إلى القالب (قالب متغير data), بحيث يمكنك إضافة أية حقول إضافية إلى النموذج قالب في قالب البريد الإلكتروني.ولكن من الصعب التحقق من صحة ترميز "اسم" ، "تعليق" ، "البريد الإلكتروني" و "hideit".

حتى, إذا كنت بحاجة مختلفة تماما قالب البريد الإلكتروني أو إضافية/تغيير التحقق من صحة المدخلات ، وأفضل رهان هو خلق تحكم مخصصة مع نسخة معدلة من postAction من Mage_Contacts_IndexController.

ولكن هناك حل آخر غير محدودة بعض الشيء ولكن من دون أي التعليمات البرمجية المخصصة المعنية:

  • إنشاء المدخلات الخفية التي يحدد نوع النموذج.أنها يمكن أن تكون مجرد <input type="hidden" name="custom" value="1" />.
  • في اتصال المعاملات قالب البريد الإلكتروني, استخدام if التوجيه إلى عرض محتوى مختلف على أساس نوع النموذج:

    {{if data.custom}}
        ... custom contact form email ...
    {{else}}
        ... standard contact form email ...
    {{/if}}
    

كيفية استخدام هذا العرف كتلة

يمكنك إضافة شكل إلى أي مكان في CMS باستخدام هذا الرمز (CMS التوجيه):

{{block type="stack_form/form" template="path/to/your/form.phtml"}}

إذا كنت تفعل هذا, تحتاج إلى إضافة "stack_form/النموذج" إلى الكتلة البيضاء تحت نظام > ضوابط > كتل!

أو في تخطيط استخدام هذا الرمز (تخطيط XML):

<block type="stack_form/form" name="any_unique_name" template="path/to/your/form.phtml" />

الحل دون وحدة مخصصة

إذا كنت تستخدم حل من دون مخصص تحكم واحدة قالب البريد الإلكتروني المذكور أعلاه, يمكنك تعيين شكل العمل باستخدام تخطيط XML كذلك.

لتحقيق هذا, نحن نستخدم ميزة الاتصال المساعدين كما المعلمات كتلة الإجراءات.للأسف الأساسية مساعد لا يملك العامة طريقة للحصول على عنوان URL ولكن من مساعد Mage_XmlConnect لذا يمكنك استخدام هذا واحد:

<block type="core/template" name="any_unique_name" template="path/to/your/form.phtml">
    <action method="setFormAction">
        <param helper="xmlconnect/getUrl">
            <route>contacts/index/post</route>
        </param>
    </action
</block>

في CMS التوجيه لا يمكنك استخدام المساعدين ، لذلك هناك سوف تحتاج إلى وضع URL الفعلي:

{{block type="stack_form/form" template="path/to/your/form.phtml" form_action="/feedback/index/post"}}

منذ ربما يكون مختلف صفحات CMS/كتل مختلفة في مخزن المشاهدات, هذا لا ينبغي أن يكون مشكلة كبيرة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top