Press "Enter" to skip to content

[prestashop 1.4] edytor tekstowy TinyMce w opisie kategorii

Admin 0

Dla użytkowników tej wersji PrestaShop jest to dość ważna luka w tym oprogramowaniu:

Wdrażanie PrestaShop Kraków

Ale można ją łatwo naprawić nawet nie znając się na programowaniu.

1. Modyfikacja pola TEXTAREA

Otwieramy plik:

admin/tabs/AdminCategories.php

UWAGA – w zależności od nazwy katalogu gdzie znajduje się Twój admin – lokalizacja może być inna. Zaraz po instalacji PrestaShop instalator wymaga aby domyśly folder z Adminem (dostępem do zaplecza sklepu) był zmieniony na inny więc tutaj w tej lokalizacji tego plikui zamiast słowa „admin” musisz podać taki jak się u Ciebie znajduje.

W okolicach linii 237 znajdujemy wystąpienie pola opisu kategorii typu TEXTAREA (jest to jedyne pole TEXTAREA w tym dokumencie więc nie powinno byc trudno go znaleźć) i dodajemy nowy atrybut CLASS o wartości „rte” w tym polu:

czyli Zamiast:

textarea name="description_'.$language['id_lang'].'"

powinno być:

textarea class="rte" name="description_'.$language['id_lang'].'"

2. Wywołanie TInyMce

Następnie na końcu dokumentu wywołujemy metodę skryptu TinyMce.

Na końcu metody (funkcji PHP):

public function displayForm($token = NULL)

(przed jej zakończeniem – klamrą zamykającą: „}”) wklejamy:

global $cookie;
$iso = Language::getIsoById((int)($cookie->id_lang));
$isoTinyMCE = (file_exists(_PS_ROOT_DIR_.'/js/tiny_mce/langs/'.$iso.'.js') ? $iso : 'en');
$ad = dirname($_SERVER["PHP_SELF"]);
echo '
<script type="text/javascript">// <![CDATA[ var iso = \''.$isoTinyMCE.'\' ; var pathCSS = \''._THEME_CSS_DIR_.'\' ; var ad = \''.$ad.'\' ; // ]]></script>
<script src="'.__PS_BASE_URI__.'js/tiny_mce/tiny_mce.js" type="text/javascript"></script>
<script src="'.__PS_BASE_URI__.'js/tinymce.inc.js" type="text/javascript"></script>';

3. Modyfikacja kontrolera PHP

Otwieramy plik:

controllers/CategoryController.php

i znajdujemy linijkę (okolice 119 linii):

$this->category->description = nl2br2($this->category->description);

usuwamy wywołanie funkcji nl2br2 na tym stringu, czyli zamieniamy na:

$this->category->description = ($this->category->description);

4. Nadpisanie metody getTranslationsFieldsChild()

W tym celu w folderze:

/override/classes/

Tworzymy pusty plik o nazwie (z dużej litery):

Category.php

i wkleiamy do niego poniższy kod:

<?php
class Category extends CategoryCore
{
public function getTranslationsFieldsChild() {
self::validateFieldsLang();
$fieldsArray = array('name', 'link_rewrite', 'meta_title', 'meta_keywords', 'meta_description');
$fields = array();
$languages = Language::getLanguages();
$defaultLanguage = Configuration::get('PS_LANG_DEFAULT');
foreach ($languages as $language)
{
$fields[$language['id_lang']]['id_lang'] = $language['id_lang'];
$fields[$language['id_lang']][$this->identifier] = intval($this->id);
$fields[$language['id_lang']]['description'] = (isset($this->description[$language['id_lang']])) ? Tools::htmlentitiesDecodeUTF8(pSQL($this->description[$language['id_lang']], true)) : '';
foreach ($fieldsArray as $field)
{
if (!Validate::isTableOrIdentifier($field))
die(Tools::displayError());
/* Check fields validity */
if (isset($this->{$field}[$language['id_lang']]) AND !empty($this->{$field}[$language['id_lang']]))
$fields[$language['id_lang']][$field] = pSQL($this->{$field}[$language['id_lang']]);
elseif (in_array($field, $this->fieldsRequiredLang))
$fields[$language['id_lang']][$field] = pSQL($this->{$field}[$defaultLanguage]);
else
$fields[$language['id_lang']][$field] = '';
}
}
return $fields;
}
}

Gotowe. Teraz po wejściu w edycję danej kategorii – pole opisu tej kategorii będzie umożliwiało formatowanie tekstu

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

Zobacz także !
Domyślnie w dziale KONTAKT w sklepie PrestaShop znajduje się jedynie formularz kontaktowy.…