5

プロジェクトでISAPI書き換えを使用していますが、Tridionから.htaccessファイルを公開できるかどうか知りたいですか?

拡張子が.htaccessのページテンプレートを作成しようとしましたが、名前のないページを作成できません。

何か案は?

C#TBBを使用してページ名を変更できますか?

4

2 に答える 2

3

マルチメディアコンポーネントを使用して.htaccessを保存できると思います。名前のないファイルをアップロードできない場合でも(Windowsの制限)、BinaryContent.Filenameマルチメディアコンポーネントのプロパティを変更することで、後でファイル名を変更できます。次に、このコンポーネントを個別に公開するかAddBinary、テンプレートの1つでメソッドを使用できます。

他のルールを変更できるユーザースキーマもあります: "\ Tridion \ bin \ cm_xml_usr.xsd"が、空のファイル名を許可することはできません

于 2012-04-13T11:09:18.807 に答える
3

これを実現するためにバイナリを使用することも選択しますが、マルチメディアコンポーネントとしてではなく、テキストを使用してhtaccessファイルを管理する場合は、次の手法を使用してバイナリをパッケージにプッシュできます。

1)Htaccessファイルのテキストをアクセシブルな名前(つまりBinary_Text)でパッケージにプッシュします。2)次のようなコードを使用して、変数のテキストからテキストファイルを作成し、パッケージに追加します。

class publishStringItemAsBinary : ITemplate
{
    public void Transform(Engine engine, Package package)
    {
        TemplatingLogger log = TemplatingLogger.GetLogger(typeof(publishStringItemAsBinary));
        TemplateUtilities utils = new TemplateUtilities();
        System.IO.Stream inputStream = null;
        try
        {
            string strInputName = package.GetValue("InputItem");
            string strFileName = package.GetValue("strFileName");
            string sg_Destination = package.GetValue("sg_Destination");
            string itemComponent = package.GetValue("mm_Component");

            inputStream = new MemoryStream(Encoding.UTF8.GetBytes(package.GetValue(strInputName)));

            log.Debug("InputObject:" + strInputName);
            log.Debug("Filename for binary:" + strFileName);
            log.Debug("Destination StructureGroup:" + sg_Destination);
            Publication contextPub = utils.getPublicationFromContext(package, engine);
            TcmUri uriLocalSG = TemplateUtilities.getLocalUri(new TcmUri(contextPub.Id), new TcmUri(sg_Destination));
            TcmUri uriLocalMMComp = TemplateUtilities.getLocalUri(new TcmUri(contextPub.Id), new TcmUri(itemComponent));
            StructureGroup sg = (StructureGroup)engine.GetObject(uriLocalSG);
            Component comp = (Component)engine.GetObject(uriLocalMMComp);
            String sBinaryPath = engine.PublishingContext.RenderedItem.AddBinary(inputStream, strFileName, sg, "nav", comp, "text/xml").Url;
            //Put a copy of the path in the package in case you need it
            package.PushItem("BinaryPath", package.CreateStringItem(ContentType.Html, sBinaryPath));
        }
        catch (Exception e)
        {
            log.Error(e.Message);
        }
        finally
        {
            if (inputStream != null)
            {
                inputStream.Close();
            }

        }
    }
}

コードはかなり自明だと思います。これにより、text / xmlタイプのバイナリが公開されますが、プレーンテキストファイルに変換しても問題はありません。

于 2012-04-13T11:41:23.863 に答える