Dla użytkowników tej wersji PrestaShop jest to dość ważna luka w tym oprogramowaniu:
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