Backend-Erweiterung: Inhalt von neuem Tab

Guten Morgen!

Ich arbeite nun seit einer Woche mit dem OXID-System und bin auch schon alleine ziemlich weit gekommen, doch nun steh ich das erste Mal auf dem Schlauch…

Zu meinen Arbeiten:

Ich habe ein Modul gebastelt, welches im Backend bei den Kategorien weitere Tabs/Reiter einsetzt. Die Reiter werden angezeigt (modul/menu.xml), die Beschriftungen werden auch aus der Übersetzungs-Datei (views/admin/de|en/modul_lang.php) geladen und angezeigt.

Dann habe ich die category_text.tpl kopiert und als Grundlage meines neuen Tabs genommen. Ich will also nichts weiter, als ein weiteres großes Textfeld. Auch die Datenbank “oxcategories” habe ich um die entsprechenden Felder erweitert.

Tmp-Ordner wurde geleert, Views erneuert!

Zu meinem Problem:

Wenn ich im Backend auf “Kategorien” klicke, dann ein Produkt auswähle und dann den neuen Reiter anklicke, wird mir nicht der gewünschte Inhalt, sondern die Startseite angezeigt.

Weiß jemand Rat?

MfG

steht dazu was im exception_log?

In der Tat, da bin ich noch nicht drauf gekommen…

Faulty component --> twws_ausstattung
---------------------------------------------
oxSystemComponentException-oxException (time: 2013-04-24 09:28:51): [0]: EXCEPTION_SYSTEMCOMPONENT_CLASSNOTFOUND 
 Stack Trace: #0 C:\xampp\htdocs\Strandkorb\core\oxutilsobject.php(196): oxUtilsObject->_getObject('oxsystemcompone...', 0, Array)

D.h.: Die Klasse ist nicht vorhanden, oder was bedeutet das?

wenns da steht, dann bedeutet es das wohl :wink:
du musst auch den entsprechenden Controller bereitstellen, nur Template zu kopieren reicht nicht.

Hmm…

Also ich habe im Ordner applications/controllers/admin/ eine Datei namens twws_category_ausstattung.php, welche die Klasse

class twws_category_ausstattung extends oxAdminDetails

beinhaltet.
Die Methode render() gibt zurück: “twws_category_ausstattung.tpl”

Die tpl-Datei befindet sich im Ordner applications/views/admin/tpl .

Inhalt der tpl:

[{include file="headitem.tpl" title="GENERAL_ADMIN_TITLE"|oxmultilangassign}]

<script type="text/javascript">
<!--
function loadLang(obj)
{
    var langvar = document.getElementById("catlang");
    if (langvar != null )
        langvar.value = obj.value;
    document.myedit.submit();
}
//-->
</script>

[{ if $readonly }]
    [{assign var="readonly" value="readonly disabled"}]
[{else}]
    [{assign var="readonly" value=""}]
[{/if}]

<form name="transfer" id="transfer" action="[{ $oViewConf->getSelfLink() }]" method="post">
    [{ $oViewConf->getHiddenSid() }]
    <input type="hidden" name="oxid" value="[{ $oxid }]">
    <input type="hidden" name="cl" value="twws_category_ausstattung">
    <input type="hidden" name="editlanguage" value="[{ $editlanguage }]">
</form>


                  [{ $editor }]


        <form name="myedit" id="myedit" action="[{ $oViewConf->getSelfLink() }]" method="post" onSubmit="copyLongDesc( 'oxcategories__twwsAusstattung' );" style="padding: 0px;margin: 0px;height:0px;">
        [{ $oViewConf->getHiddenSid() }]
        <input type="hidden" name="cl" value="twws_category_ausstattung">
        <input type="hidden" name="fnc" value="">
        <input type="hidden" name="oxid" value="[{ $oxid }]">
        <input type="hidden" name="voxid" value="[{ $oxid }]">
        <input type="hidden" name="editval[oxcategories__oxid]" value="[{ $oxid }]">
        <input type="hidden" name="catlang" value="[{$catlang}]">
        <input type="hidden" name="editval[oxcategories__twwsAusstattung]" value="">
        <table>
        <tr>
          <td valign="top" class="edittext">
          [{if $languages}]<b>[{ oxmultilang ident="GENERAL_LANGUAGE" }]</b>
          <select name="catlang" class="editinput" onchange="Javascript:loadLang(this)" [{ $readonly }]>
          [{foreach key=key item=item from=$languages}]
            <option value="[{$key}]"[{if $catlang == $key}] SELECTED[{/if}]>[{$item->name}]</option>
          [{/foreach}]
          </select>
          [{/if}]
          </td>
        </tr>
        <tr>
          <td>
                <input type="submit" class="edittext" name="save" value="[{ oxmultilang ident="CATEGORY_TEXT_SAVE" }]" onClick="Javascript:document.myedit.fnc.value='save'">
          </td>
        </tr>
        </form>
      </table>

