2016-06-17 1 views
0

コンポジットC1は、サイトとページのツリーをコンテンツパースペクティブで表示するときにページタイトルプロパティをノードラベルとして使用します。これは、特にページが異なる文化に翻訳されている場合は、常に快適なわけではないので、あなたはそれらのタイトルを読んでも、あなたが探しているページをすばやく見つけることはできません。 アイデアはUrlTitleをラベルとして使用することで、すべてのツリーノードがページURLの一部を表すようになります。 下記の解決策をご覧ください。複合C1:タイトル(解決策)の代わりにUrlTitleを表示するページツリーを作成する方法

+0

ページを翻訳するときには、URLもローカライズする必要があります。また、urlもその言語で人間が読めるようにする必要があります。 –

+0

@PauliØsterø、私はあなたが話していることを知っていると思います。サイトのローカリゼーションでのあなたの経験は何ですか?どの言語をURLに翻訳しましたか? – JustAndrei

+0

@PauliØsterø、フランス語、ドイツ語、イタリア語、スペイン語、トルコ語、ロシア語、アラビア語の経験があります。 ロシア語とアラビア語で人間が判読できるURLを作ることは難しいですが、そのabcsはラテン語に基づいていません。しかし、フランス語、ドイツ語、スペイン語のようなヨーロッパの言語でさえ、ASCIIには存在しない特定の文字があります:ç、ß、ñなど URLを読みやすくするにはどうすればよいですか? – JustAndrei

答えて

0

私はアセンブリを再コンパイルしたくないので、私のハックは醜いですが、javascriptとaspxにのみ影響します。

  1. 編集/Composite/scripts/compressed/top.js

    そこSystemTreeNodeBinding.prototype.onBindingAttach=function(){を見つけ、この関数の先頭に次のコードを挿入:それが表示される前に

    if(window.treeNodeProcessor)window.treeNodeProcessor(this.node); 
    

    は今、あなたは、ツリーのノードを変更することができます。グローバル関数treeNodeProcessorを作成するだけです。

  2. 編集/Composite/top.aspx(top.aspx.csも影響を受けますので、一緒に保存してください)。 head要素の終わりに

    はあなたのJavaScriptを追加します。

    <script type="text/javascript"> 
        function byKey(key) { 
         return function(p) { 
          return p.Key == key; 
         } 
        } 
    
        window.treeNodeTitles = { 
    <% WriteTreeNodeTitles(); %> 
         "": "" 
        }; 
    
        window.treeNodeProcessor = function(node) { 
         if(node._data.PropertyBag) { 
          var uri = node._data.PropertyBag.find(byKey('Uri')).Value; 
          node._data.Label = window.treeNodeTitles[uri] || node._data.Label; 
         } 
        } 
    
    </script> 
    

    は残念ながら、treeNodeProcessorに渡されたnodeオブジェクトにはUrlTitleありません。しかし、すべてのページnodeは、キーウリの下で〜/ページ(a9d30645-02f7-4412-bd4e-6f3a02782481)のような値を格納するPropertyBagを持っています。したがって、UrlTitleを独自にクエリする必要があります。これは、メソッドWriteTreeNodeTitles(以下を参照)で行われます。

  3. 編集/Composite/top.aspx.cs。だから、今、あなたのtop.aspxは、ページのマッピングのGUIDのような含まれてい

    using System.Linq; 
    using Composite.Data; 
    using Composite.Data.Types; 
    

:あなたはもちろん、いくつかのusingsを追加する必要が

protected void WriteTreeNodeTitles() 
{ 
    using (var conn = new DataConnection()) 
    { 
     foreach(string line in conn.Get<IPage>().Select(p => "   \"~/page(" + p.Id.ToString().ToLower() + ")\": \"" + p.UrlTitle + "\",\r\n")) 
     { 
      Response.Write(line); 
     } 
    } 
} 

新しいメソッドを追加します。 UrlTitlesへのURL、およびそのマッピングを使用してページツリーを変更するtreeNodeProcessor関数が含まれています。

+0

確かに非常に醜い。製品の変更を真剣に検討している場合は、リポジトリをフォークし、文書化された方法で変更を維持する必要があります。これはアップグレード時に保存することができます。 –

+0

それはちょうど(私の)時間の問題です。あなたが描いた方法は明らかに正しいものですが、私はそうではありません。私には15分かかりますが、あなたの時間は私が今は自分では余裕がありません。 – JustAndrei

関連する問題