Sitecore FieldRenderer gibt Unterschiede zwischen CMS 6.5 und 7.0 aus

8

Ich habe kürzlich Inhalt und Codebase von einer alten Sitecore CMS 6.5-Installation (mit einer ganzen Reihe von Anpassungen) auf eine Neuinstallation von CMS 7.0 verschoben.

In der ursprünglichen Site wurde ein Single-line text -Feld verwendet, um beliebiges Javascript in die Seite zu rendern (für das Tracking). Dies funktionierte gut und das Javascript wurde in die Seite gerendert, uncodiert und wie erwartet ausgeführt.

In der neuen Installation habe ich jedoch festgestellt, dass der Inhalt jetzt HTML-codiert ist, was bedeutet, dass er nicht unter der Sitecore 7-Installation ausgeführt wird, mit der ich arbeite.

In meinem Sublayout habe ich einen FieldRenderer wie folgt:

%Vor%

Ich bin mir nicht sicher, ob es eine Anpassung / Konfiguration gibt, die ich nicht migriert habe, oder ob dies eine Änderung ist, die in Sitecore 7 eingeführt wurde (möglicherweise aus Sicherheitsgründen).

Kann irgendjemand etwas dazu sagen? Muss ich meinen eigenen Feldtyp erstellen, um das gewünschte Verhalten zu ermöglichen, oder gibt es eine Möglichkeit, dies mit 'out of the box'-Feldtypen zu tun?

    
geedubb 10.01.2014, 16:05
quelle

4 Antworten

10

Ich habe die GetTextFieldValue-Prozessorklasse von Sitecore 6.5 und von 7 überprüft und sieht anders aus

Dies ist von Sitecore 6.5: Sitecore.Pipelines.RenderField.GetTextFieldValue

%Vor%

und dieser stammt von Sitecore 7: Sitecore.Pipelines.RenderField.GetTextFieldValue

%Vor%

Sie können in der letzten Zeile des Codes auf Process-Methode von Sitecore 7 Ergebnis wird codiert angezeigt.   Sie können eine eigene Klasse für den GetTextField-Prozessor erstellen und sie der RenderField-Pipeline hinzufügen, aber ich empfehle Ihnen, Ihr Feld von einzeiligem Text zu mehrzeiligem Text oder zu Memofeld zu ändern.

Ich habe die Sitecore.Pipelines.RenderField.GetMemoFieldValue-Klasse auf Sitecore 6.5 und 7 überprüft und die Implementierung ist dieselbe und das Ergebnis ist nicht codiert:

%Vor%

Der Code für GetTextField wurde auf Sitecore 6.6 Update 3 aktualisiert. Sie können dies unter Versionsgeschichte :

  

Seiteneditor In 6.6 Update-3 wurde die Pipeline geändert   HTML-Codierung des Feldwerts beim Rendern einzeiliger Textfelder   (Ref. Nr. 327905). Dies hat im Seiteneditor nicht richtig funktioniert   welcher den kodierten Wert angezeigt hat. Und wenn der Benutzer die Seite gespeichert hat,   Bereits codierter Wert wäre wieder HTML-codiert. (384997)

Ich hoffe, es hilft.

    
user459491 12.01.2014, 17:56
quelle
5

Es scheint, dass viele Leute durch diesen Beitrag verwirrt worden sind und angefangen haben, mehr und mehr darum zu bitten, den oben erwähnten Fix zu bekommen.

  

Es scheint einen Fehler im FieldRenderer zu geben, der das Rendern von HTML-Tags verhindert   Sitecore CMS codiert nicht HTML

Sitecore CMS hat den Feldwert beim Rendern von einzeiligen Text Feldern und Links Feldern vor Version 6.6 rev. 131111 (6.6 Update-3). Als Ergebnis dieses Problems besteht eine Seite, die Werte aus den Feldern Einzeiliger Text und Links ausgibt, nicht die W3C-Markup-Validierung.

Laut Sitecore CMS Release Notes wurde dieses Problem seit Sitecore CMS 6.6 rev. behoben. 131111 (aka Update-3)

Layouts und Renderings

  • Die Pipeline hat kein HTML Codieren Sie den Feldwert beim Rendern einzeiliger Textfelder und Verknüpfungsfelder (327905) Hinweis: Codierung des Feldwerts beim Rendern Linkfelder hatten unbeabsichtigte Nebenwirkungen. Das Feld Der Wert für Linkfelder wird daher nicht mehr in 6.6 Update-5 codiert und später (Ref. Nr. 382059). [Hinzugefügt am 17. April 2013]
  • Die LinkRenderer-Klasse hat den Wert des title-Attributs nicht codiert beim Rendern von Linkfeldern. (327905, 347361) [Aktualisiert am 15. Januar, 2014]

Dann wurde es seit Sitecore CMS 6.6.0 rev verbessert. 130404 (aka Update-5)