[{include file="bottomnaviitem.tpl"}]

[{include file="bottomitem.tpl"}]

Müsste doch eigentlich funktionieren, oder?

in der exception steht aber:

Faulty component --> [b]twws_ausstattung[/b]

d.h. dass du dem Framework mitgeteilt hast, dass er die Klasse “twws_ausstattung” aufrufen soll und nicht “twws_category_ausstattung”

Oh weh…

Ich hatte vergessen die Pfade in der metadata.php und menu.xml anzupassen.

Jetzt wird mir sowohl der Reiter, als auch der Inhalt (textarea, Sprachauswahl + Button “Speichern”) angezeigt.

Wenn ihr mir nun nochmal auf die Sprünge helft mit dem Inhalt der Textarea:

Wie bekomme ich den Inhalt angezeigt? Ist z.Z. leer, obwohl ich manuell etwas in die Datenbank geschrieben habe.

Und wo ist die Methode copyLongDesc(); definiert? Ich müsste doch bestimmt noch mal eine ähnliche für meinen text erzeugen, oder kann ich einfach schreiben:

onsubmit="copyLongDesc( 'oxcategories__twwsAusstattung' );"

Danke für die großartige Unterstützung!

Datenbank Views aktualisiert?
fang zuerst mit einem einfachen <input> an, wenn es funktioniert kannst du auf textarea aufrüsten

VIEWS habe ich über das Backend Service->Tools aktualisiert.

Die Funktion copylongdesc() ist dort definiert: /out/admin/tpl/headitem.tpl -> line 60

Zur Vorlage meiner tpl-Datei habe ich category_text.tpl genommen, natürlich habe ich die entsprechenden Namen, Verweise, cl’s und ID’s angepasst.

Doch das Feld bleibt leer, egal ob input oder textarea.

Auch wenn ich erneut etwas eingebe und auf “Speichern” klicke, wird das Textfeld lediglich geleert. Ich müsste nur wissen, wo die Logik des Speicherns steckt, dann komme ich bestimmt alleine weiter…

Danke für deine Geduld =)

[edit]: Beim [{debug}]-Fenster werden mir die Inhalte ausgegeben =)

die Logik hast du doch im Controller und im Template gesehen.
Wenn du das Template aufmachst, findest du dort an der Stelle, wo im Backend textarea mit den Inhalt kommen sollte nur ein [{$editor}].
Und jetzt musst du gucken, woher im controller $editor kommt und wie es zusammengebaut wird.
Dort wirst du auch die Lösung finden, wieso textarea leer ist

Hey vanilla thunder !!!

EINTAUSEND DANK!

Fehler in der Logik: großes A statt kleines a …

Falsch:

$this->_aViewData["editor"] = $this->_generateTextEditor( "100%", 300, $oCategory, "oxcategories__twwsAusstattung", "list.tpl.css");

Richtig:

$this->_aViewData["editor"] = $this->_generateTextEditor( "100%", 300, $oCategory, "oxcategories__twwsausstattung", "list.tpl.css");

Falls noch einmal jemand dieses Problem hat: Der Ausdruck “oxcategories__twwsausstattung” muss mit dem Ausdruck in dem onSubmit=“copyLongDesc( ‘oxcategories__twwsausstattung’ );” übereinstimmen…

Herzlichsten Dank^^

Kannst Du das Modul zur Verfügung stellen? Ich habe ein ähnliches Problem.

Hi muex,

ich lade das Modul am Montag hoch!

komme vorher nicht dazu =)

MfG,
weihs.th

So hier das Modul…

Infos hierzu:

Ordner twws_moreText -> kommt in den Ordner "module"
die *.tpl-Dateien sind bei mir in "\application\views\admin pl"
die *.php-Dateien (außer “twws_lang.php”) sind bei mir in “\application\controllers\admin”

“twws_lang.php” liegt im Ordner “\application\views\admin”

Ich weiß nicht, ob man diese Dateien mit entsprechendem ordner-System auch einfach alle im Modul-Ordner lassen kann… bei mir hat es jedenfalls nicht geklappt…

Die Datenbank muss natürlich erweitert werden!!! (Tabelle: “oxcategories”)
Die Feldnamen sind dann in den entsprechenden Dateien anzupassen (“oxcategories__twwsausstattung”, usw…)

Das Modul erzeugt momentan DREI neue Reiter bei der Kategorie-Verwaltung mit jeweils EINER Textarea (Editor)

Ich hoffe du kommst klar! OXID ist für mich auch noch neu, darum gebe ich keinerlei Garantie, dass es bei dir funktioniert. Sollte aber als Vorlage hilfreich sein.

NICHT VERGESSEN:
Im Backend die VIEWS erneuern und den Ordner “tmp” leeren!