2012-04-13 14 views

Respuesta

3

También me optar por utilizar un binario para lograr esto, pero si desea administrar el archivo htaccess usando texto, en lugar de como un componente multimedia, puede insertar un binario en su paquete usando la siguiente técnica:

1) Inserte el texto del archivo Htaccess en el paquete con un nombre accesible (es decir, Binary_Text) 2) Use un código similar al siguiente para crear un archivo de texto a partir del texto en la variable y agréguelo al paquete

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(); 
      } 

     } 
    } 
} 

Creo que el código es bastante auto explicativo. Esto publica un binario de tipo texto/xml, pero no debería haber ningún problema al convertirlo para hacer un archivo de texto sin formato.

+0

Chris, he decidido convertirlo en una tarea de implementación por ahora, pero este código parece realmente bueno para otro momento. Gracias. –

3

Creo que puede usar componentes multimedia para almacenar su .htaccess. Incluso si no podrá cargar archivos sin nombre (limitación de Windows), podrá cambiar el nombre del archivo más tarde, modificando la propiedad BinaryContent.Filename del componente multimedia. A continuación, puede publicar este componente por separado o utilizar el método AddBinary en una de sus plantillas.

También hay un esquema de usuario donde puede cambiar algunas otras reglas: "\ Tridion \ bin \ cm_xml_usr.xsd", pero no será capaz de permitir que los nombres de archivos vacíos

+0

Gracias por su respuesta. Por ahora solo lo estoy convirtiendo en una tarea de implementación ya que solo tengo un sitio web, pero buscaré implementar algo como esto en el futuro. –

Cuestiones relacionadas