Layouts und Renderings

  • In 6.6 Update-3 wurde die Pipeline in HTML geändert, um den Feldwert beim Rendern von Verknüpfungsfeldern zu codieren (Ref. Nr. 327905). Dies hat unbeabsichtigte Nebenwirkungen, zum Beispiel beim Einbetten von IMGs in ein Link-Feld. Der Feldwert für Linkfelder wird daher nicht mehr in 6.6 Update-5 und höher codiert. (382059)

Und seit CMS 6.6.0 rev. 130529 (aka Service Pack-1)

Seiteneditor

  • In 6.6 Update-3 wurde die Pipeline beim Rendern von einzeiligen Textfeldern (Ref. Nr. 327905) in HTML-Code umgewandelt, um den Feldwert zu codieren. Dies hat im Seiteneditor, der den codierten Wert angezeigt hat, nicht richtig funktioniert. Und wenn der Benutzer die Seite speichert, wird der bereits codierte Wert erneut HTML-codiert. (384997)

Ab Version 6.6 rev. 131111 (6.6 Update-3) und höher Sitecore CMS HTML codiert den Wert der Felder Single-Line Text und Links mit dem HttpUtility.HtmlEncode Methode.

Die Änderungen wurden sowohl im Prozessor GetTextValue als auch in der Klasse Sitecore.Xml.Xsl.LinkRenderer eingeführt.

%Vor%
  

Sie können mit dem Support in Kontakt treten, sie kennen das Problem und   habe eine Lösung verfügbar. Sie sollten nach Sitecore.Support.381846.dll fragen

Die Sitecore.Support.381846-Assembly hat den GetTextFieldValue -Prozessor geändert, wobei die folgende Codezeile fehlt.

%Vor%

Diese "Korrektur" bringt nur das alte Verhalten für das Feld einzeiliger Text . Mit anderen Worten, es führt das alte Problem mit der Referenznummer # 327905 ein (siehe oben für Details).

Warum ist in meiner Sitecore-Lösung nach dem Upgrade auf Sitecore CMS 6.6 Update-3 und höher alles kaputt? Weil Sie das Feld einzeiliger Text falsch verwenden. Dieser Feldtyp soll kein HTML oder JavaScript speichern. Dies ist ein Inhaltsfeldtyp zum Speichern des Inhaltswerts. Wenn Sie HTML-Markup und JavaScript in Ihren Inhaltsfeldern speichern, bedeutet dies, dass Sie nicht der bewährten Vorgehensweise von Sitecore folgen.

Zusammenfassung:

  1. Es gibt kein Problem mit der Referenznummer # 381846 (Sitecore.Support.381846.dll) in Sitecore CMS.
  2. Das aktuelle Problem # 327905 wurde seit Sitecore CMS 6.6 Update-3 behoben.
  3. Sitecore-HTML-codierte einzeilige Text und Links Feldtypen.
  4. Speichern Sie keine HTML- und Java-Skripte oder andere präsentationsbezogene Metadaten in Inhaltsfeldern wie einzeiliger Text . Andernfalls besteht eine große Chance, dass ein Inhalts-Editor vollständig durchbrochen werden kann Seitenpräsentation, wenn Sie Ihr HTML / JavaScript fälschlicherweise in Single-Line Text ändern Feld.
  5. Der Inhalt und seine Darstellung müssen aufgeteilt und getrennt gespeichert werden.

Ich hoffe, dies hilft, um es klar zu machen.

Beste Wünsche, Oleg Burov

Update-1:

Sitecore CMS und DMS 7.2 rev. 141226 (aka 7.2 Update-3) hat die Einstellung Rendering.HtmlEncodedFieldTypes in der Datei Web.config eingeführt, die eine durch Pipes getrennte Liste von Feldtypen angibt, die beim Rendern durch die <renderField> -Pipeline HTML-codiert werden sollen.

%Vor%

Jetzt können Sie steuern, welche Sitecore-Feldtypen HTML-codiert sein sollen oder nicht.

    
Oleg Burov 06.05.2014 23:24
quelle
3

Beim Upgrade von Sitecore 6.5 auf 7.0 hatten wir das gleiche Problem. Es scheint einen Fehler im FieldRenderer zu geben, der das Rendern von HTML-Tags verhindert. Sie können Kontakt mit dem Support aufnehmen, sie kennen das Problem und haben eine Lösung verfügbar.

Sie sollten nach Sitecore.Support.381846.dll fragen, das wie folgt integriert werden muss:

Ersetzen Sie diese Zeile in web.config

%Vor%

Mit diesem

%Vor%

Hoffe, das hilft.

    
b3n 13.01.2014 01:33
quelle
0

Wir hatten dieses Problem und haben diesen Beitrag gefunden. Wir haben uns entschieden, damit umzugehen, indem wir direkt zur Datenbank gehen und die einzelnen Textfelder mit nbsp und amp aktualisieren, wo unsere primären Problembereiche sind, die Schritte können für jedes codierte Zeichen, das Sie bearbeiten, wiederholt werden. Wir haben uns entschieden, die Linkfelder manuell zu bearbeiten.

