В Меджик много харесваме Oracle Universal Content Management (Oracle UCM), особено за големи корпоративни сайтове и решихме да споделим опита си за преизползване на код в Уеб редакторски режим. Инж. Илиан Илиев разказва, как става това.
Във всеки сайт съществуват елементи, към които могат да се отнесат следните изисквания:
Ако съдържанието на тези елементи е статично (еднакво за всички страници) съществуват 2 метода за решаване на проблема.
При първия използваме автоматичното конвертиране на различни документи към HTML формат, използвайки следния код:
където "document_id" е идентификаторът на документа, който искаме да конвертираме. Този метод позволява на потребителите лесно да редактират елемента, но не е подходящ за по-сложни елементи, които изискват по-комплексен HTML код за постигане на търсената визия.
При втория вариант се използва предварително подготвен HTML код вграден в XML файл, което позволява комбинирането на няколко елемента в един файл (един вид библиотека), като същевременно всеки от тях се извиква независимо от останалите. Особеното тук е, че в HTML кода, който се вгражда трябва скобите на таговете да бъдат заместени с техните еквиваленти (< и >). Пример:
<a class="description" href="#">Пълно описание</a> <a class="view_more" href="#"><span>вижте повече <img src="/common/images/01_ico.gif" alt="ico"/></span></a>
<item name="part_1"> <div class="link"> <a class="descrition" href="#">Пълно описание</a> <a class="view_more" href="#"><span>вижте повече <img src="/common/images/01_ico.gif" alt="ico"/></span></a> </div> </item>
Примерен код за използване на елемента:
[!--$ssIncludeXml('document_id', 'root/item[@name="part_1"]/text()')--]
Тук първият параметър на функцията ssIncludeXml указва идентификатора на документа, а вторият е XPATH израз, указващ пътя до съответния елемент.
По същия начин може да се използват и фрагменти, тъй като библиотеките, които ги съдържат също са XML-документи, което прави редакцията на кода доста по-удобна.
Всеки IDoc скрипт, който е част от XML-a ще бъде изпълнен.
Това позволява извежданото съдържание да бъде динамично. Всички предварително дефинирани в темплейта променливи(дефинирани преди мястото на извикване на региона) са на разположение. Важно е да не се забравя, че всяко действие върху променливите в рамките на вмъкнатия код се отразява глобално, а не само в рамките на въпросният код.
<!--$my_var3 = 'Това е променлива номер 3' --> <!-- SS_BEGIN_OPENREGIONMARKER(region1)--><!--$SS_REGIONID="region1"--><!--$include ss_open_region_definition --><!-- SS_END_OPENREGIONMARKER(region1)--> <!--SS_BEGIN_ELEMENT(region1_element1)--><!--$ssIncludeXml(SS_DATAFILE,region1_element1 & "/node()")--><!--SS_END_ELEMENT(region1_element1)--> <!-- SS_BEGIN_CLOSEREGIONMARKER(region1)--><!--$include ss_close_region_definition --><!-- SS_END_CLOSEREGIONMARKER(region1)--> <!--$my_var2 = 'Това е променлива номер 2' --> <p>Променлива номер 3: <!--$my_var3--></p>
ID-то на текущата секция е:
<p>Променлива номер 1: <!--$my_var--></p> <p>Променлива номер 2: <!--$my_var2--></p> <!--$my_var3="Презаписвам променлива номер 3"-->
Резултат:
ID-то на текущата секция е: xyz
<p>Променлива номер 1: Това е променлива номер 1</p> <!-- Показва съдържанието на променлива номер 1 --> <p>Променлива номер 2: </p> <!-- Съдържанието е празно тъй като променлива номер 2 все още не е дефинирана --> <p>Променлива номер 3: Презаписвам променлива номер 3</p><!-- Стойността на променлива номер 3 е променено във фрагмента-->
Лично аз, въпреки малко по-голямата комплексност на кода залагам на варианта с фрагментите. При него възможността да използваме съдържанието на други елементи от региона, като променливи във фрагмента, позволява създаването на динамично и лесно за редактиране съдържание.
Коментари
QzFOkZ Excellent article, I will take note. Many thanks for the story!