7

Tridion 2012 UI/XM を使用してページを管理することを目的としたサイトの機能設計をまとめています。ページには 2 つの領域があり、左側にメイン コンテンツ領域、右側にサイドバーがあります。理想的には、ユーザーがコンテンツをこれらの領域内および領域内にドラッグ アンド ドロップできる必要があります。理想的な世界では、次の線に沿って地域を定義したいと思います

  • サイド バー: CT に「右」というテキストが含まれる CP。
  • メイン: その他すべての CP

ドキュメントを見ると、 CT/スキーマ ID ペアを明示的に使用して領域を定義する必要があるようです。他の方法でこれを行う可能性はありますか?

少なくとも、サイド バーで CT/スキーマ ID ペアの特定の固定セットを許可し、メイン リージョンをキャッチオール バケットとして定義できるようにしたいと考えています。これは可能ですか?

サイドバーが広告の上と下の 2 つの領域に分割されることも可能です。両方の地域で同じタイプの CP を許可する必要があります - 私が理解している限り、これは不可能です - これは正しいですか? 回避策のアイデアはありますか?

4

2 に答える 2

5

すべてのコンテンツ タイプを受け取るリージョンを構成するには、Publication AppData を取得し、コンテンツ タイプをループして、これを有効にするための json マークアップを作成する必要があります。 CT レベルのメタデータ。これにより、どのリージョンに入るかが決まり、Region JSON マークアップが作成されます。

以下は、1 つのリージョンに追加するすべてのコンポーネント タイプを取得するためのスニペットです。テンプレート名を確認するだけでロジックを変更できます。

 // get the publication from the engine -- using TemplateBase Util..

    Publication thisPub = GetPublication();

    XmlElement seAppdata = thisPub.LoadApplicationData("SiteEdit").GetAs<XmlElement>();

    XmlNamespaceManager seNsMgr = new XmlNamespaceManager(new NameTable());
    seNsMgr.AddNamespace("se", "http://www.sdltridion.com/2011/SiteEdit");
    seNsMgr.AddNamespace("xlink", "http://www.w3.org/1999/xlink");

    XmlNodeList contentTypes = (XmlNodeList)seAppdata.SelectNodes("//se:ContentTypes/se:ContentType", seNsMgr); 

    List<String> contentTypeJson = new List<String>();
    foreach (XmlNode contentType in contentTypes)
    {
        string templateId = contentType.SelectSingleNode("se:ComponentTemplate/@xlink:href", seNsMgr).Value;
        string componentId = contentType.SelectSingleNode("se:Component/@xlink:href", seNsMgr).Value;

        Component thisSchema = (Component)engine.GetObject(componentId);
        string schemaId = thisSchema.Schema.Id;

        // Add json formated string for Content Types
        contentTypeJson.Add(string.Format("{{schema: \"{0}\", template: \"{1}\"}}", schemaId, templateId));
    }

    // Final Markup - JSON
     String allRegionSeText = string.Format("<!-- Start Region: {{title: \"All Region\",  allowedComponentTypes: [{0}],  minOccurs: 1,  maxOccurs: 5 }} -->", string.Join(",", contentTypeJson.ToArray()));

     // Push to the package to use in DWT..
     package.PushItem("ALL_REGION", package.CreateStringItem(ContentType.Text, allRegionSeText));

お役に立てれば。

于 2012-10-16T17:14:30.007 に答える
1

CT/スキーマのペアを指定せずにリージョンを作成しようとしましたか? 初期の実装で、領域が適切に構成されていなかった (またはまったく構成されていなかった) ため、コンテンツ タイプをどこにでもドロップできることがわかったのを覚えています。

于 2012-10-16T16:10:57.223 に答える