コンポーネントがコンポーネントプレゼンテーションとしてページにある場合は、コンポーネントリンクを使用してコンポーネントを見つけてみませんか?コンポーネントのURIをWeb.Configに保存します。これが最も簡単な場合は、次のようなものを使用します。
const string currentPageId = "tcm:6-123-64";
TcmUri itemUri = new TcmUri(ConfigurationManager.AppSettings["MyLoginComponent"]);
ComponentLink componentLink = new ComponentLink(itemUri.PublicationId);
string loginUrl =
componentLink.GetLink(currentPageId, itemUri.ToString(), "tcm:0-0-0", "", "",
false, false).Url;
TBBを使用して公開時にこれを見つけたい場合は、次のようにします。
RepositoryLocalObject context = null;
if (package.GetByName(Package.ComponentName) == null)
context = (RepositoryLocalObject)engine.GetObject(
package.GetByName(Package.ComponentName));
else
context = (RepositoryLocalObject)engine.GetObject(
package.GetByName(Package.ComponentName));
Repository contextPublication = context.ContextRepository;
if (contextPublication.Metadata == null) return;
ItemFields metadata =
new ItemFields(contextPublication.Metadata, contextPublication.MetadataSchema);
if (!metadata.Contains("MyLoginComponentField")) return;
ComponentLinkField myLoginComponentField = (ComponentLinkField)metadata["MyLoginComponentField"];
Component loginTarget = myLoginComponentField.Value;
UsingItemsFilter filter = new UsingItemsFilter(engine.GetSession())
{
InRepository = contextPublication,
ItemTypes = new[] {ItemType.Page}
};
foreach (Page page in component.GetUsingItems(filter))
{
string url = page.PublishLocationUrl;
}
コンポーネントが複数のページで使用されている場合、これにはリストの最後のページへのURLが含まれます-そうでないことを確認してください...コードで適切に処理できたはずですが、すべきではないと思いました宿題を全部やらないで。