[Sitecore][ライブラリ]Sitecore.StringUtilクラスにある便利な関数を見てみる

よくアイテムの紹介が長くなる場合にそれを一定の長さにして最後に”…”を追加する場合あります。同僚のコードを見たらsubstringをつかって長さを制限し、最後に”…”を追加しています。これはサイトコアのSitecore.StringUtilクラスにすでにあります。案外それを使われていないようです。 ここでよく使われているいつくかをリストします。 StringUtil.Clip(string text, int length, bool ellipsis) 指定した位置でのテキストをクリップし、指定によって、…省略記号を追加します。 string s0 = StringUtil.Clip(“Hello world”, 5, false); // “Hello” string s1 = StringUtil.Clip(“Hello world”, 5, true); //”He…” StringUtil.Capitalize(string text) 最初の文字を大文字にします。 string text = MainUtil.Capitalize(“HELLO WORLD.”); // “Hello world” string text = MainUtil.Capitalize(“HELLO. HOW ARE YOU?”); // “Hello. how are you?” URL関連 EnsurePostfix(char postfix, string value) 文字列が特定のPostfixを持っていることを保証します。 EnsurePrefix(char prefix, […]

[sitecore][database][performance]データベースのクリーニング

概要:データベースのクリーニングについてのメモ書きです。 どのサイトを公開する前また公開後に定期的にパフォーマンスチューニングを行います。ここに私はよく使うドキュメントのショットカットやよく使う手順をクイックメモ書きの感じでまとめてみました。パフォーマンスチューニングする際に欠かせないのはこのCMS パフォーマンスチューニングガイドです。 サイトコア 言語 Sitecore CMS 6.0 – 6.4 日本語 Sitecore CMS 6.0-6.6 英語 Sitecore CMS 7.0 以降 日本語 *日本語6.0-6.6のバージョンが見つからなかった。 1.SQL Server インデックスの断片化レベルのチェック 2.SQL Server メンテナンス プランのチェックメンテナンス プランがスケジュール通りに実行されていたかどうかを確認する。   使用するサーバによってインデックス再構築がキープできない場合はインデックスの再構築をサイトへのアクセスの低い時間帯にて行います。   3. サイトコアにてリンクデータベースを再構築し、データベースをクリーンアップします。 4. 検索インデックスを再構築します。  環境設定にもよりますが、もし、CMまたCDサーバーにて、検索の結果が一致しない場合、インデックスのファイルが破壊いている可能性があるので、CDサーバー上にあるファイルを一度削除して、再構築します。    *CD サーバー上MASTERデーターベースがない場合は下記のいくつかの方法でインデックスを再構築します。 CD サーバー上にMasterデータベースの接続がある場合サイトコアログインし、インデックスビューアにて再構築します。 CD サーバー上にMasterデータベースの接続がない場合 A:サイトコアサポートツールボックスを使用するインデックスを再構築します。 B: サイトコアサポートツールボックスを使用せず、このファイルスクリプト(Alex Shyba さんが書いたもの)    ここからダウンロードして、使用しでもいい。 C: コンソールアップを作って、CM上にあるインデックスファイルをCDへコピーします。これをスケジュールで毎晩同期します。 サイトコア7以降の場合はJhonWestさんのこのブログを参照してください。 Sitecoreの7:インデックスの更新戦略また、Sitecoreの検索と […]

[sitecore][datasource]コールアウトデータソースの継続

