Tridion 2009 SP1:是否可以发布.htaccess文件?

时间:2012-04-13 10:38:21

标签: tridion

我在项目中使用ISAPI重写,想知道是否可以从Tridion发布.htaccess文件?

我尝试使用.htaccess扩展名创建页面模板,但无法创建没有名称的页面。

有什么想法吗?

我可以使用C#TBB更改页面名称吗?

2 个答案:

答案 0 :(得分:3)

我认为您可以使用多媒体组件来存储.htaccess。即使您无法上传没有名称的文件(Windows限制),您也可以稍后通过修改多媒体组件的BinaryContent.Filename属性来更改文件名。然后,您可以单独发布此组件,或在您的某个模板中使用AddBinary方法。

还有一个用户架构,您可以在其中更改其他一些规则:“\ Tridion \ bin \ cm_xml_usr.xsd”,但您将无法允许空文件名

答案 1 :(得分: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类型的二进制文件,但是将它转换为纯文本文件应该没有问题。