2013-01-02 8 views
11

Próbuję utworzyć rozszerzenie GUI w Tridion, w którym wstawiam konkretny html do formatu RTF po kliknięciu przycisku .... Mam pasek narzędzi przycisk i popup, aby poinformować użytkownika. Ale kiedy klikam OK na wyskakującym okienku po wstawieniu kodu HTML "/div > <", wstawia "< div class = 'Page'/>".Tridion - Wstaw HTML (elementy literalne i częściowe) w RTF

Okazało się, że metoda applyHTML jest to, co modyfikuje, co jest wstawiane. Czy jest jakaś inna funkcja/metoda, która wstawia dokładnie to, co wskazuję, mam na myśli nieprawidłowy html z brakującymi znacznikami zamykającymi lub otwartymi znacznikami?

+0

Nie jestem pewien, co to jest funkcja, ale wyobrażam sobie, że nie można ominąć funkcji porządkowania HTML, ponieważ treść musi być dobrze sformatowana XHTML. Jeśli możesz wyjaśnić, co próbujesz osiągnąć, być może uda się uzyskać bardziej odpowiednie rozwiązanie. – johnwinter

Odpowiedz

6

Jeśli chcesz wprowadzić nieprawidłowy znacznik, weź pod uwagę pole tekstowe. Nie wiesz, jak bardzo zmieniłoby to twój istniejący model rozszerzenia i treści, ale możesz wpisać dowolne dane w polu zwykłego tekstu, w tym coś, co wydaje się być pewnego rodzaju "podzielonym" lub dzielącym symbol zastępczy.

</div><div class='Page'>

Aby utrzymać bogatą funkcjonalność tekst i wykonaj kilka typowych praktyk tridion, należy rozważyć jedną z następujących czynności.

wypełnić wszystkie zmiany znaczników na raz

Zakładając ostatecznej znaczników będą miały otwartą <div> i zamykanie </div>, rozważa swoją przedłużenie owinąć cały zestaw zaznaczonego tekstu bogatego. W procesie i przed aktualizacją komponentu, pozwól autorowi na wybór lokalizacji "podziału" i zapisanie całej aktualizacji do RTF.

Utwórz „szpagat” z wbudowanych schematów i kod szablonu

Wbudowane pola schematu są o wiele łatwiejszy sposób podzielić treści. Autorzy tworzą nowy zestaw osadzonych pól, a kod szablonu może zmienić to na tabulatory, akapity lub strony, które mogą być stronami (paginacją?) W twoim przypadku.

A "Paragraph" embedded schema can handle this use case, jak rozumiem.

<!-- TemplateBeginRepeat name="Component.Fields.Paragraph" --> 
<div class='Page'> 
<!-- author-entered content --> 
</div> 
<!-- TemplateEndRepeat --> 

To stworzy </div><div class='Page'> w między zestawami pól wbudowanych. Umożliwia także zmianę klasy i tagu w przyszłości bez zmian rozszerzeń.

Insert dla HTML "Merge Fields" zamiast

Zobacz opcje poście pisałem o custom tags in rich text fields, do których należą:

  • klas CSS w treści Explorer Menedżer takie jak class="page-split". Możesz nawet nadać temu stylowi odpowiedni styl (wizualnie jako na przykład <hr/>), a następnie zarchiwizować go do tego, czego potrzebujesz w ostatecznym znaczniku.
  • pola Merge znaczniki zastępcze, takie jak „[[end-page]][[start-page]
  • klienta HTML5 węzłów, jeśli musi

Można wstawić dowolny z nich z rozszerzeniem, ewentualnie stylizacja je wyglądać w określony sposób w CME.

Lubię podawać autorom prostsze sposoby wstawiania funkcji w polach tekstowych, ale funkcja "catch" przy wstawianiu specyficznego kodu HTML, w szczególności nieprawidłowego kodu HTML, do komponentów, polega na zakodowaniu tej funkcji w treści. Pojawią się problemy z migracją i zmianami w projekcie.

Rozważ skorzystanie z tego, jak Tridion oddziela projekt od treści.

+0

Hej, Alvinie, dziękuję paczce ... Uratowałeś nam wiele badań i pracy .... Masz rację, próbujemy dokonać paginacji. Tak to zrobiłem .... Użyłem znacznika zastępczego [PaginateHere] w applyHTML. A następnie zrobił getSource(). W zwróconym tekście zastąpiłem tagi błędnym kodem HTML. A następnie zrobił setSource(). Dzięki jeszcze raz! –

+0

Dobrze słyszeć. Podoba mi się twoja opcja "PaginateHere" (przypomina mi funkcję "więcej" Bloggera). Alternatywą byłoby osadzone pole schematu - głównie dlatego, że są to "strony" dzisiaj, ale może tabulatory, obszary z możliwością przeciągnięcia lub inne. Autor naciskał przycisk "+" poza polem, aby oddzielić zawartość. Tak czy inaczej, możesz również zwolnić symbol zastępczy w pliku RTF_ i zmienić go za pomocą szablonów. –

0

Prawdopodobnie, gdy powiesz: </div><div class='Page'>, masz na myśli <div class='Page'></div>. Jeśli tak jest, to chyba że możesz kontrolować czystość XML bezpośrednio, jedynym pozostałym podejściem (IMO) jest zapewnienie, że div ma jakąś zawartość. Najczęstszym sposobem wykonania tej czynności jest wstawienie spacji nierozdzielającej.