概要:コールアウトに使われるデータソースの継続についてのメモ書きです。   サイトの構築の際にコールアウトがよく使われます。 特定のページに同じコールアウトのサブレイアウトを使用し、データソースを変えたりするにはSitecoreのルールエンジンおよびコンディションによってレンダリング レンダリングのデータソースを設定したりします。ただ実際にこのルールエンジンを使うお客さんこれまでの作業でそれほど多くない。 よく、お客さんから、デフォルトのコールアウトを設定しれくれという要求があります。たとえば、サービスーというサイトコアのフォルトがあり、その下数重レベルのサブアイテムフォルダがあって、さらにその下に数千のアイテムがあります。スタンダード値にてデフォルトのデータソースを設定する方法もありますが、もし、既存アイテムにデーターソースがない場合は、もっとも近いアンセスターのアイテムのデーターソースを使用という方法があります。もし、近いアンセスターがデーターソースが設定されていないなら、ツリーを従って上の方へ繰り返しでデーターソースを探します。 コールアウトのデータソースの取得もGoogleで検索を書けば下記のように簡単に取得することができます。 Sublayout sublayout = this.Parent as Sublayout; if (sublayout != null) { Item item = Sitecore.Context.Database.GetItem(sublayout.DataSource); } ただ、レンダリングにてデーターソースを取得する記事があまり見つからなかったので、それをついて書いてみようと思った。 まず、下準備します。 1.三つのページと三つのコールアウトを用意します。 2.それぞれのページにそれぞれのデータソースを指定します。 3.ページを表示します。 ここで、もし、Levle3のデーターソースを削除します。 Level3のページにて、コールアウトが最も近いアンセスターがデーターソースが設定されているかどうかを確認し、この場合Level2にてデータースースが設定されているので、それを使用します。 もし、Level2もデーターソースが設定されていない場合、 Level3のページにて、コールアウトが最も近いアンセスターがデーターソースが設定されていないので、引き続き上のアイテムを確認し、 この場合Level1にてデータースースが設定されているので、それを使用します。 さて、コードを見てみましょう。 Callout.ascx <%@ Control Language=”c#” AutoEventWireup=”true” TargetSchema=”http://schemas.microsoft.com/intellisense/ie5″ Inherits=”local.sandbox.com.callout.CalloutSublayout” CodeBehind=”Callout.ascx.cs” %> <%@ Register TagPrefix=”sc” Namespace=”Sitecore.Web.UI.WebControls” Assembly=”Sitecore.Kernel” %> <asp:Panel ID=”pnlCallout” runat=”server” CssClass=”callout”> <div class=”reg-callout”> […]

[Sitecore][svg]SVG イメージの使用

最近のサイトがすべてレスポンシブWEBデザインとなったことでファイルを使用するようになりました。ファイルをメディアライブラリへ追加するには下記のメディアタイプを追加する必要があります。これはそのメモ書きです。 SVGのイメージファイルをメディアライブラリにて追加すると下記のように表示されません。 Web.Configにて下記をメディアタイプを追加すればいいです。 <mediatype name=”SVG image” extensions=”svg”> <mimetype>image/svg+xml</mimetype> <forcedownload>false</forcedownload> <sharedtemplate>system/media/unversioned/image</sharedtemplate> <versionedtemplate>system/media/versioned/image</versionedtemplate> <mediavalidator type=”Sitecore.Resources.Media.ImageValidator”></mediavalidator> <thumbnails> <generator type=”Sitecore.Resources.Media.ImageThumbnailGenerator, Sitecore.Kernel”> <extension>png</extension> </generator> <width>150</width> <height>150</height> <backgroundcolor>#FFFFFF</backgroundcolor> </thumbnails> </mediatype> <setting name=”ImageTypes” value=”|gif|jpg|png|svg|” /> *\App_Data\MediaCacheをクリアします。 *MIME Types has SVG *AppRecycle or IISRESET 再度イメージをアップロードします。 *注意ししてほしいのはIE8はSVGをサポートしていません。 参考サイト: http://stackoverflow.com/questions/9353798/svg-support-for-internet-explorer-8-and-below http://stackoverflow.com/questions/1427051/how-to-make-svg-work-with-ie http://www.freewaytalk.net/thread/view/130622

[Sitecore] サイトコアのサイトにHTMLページの表示

概要:既存のHTMLページをサイトコアのサイトに表示させる方法のメモ書きです。 よくお客さんの要求で、既存のHTMLページを表示されたいという要求があります。 たとえば、下記のサンプルのHTMLページがあります。 お客さんがHTMLのページをメディアライブラリにてファイルとして追加します。 そして、コンテントにてリンクとして追加します。ただ、リンクをクリックすると、ページが表示される代わりにダウンロードされてします。   これはダウンロードせず、ページを表示させるようにする設定のメモ書きです。 Web.ConfigのmediaTypeをみれはforceDownloadという設定があります。 これをFalseに設定すればダウンロードせず、ページが表示されます。 HTMLだけではなく、PDFやイメージなどメディアタイプによって設定すればいいです。   今回の場合は”htm,html”の設定をすればいい。 1. /app_config/mimeType.xmlにて下記の設定を更新。 <mediaType extensions=”htm,html,stm”> <mimeType>text/html</mimeType> <forceDownload>false</forceDownload> </mediaType> 2./app_data/mediaCache にて、キャッシングをクリアします。 再度リンクをクリックすれば、ダウンロードせず、ページが表示されます。 もし特定なメディアタイプの設定をコードでしたいなら、MediaRequestHandler をカスタマイズすればいい。ここにサンプルコードがあります。

