/// <summary> /// Compila una sección /// </summary> private string Compile(SectionSourceModel section, FileTargetModelCollection childs) { SectionSourceModel template = Data.Templates.GetTemplate(section.Source, TemplatesArrayModel.TemplateType.News); NhamlCompiler.Variables.VariablesCollection variables = Data.NhamlCompiler.GetVariablesDocumentForCategory(childs); string content; // Ordena los archivos hijo childs.SortByDate(false); // Dependiendo de si la sección tiene o no una plantilla if (template != null) { // Compila las páginas content = Data.NhamlCompiler.Compile(section.FileTarget.File.DocumentFileName, template.Source.Content, variables, 0); // Crea las variables para el contenido de la sección variables.Clear(); variables.Add(Compiler.NHamlCompilerWrapper.VariableContent, content); // Compila la sección content = Data.NhamlCompiler.Compile(section.FileTarget.File.DocumentFileName, section.Source.Content, variables, 0); } else { content = Data.NhamlCompiler.Compile(section.Source, variables, 0); } // Devuelve el valor compilado return(content); }
/// <summary> /// Carga los documentos, inicializa sus datos básicos y compila en corto /// </summary> internal override void Process() { foreach (SectionSourceModel section in Data.Templates) { if (section.Source.IDScope == DocumentModel.ScopeType.News) { FileTargetModelCollection childs = Data.Files.GetChilds(section.Source.ChildPages, true, true); // Compila el contenido de la sección section.Source.Content = Compile(section, childs); } } }
/// <summary> /// Obtiene las páginas anterior y posterior /// </summary> private FilesIndexComposition GetIndexPages(FileTargetModel file, DocumentModel document) { FilesIndexComposition index = new FilesIndexComposition(); FileTargetModelCollection siblings = Data.Files.GetSiblings(file, false); // Asigna los datos index.PageTop = Data.Files.GetParent(file); index.PagePrevious = siblings.GetPreviousPage(file); index.PageNext = siblings.GetNextPage(file); index.PagesRelated = GetPagesRelated(file, document); index.FilesBreadCrumb = Data.Files.GetParents(file); index.Normalize(); // Devuelve el índice return(index); }
/// <summary> /// Obtiene las páginas relacionadas /// </summary> private System.Collections.Generic.List <DocumentTargetModel> GetPagesRelated(FileTargetModel file, DocumentModel document) { System.Collections.Generic.List <DocumentTargetModel> documents = new System.Collections.Generic.List <DocumentTargetModel>(); FileTargetModelCollection filesRelated = Data.Files.GetPagesRelated(file, document); // Carga los archivos y rellena la lista foreach (FileTargetModel fileRelated in filesRelated) { documents.Add(new DocumentTargetModel { FileTarget = fileRelated, Document = new DocumentBussiness().Load(Processor.Project, fileRelated.GetFullFileNameCompiledShort(Processor)) }); } // Devuelve la colección de archivos return(documents); }
/// <summary> /// Crea las páginas de una categoría /// </summary> private FileTargetModelCollection Compile(FileTargetModel fileCategory, DocumentModel category, FileTargetModelCollection childs, int intItemsPerPage) { FileTargetModelCollection filesCompiled = new FileTargetModelCollection(Processor); SectionSourceModel templateMain = Data.Templates.GetTemplate(category, TemplatesArrayModel.TemplateType.Main); SectionSourceModel templateHeader = Data.Templates.GetTemplate(category, TemplatesArrayModel.TemplateType.CategoryHeader); // Si no hay ninguna plantilla añade el error if (templateHeader == null) { Processor.Errors.Add(fileCategory.File.DocumentFileName, "No se encuentra ninguna plantilla para la cabecera de la categoría"); } else { SectionSourceModel templateItems = GetTemplateItems(category); if (templateItems == null) { Processor.Errors.Add(fileCategory.File.DocumentFileName, "No se encuentra ninguna plantilla para los elementos de la categoría"); } else { string contentHeader = Data.NhamlCompiler.Compile(category, fileCategory.DateUpdate, templateHeader, null); int pageIndex = 0; int numberPages = CountPages(childs.Count, intItemsPerPage); if (childs.Count == 0) { string content; // Compila con la cabecera de la plantilla content = templateMain.ReplaceVariablesPageTemplate(contentHeader, null, category.Title, category.Title, category.Description, category.KeyWords); // Crea el archivo filesCompiled.Add(CreateFile(fileCategory, 0)); // Graba en el archivo compilado el contenido de la cabecera Save(filesCompiled [filesCompiled.Count - 1], content); } else { // Ordena los archivos if (fileCategory.ShowMode == DocumentModel.ShowChildsMode.SortByDate) { childs.SortByDate(false); } else { childs.SortByName(true); } // Compila el contenido for (int top = 0; top < childs.Count; top += intItemsPerPage, pageIndex++) { string content; FilesIndexComposition fileIndex = new FilesIndexComposition(); // Obtiene las páginas de índice fileIndex.PageTop = Data.Files.GetParent(fileCategory); fileIndex.PagePrevious = GetPage(fileCategory, pageIndex - 1, numberPages); fileIndex.PageNext = GetPage(fileCategory, pageIndex + 1, numberPages); // Normaliza el índice fileIndex.Normalize(); // Compila los elementos de la categoría content = Data.NhamlCompiler.CompileItemsCategory(category, templateItems, childs.Slice(top, intItemsPerPage), fileIndex); // Compila con la cabecera de la plantilla content = templateMain.ReplaceVariablesPageTemplate(contentHeader, content, category.Title, category.Title, category.Description, category.KeyWords); // Crea el archivo filesCompiled.Add(CreateFile(fileCategory, pageIndex)); // Graba el archivo compilado Save(filesCompiled [filesCompiled.Count - 1], content); } } } } // Devuelve la colección de páginas return(filesCompiled); }