How to Modulentwicklung Blogserie

Hallo liebe Community :slight_smile:

selbst schreibe ich aktuell an dem 5. Teil meiner Blogserie “How to Modulentwicklung”

Ersten 4. Teile
http://www.bischoff-webentwicklung.de/modulentwicklung-teil-1/
http://www.bischoff-webentwicklung.de/modulentwicklung-teil-2/
http://www.bischoff-webentwicklung.de/modulentwicklung-teil-3/
http://www.bischoff-webentwicklung.de/how-to-modulentwicklung-teil-4/

Eigentlich plane ich immer Sonntags um 10 Uhr einen neuen Blogbeitrag zu veröffentlichen. Aber diesmal konnte ich den Termin leider nicht einhalten, weil der Teufel steckt bekanntlich im Detail!

Ich habe die Produktdetailseite beim Standard Theme Azure um den Tab “Fragen und Antworten” erweitert. Die Darstellung der hinterlegten Daten aus meiner eigenen Datenbanktabelle bereitet mir auch keine Probleme.

[B]Wo ich aktuell hänge ist das Speichern und Formularhandling neuer Fragen zu einem Produkt.[/B]

Ich habe für den [B]tabsContent[/B] einen eigene Template Datei [B]bisquestionanswer.tpl[/B] hinterlegt, beim Formularaufbau habe ich mich am Kontaktformular orientiert:

[{foreach from=$oView->bisGetArticleQuestionsAnswersList($oViewConf->getActArticleId()) item=aBisQuestionAnswer}]
    <p><strong>[{$aBisQuestionAnswer.BISQUESTION}]</strong></p>
    <p>[{$aBisQuestionAnswer.BISANSWER}]</p>
[{/foreach}]

[{oxscript include="js/widgets/oxinputvalidator.js" priority=10 }]
[{oxscript add="$('form.js-oxValidate').oxInputValidator();"}]
<form class="js-oxValidate" action="[{$oViewConf->getSslSelfLink()}]" method="post">
    <div>
        [{$oViewConf->getHiddenSid()}]
        <input type="hidden" name="fnc" value="bisAddQuestion">
        <input type="hidden" name="cl" value="[{$oViewConf->getActiveClassName()}]">
        [{assign var="oCaptcha" value=$oView->getCaptcha()}]
        <input type="hidden" name="c_mach" value="[{$oCaptcha->getHash()}]"/>
        [{if $oViewConf->getActArticleId()}]
            <input type="hidden" name="anid" value="[{ $oViewConf->getActArticleId() }]">
        [{/if}]
    </div>
    <ul class="form clear">
        <li [{if $aErrors}]class="oxInValid"[{/if}]>
            <label for="bisquestion" class="req">Ihre Frage</label>
            <textarea rows="15" cols="70" name="bisquestion" id="bisquestion" class="js-oxValidate js-oxValidate_notEmpty areabox"></textarea>
            <p class="oxValidateError">
                <span class="js-oxError_notEmpty">[{oxmultilang ident="ERROR_MESSAGE_INPUT_NOTALLFIELDS"}]</span>
            </p>
        </li>
        <li class="verify">
            <label class="req">[{oxmultilang ident="VERIFICATION_CODE" suffix="COLON"}]</label>
            [{assign var="oCaptcha" value=$oView->getCaptcha()}]
            [{if $oCaptcha->isImageVisible()}]
                <img src="[{$oCaptcha->getImageUrl()}]" alt="">
            [{else}]
                <span class="verificationCode" id="verifyTextCode">[{$oCaptcha->getText()}]</span>
            [{/if}]
            <input type="text" data-fieldsize="verify" name="c_mac" value="" class="js-oxValidate js-oxValidate_notEmpty">
            <p class="oxValidateError">
                <span class="js-oxError_notEmpty">[{oxmultilang ident="ERROR_MESSAGE_INPUT_NOTALLFIELDS"}]</span>
            </p>
        </li>
        <li class="formNote">
            [{oxmultilang ident="COMPLETE_MARKED_FIELDS"}]
        </li>
        <li>
            <button class="submitButton largeButton" type="submit">[{oxmultilang ident="SEND"}]</button>
        </li>
    </ul>
</form>

Ich überschreibe die Widget Klasse [B]oxwarticledetails[/B] und in meiner Überladung ist die Methode [B]bisAddQuestion[/B] definiert, welche das Formular beim Abschicken entgegen nimmt:

class bis_oxwarticledetails extends bis_oxwarticledetails_parent {

    public function bisGetArticleQuestionsAnswersList($sArticleId) {
        $oBisQuestionAnswer = oxNew('bisquestionanswer');
        return $oBisQuestionAnswer->bisGetQuestionsAnswersList($sArticleId);
    }

    public function bisAddQuestion() {
        $sQuestion = oxConfig::getParameter( 'bisquestion' );
        $sArticleId = oxConfig::getParameter( 'anid' );

        // spam spider prevension
        $sMac     = oxConfig::getParameter( 'c_mac' );
        $sMacHash = oxConfig::getParameter( 'c_mach' );
        $oCaptcha = $this->getCaptcha();

        if ( !$oCaptcha->pass( $sMac, $sMacHash ) ) {
            // even if there is no exception, use this as a default display method
            oxRegistry::get("oxUtilsView")->addErrorToDisplay( 'MESSAGE_WRONG_VERIFICATION_CODE' );
            oxRegistry::getUtils()->redirect( oxRegistry::getConfig()->getShopUrl() . 'index.php?cl=details&anid='.$sArticleId);
        }

        // save

        // success message
        oxRegistry::get("oxUtilsView")->addErrorToDisplay( 'Vielen Dank! Ihre Frage an uns weitergeleitet. Wir werden diese zeitnah beantworten.' );
        oxRegistry::getUtils()->redirect( oxRegistry::getConfig()->getShopUrl() . 'index.php?cl=details&anid='.$sArticleId);
    }

}

Die Funktionalität des Speichern ist schon mit dem Kommentar [B]// save[/B] markiert. Dies werde ich auch noch alleine lösen können.

Mir geht es um die [B]// success message[/B] diese habe ich ähnlich zu einer Fehlermeldung + Redirect organisiert. Aber dies ist so ja nicht korrekt, weil es eine Erfolgsmeldung ist.

[B]Wie hinterlege ich bei OXID eShop eine Erfolgsmeldung und leite dann wieder auf die Produktdetailseite zurück um die Erfolgsmeldung im besten Fall im Tab “Fragen & Antworten” darzustellen?[/B]

Irgendwie habe ich mich an dieser Stelle festgebissen…
Über Anregungen oder Lösungsansätze würde ich mich sehr freuen. Vielen Dank!

Viele Grüße
indianer3c

Hallo,

[QUOTE=indianer3c;157352]Wie hinterlege ich bei OXID eShop eine Erfolgsmeldung und leite dann wieder auf die Produktdetailseite zurück um die Erfolgsmeldung im besten Fall im Tab “Fragen & Antworten” darzustellen?[/QUOTE]

am besten mit Ajax.

Grüße
Rafig

Dafür braucht man kein Ajax. Kannst über Post oder Session ne Variable erzeugen und abfragen. Werbeausgleich: Es gibt auch Meister Propper, General etc.pp.