[Sitecore][Publishing]パブリッシングのメモ書き

よくパブリッシュの違いについて聞かれたことがあります。今日パブリッシュについて簡単にメモ書きとして書きます。 パブリッシュモード 1. インクリメンタルパブリッシュ(PublishMode.Incremental) 速度: ロジック:パブリッシング·キューからターゲットのデーターベースへパブリッシュ メモ:CMSユーザー·インタフェースをにて行った変更やコードでの変更なが発生する倍、その変更がパブリッシング·キューへ追加されます。ワークフローに関連付けられたアイテムが最終的なワークフローの状態に到達したときにそれらが発行キューに追加される。インクリメンタルパブリッシュはターゲットのデーターバースへ適切なバージョンをコピーします。SQLのdbo.PublishQueueテーブルにてまた、サイトコアロックを使っている場合はツール→パブリッシング→パブリッシング·キューにて一覧を見れます。   2. スマートパブリッシュ(PublishMode.Smart) 速度:   ロジック:マースターデーターベースとターゲットのデーターベースの比較 メモ:マースターデーターベースとターゲットのデーターベースの比較して、変更したアイテムのみパブリッシュします。Sitecoreのアイテムは、内部リビジョン識別子があります。アイテムに変更があった場合、それは更新され、スマートパブリッシュはこの内部リビジョン識別子を比較して、変更したアイテムのみパブリッシュ   3. りパブリッシュ(Publish.Full) 速度: ロジック:マースターデーターベースからターゲットのデーターベースへと比較せず、パブリッシュします。ターゲット·データベース内のすべてのアイテムが上書きされます。 メモ:マースターデーターベースからターゲットのデーターベースへと比較せず、パブリッシュするので一番時間が掛かります。.マスターデータベースのバックアップからの復元や、通常のパブリッシュが正常に終了しない場合使います。   知ると便利なツール:  アドバンスパブリッシュダイアログ, また [詳細とビデオデモ(英語)] 多数の編集者が同時に作業をする際によくパブリッシュが途中で止まってしますことがあります。Apppoolのリセットをしたりしざるえない時があります。その際にこのアドバンスパブリッシュダイアログが便利です。実行中のパブリッシュのタスクをキャンセルすることができます。   余談ですが、この前これをみて、サイトコア7.2から関連するアイテムをパブリッシュのオプションがあります。 手元の二つのプロジェクトはいまだに6.6ですので、この機能は待つ扱えないけど、これはサイトコアロックのアイテムと依存するアイテムのパブリッシュと同じ機能かどうはは不明です。時間を探して、両方を比較してみたいです。 いずれにせよ、これまでの経験からこの機能は本当に便利だと思うのは下記ケースです。 1. 例えばアイテムに関連付けられていたもの、(レイアウト、sublayouts、テンプレート)をパブリッシュするのを忘れてもかまいません。 2.イベントの使用で例えばOnsaveイベントで関連するアイテムを事前パブリッシュしなくでもよい。 3.インポートの作業で、関連されている、リフェレンスアイテムを事前パブリッシュしなくでもよい。  

[Sitecore][Version]以前のバージョンへ戻る(2)

この前、特定のアイテムバージョンへ戻るについて書いたのですが、昨日プロジェクトマネージャンから、誤ってパブリッシュしたバージョンを以前のバージョンを戻したいけどどうしたらいいと言われた。それはパブリッシュ制限でやればいいと答えたら、見せてと言われた。これは確かにサイトコアのリフェレンスに有ったような気がしますがそのリフェレンスをみつけませんでした。メモ書きとして簡単に書きます。 例えば誤って新しいバージョンをパブリッシュしてしまった場合、 masterデータベースにて、パブリッシュしたくないバージョンの”パブリッシュ可能”のチェックをはずせばいい。 代わりにバージョン1がパブリッシュされますと通知されます。 ここでパブリッシュすれば、バージョン2がWebから消されます。 もしコードでパブリッシュ制限する場合は、John Westさんのこの記事にて、制御可能の フィールドの一覧が有ります。必要に応じて、フィールドを設定すればいい。

