2012-04-13 12 views

risposta

3

Vorrei anche scegliere di utilizzare un binario per ottenere ciò, ma se vuoi gestire il file htaccess usando il testo, piuttosto che un componente multimediale, puoi spingere un binario nel tuo pacchetto usando la seguente tecnica:

1) Inserisci il testo del file Htaccess in il pacchetto con un nome accessibile (ad esempio Binary_Text) 2) Utilizzare un codice simile al seguente per creare un file di testo dal testo nella variabile e aggiungerlo al pacchetto

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

     } 
    } 
} 

Penso che il codice sia piuttosto auto-esplicativo. Questo pubblica un binario di tipo text/xml, ma non ci dovrebbero essere problemi a convertirlo per fare un semplice file di testo.

+0

Chris, ho deciso di renderlo un compito di distribuzione per ora, ma questo codice sembra davvero buono per un'altra volta. Grazie. –

3

Penso che tu possa usare il componente multimediale per memorizzare il tuo .htaccess. Anche se non si è in grado di caricare file senza nome (limite di Windows), sarà possibile modificare il nome file in un secondo momento, modificando la proprietà BinaryContent.Filename del componente multimediale. È quindi possibile pubblicare questo componente separatamente oppure utilizzare il metodo AddBinary in uno dei modelli.

C'è anche uno schema utente in cui è possibile modificare alcune altre regole: "\ Tridion \ bin \ cm_xml_usr.xsd", ma non sarà in grado di consentire i nomi dei file vuoti

+0

Grazie per la risposta. Per ora sto solo facendo di un'implementazione perché ho un solo sito web, ma cercherò di implementare qualcosa di simile in futuro. –

Problemi correlati