Wenn Sie die Ersetzung sowohl im Master als auch im Web ausführen, können Sie eine erneute Veröffentlichung der Felder auslassen.

Grüße Jan

SELECT TOP 18000 * VON [uat_Sitecore_master_new]. [dbo]. [VersionedFields] wo (Wert wie '% & amp;%;%')   und FieldId in (SELECT ItemId FROM SharedFields, wobei Wert wie 'Single-Line Text')   --und FieldId in (SELECT ItemId FROM SharedFields, wobei Value wie 'General Link')

/ * FINDEN ALLE EINZELNEN TEXTFELDER MIT NBSP / SELECT Ersetzen (Wert, '', ''), VON [uat_Sitecore_master_new]. [Dbo]. [VersionedFields] wo (Wert wie '%%')   und FieldId in (SELECT ItemId FROM SharedFields, wo Wert wie 'Single-Line Text')

/ * ERSETZEN VON NBSP IN einzeiligen Textfeldern * / UPDATE [uat_Sitecore_master_new]. [Dbo]. [VersionedFields] SET Wert = Ersetzen (Wert, '', '') wo (Wert wie '%%')   und FieldId in (SELECT ItemId FROM SharedFields, wo Wert wie 'Single-Line Text')

UPDATE [uat_Sitecore_web_neu]. [dbo]. [VersionedFields] SET Wert = Ersetzen (Wert, '', '') wo (Wert wie '%%')   und FieldId in (SELECT ItemId FROM SharedFields, wo Wert wie 'Single-Line Text')

/ * FINDEN ALLE EINZELNEN TEXTFELDER MIT AMP /
SELECT Ersetzen (Wert, '& amp;', '& amp;'),
FROM [uat_Sitecore_master_new]. [Dbo]. [VersionedFields] wo (Wert wie '% & amp;%')   und FieldId in (SELECT ItemId FROM SharedFields, wo Wert wie 'Single-Line Text')

/ * ERSETZEN SIE AMP IN einzeiligen Textfeldern * /
UPDATE [uat_Sitecore_master_new]. [Dbo]. [VersionedFields] SET Wert = Ersetzen (Wert, '& am;', '& am;') wo (Wert wie '% & amp;%')   und FieldId in (SELECT ItemId FROM SharedFields, wo Wert wie 'Single-Line Text')

UPDATE [uat_Sitecore_web_neu]. [dbo]. [VersionedFields] SET Wert = Ersetzen (Wert, '& amp;', '& amp;') wo (Wert wie '% & amp;%')   und FieldId in (SELECT ItemId FROM SharedFields, wo Wert wie 'Single-Line Text')

/ * FINDEN ALLE EINZELNEN TEXTFELDER MIT '' /
SELECT Ersetzen (Wert, '' ',' '' '),
VON [uat_Sitecore_master_new]. [Dbo]. [VersionsFields] wo (Wert wie'% '%')   und FieldId in (SELECT ItemId FROM SharedFields, wo Wert wie 'Single-Line Text')

/ * REPLACE '' in einzeiligen Textfeldern * /
UPDATE [uat_Sitecore_master_new]. [Dbo]. [VersionedFields] SET Wert = Ersetzen (Wert, '' ',' '' ') wo (Wert wie'% '%')   und FieldId in (SELECT ItemId FROM SharedFields, wo Wert wie 'Single-Line Text')

UPDATE [uat_Sitecore_web_new]. [dbo]. [VersionedFields] SET Wert = Ersetzen (Wert, '' ',' '' ') wo (Wert wie'% '%')   und FieldId in (SELECT ItemId FROM SharedFields, wo Wert wie 'Single-Line Text')

/ * FINDEN SIE ALLE EINZELNEN TEXTFELDER MIT "" /
SELECT Ersetzen (Wert, '' ',' '' '),
VON [uat_Sitecore_master_new]. [Dbo]. [VersionedFields] wo (Wert wie'% "%)   und FieldId in (SELECT ItemId FROM SharedFields, wo Wert wie 'Single-Line Text')

/ * REPLACE "" in einzeiligen Textfeldern * /
UPDATE [uat_Sitecore_master_new]. [Dbo]. [VersionedFields] SET Wert = Ersetzen (Wert, '' ',' '') wo (Wert wie '% "%')   und FieldId in (SELECT ItemId FROM SharedFields, wo Wert wie 'Single-Line Text')

UPDATE [uat_Sitecore_web_new]. [dbo]. [VersionedFields] SET Wert = Ersetzen (Wert, '' ',' '') wo (Wert wie '% "%')   und FieldId in (SELECT ItemId FROM SharedFields, wo Wert wie 'Single-Line Text')

    
Jan Hebnes 11.06.2014 10:49
quelle

Tags und Links