[Sitecore][Publishing]パブリッシュターゲットを指定 2

これは前回に話の続きになりますが、確かに.新しいアイテムが投稿してから、“Approve QA”にて、QAのみへのパブリッシュすることができたものの、ワークボックスにてどのアイテムがすでQAへパブリッシュしたのかという状態を見ることができなかった。またアイテムパブリッシュウィザードにて、LIVEがチェックした場合はアイテムがパブリッシュしてしまうのはよくない。 以前Alex Shybaさんがこれに関して書いた記事があったので、それをもとに更新をしてみました。 要するに、クラスSitecore.Workflows.Simple.Workflow がすべてのパブリッシュをするさいにメソッドIsApprovedが呼ばれます。それは最終状態であるかどうかを確認しているわけ。これを使って、QAとしてチェックされた場合はQAへのみパブリッシュするわけです さて、更新して見ましょう。 1. 下記のコードを追加 PublishActionHelper.cs [css]using System; using System.Collections.Generic; using Sitecore; using Sitecore.Configuration; using Sitecore.Data; using Sitecore.Data.Fields; using Sitecore.Data.Items; namespace local.sandbox.com.Website.Sitecore_Extensions.WorkFlow { public class PublishActionHelper { public static Database Db { get { return Context.ContentDatabase jQuery15207326018577441573_1394509328988 Context.Database jQuery15206563363645691425_1394509721497 Factory.GetDatabase("master"); } } public static string GetFieldValue(Item item, string fieldName) { return item[fieldName] […]

[Sitecore][Publishing]自動パブリッシュ アクション

前回の話しの延長になりますが、サンプルワークフローを基にワークフロー作成した際に子アイテムをパブリッシュするかどうかを指定する ‘deep’ パラメーターが1となっている。 http://sdn.sitecore.net/upload/sitecore6/japanese%20references/workflow_reference_sc62_jp.pdf これはお客さんによって問題となることがあります。たとえば、お客さんがホームアイテムをよく更新します。毎回編集する際に新しいバージョンが作成され、ワークフローで承認されると、サブアイテムがパブリッシュされてしまいます。 子をパブリッシュする予定がないのに、知らずにパブリッシュすると問題が引き起こす可能性があります。たとえば、パブリッシュしたくないアイテムがパブリッシュされたり、また多くの更新が非番に更新され、 インディクックが更新され、サイトの速度が落とされたりします。必要に応じてこれを設定すべきで、ディフォルトを0にすることをお勧めします。

[Sitecore][Publishing][Publishing Target]パブリッシュターゲットを指定 1

題名のようにワークフロー特定のパブリッシュターゲットへのパブリッシュする方法を紹介します。 編集者が新しいアイテムを作成してから、通常何らかのワークフローが設定を使ってパブリッシュターゲットへ公開されていきます。今回サイトコアからディフォルトでついてくるワークフローを例にして、特定のパブリッシュターゲットを指定する例説明します。アイテムが作成され、投稿し、承認されてから、オートパブリッシュでパブリッシュされるわけですが、ただ、たとえば、複数のパブリッシュターゲットがあるとします。 この場合はQAとLiveの二つのパブリッシュターゲットが有る場合、両方へとパブリッシュします。 Sitecore.Workflows.Simple.PublishActionが既存のすべてのパブリッシュターゲットへパブリッシュします。 時にはお客さんがQAだけへとパブリッシュしたいという時にカスタムなパブリッシュアクションを作る例を説明したいです。 1. まず下準備します。特定なパブリッシュターゲットを指定できるように、既存の /sitecore/templates/System/Workflow/Action にてフィールドを追加しましょう。 2.コードを追加 [css] using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sitecore.Configuration; using Sitecore.Data; using Sitecore.Data.Items; using Sitecore.Diagnostics; using Sitecore.Globalization; using Sitecore.Publishing; using Sitecore.SecurityModel; using Sitecore.Web; using Sitecore.Workflows.Simple; namespace local.sandbox.com.Website.Sitecore_Extensions.Publishing { public class CustomPublishAction { // Methods private bool GetDeep(Item actionItem) { return ((actionItem["deep"] == "1") || (WebUtil.ParseUrlParameters(actionItem["parameters"])["deep"] […]