Umfangreiche SEO-Texte muss ich im Footer des Produktlisting/Kategorien anzeigen.
Dafür habe ich ein entsprechendes Datenbankfeld angelegt und über ein Template für page_list_listbody funktioniert die Frontendausgabe wunderbar.
Für das Backend wollte ich ein eigenes Tab, welches ich über die menu.xml in meinem Modul definiert habe.
<?xml version="1.0" encoding="ISO-8859-15"?>
<OX>
<OXMENU id="NAVIGATION_ESHOPADMIN">
<MAINMENU id="mxmanageprod">
<SUBMENU id="mxcategories" cl="category" list="category_list">
<TAB id="tbclcategory_text2" cl="category_text2" />
</SUBMENU>
</MAINMENU>
</OXMENU>
</OX>
Zusätzlich habe ich noch einen Controller sowie ein Backend Template erstellt.
Controller:
<?php
class category_text2 extends oxAdminDetails {
protected $_sThisTemplate = "category_text2.tpl";
public function render()
{
parent::render();
$this->_aViewData['edit'] = $oCategory = oxNew('oxcategory');
$soxId = $this->_aViewData["oxid"] = $this->getEditObjectId();
if ($soxId != "-1" && isset($soxId)) {
// load object
$iCatLang = oxRegistry::getConfig()->getRequestParameter("catlang");
if (!isset($iCatLang)) {
$iCatLang = $this->_iEditLang;
}
$this->_aViewData["catlang"] = $iCatLang;
$oCategory->loadInLang($iCatLang, $soxId);
foreach (oxRegistry::getLang()->getLanguageNames() as $id => $language) {
$oLang = new stdClass();
$oLang->sLangDesc = $language;
$oLang->selected = ($id == $this->_iEditLang);
$this->_aViewData["otherlang"][$id] = clone $oLang;
}
}
$this->_aViewData["editor"] = $this->_generateTextEditor("100%", 300, $oCategory, "oxcategories__oxlongdesc2", "list.tpl.css");
return $this->_sThisTemplate;
}
/**
* Saves category description text to DB.
*
* @return mixed
*/
public function save()
{
parent::save();
$myConfig = $this->getConfig();
$soxId = $this->getEditObjectId();
$aParams = oxRegistry::getConfig()->getRequestParameter("editval");
$oCategory = oxNew("oxcategory");
$iCatLang = oxRegistry::getConfig()->getRequestParameter("catlang");
$iCatLang = $iCatLang ? $iCatLang : 0;
if ($soxId != "-1") {
$oCategory->loadInLang($iCatLang, $soxId);
} else {
$aParams['oxcategories__oxid'] = null;
}
$oCategory->setLanguage(0);
$oCategory->assign($aParams);
$oCategory->setLanguage($iCatLang);
$oCategory->save();
// set oxid if inserted
$this->setEditObjectId($oCategory->getId());
}
}
Template:
[{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="category_text2">
<input type="hidden" name="editlanguage" value="[{ $editlanguage }]">
</form>
[{ $editor }]
<form name="myedit" id="myedit" action="[{$oViewConf->getSelfLink()}]" method="post" onSubmit="copyLongDesc('oxcategories__oxlongdesc2');" style="padding: 0px;margin: 0px;height:0px;">
[{ $oViewConf->getHiddenSid() }]
<input type="hidden" name="cl" value="category_text">
<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__oxlongdesc2]" 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.value='save'">
</td>
</tr>
</form>
</table>
[{include file="bottomnaviitem.tpl"}]
[{include file="bottomitem.tpl"}]
Wenn ich nun eine Kategorie bearbeite wird der Text des Datenbankfeldes [B]oxlongdesc2[/B] geladen. Aber nach dem Speichern oder einer Änderung der Sprache wird immer der Standard Langtext geladen. Was habe ich übersehen, bzw. was muss ich noch anpassen?
Nur bei der onDeactivate-Funktion habe ich etwas Kopfschmerzen. Das ist zwar sauber programmiert, des öfteren haben mir leider Kunden im Backend rumgespielt und Erweiterungen deaktiviert. D.h. alles Texte wären beim Deaktivieren des Moduls weg, deshalb würde ich die onDeactive weglassen.