--- title: FAQ --- # General Questions * **webgen fails with an error after upgrading to a newer version - what to do?** Delete the cache file and try again. The structure of the cache may not be valid anymore after a version update. So it is always good to delete the cache after installing a new webgen version. * **Why can I specify multiple blocks in a page/template file?** This allows you to provide different content parts for one page. For example, image you have a layout with a sidebar and you want to have page specific sidebar contents. The easiest way to achieve that is to add a `sidebar` block to the page files that provide a page specific sidebar content and conditionally include the `sidebar` block in your `default.template`, like this: <%% if node.node_info[:page].blocks.has_key?('sidebar') %> \ <%% end %> * **What do I have to do to use the extensions?** Nothing! Extensions are initialized and used automatically when needed. So, for example, if you add a `my.feed` file to your website, the `Webgen::SourceHandler::Feed` extension gets automatically used. The same is true for all types of extensions (source handler, content processors, tags, ...). * **Is there any way to add comments to my webgen website?** Surely! There are several comment engines out there, however, the following two look very promising: * [JS-Kit](http://js-kit.com/comments/) * [DISQUS](http://disqus.com) # How to ... This section provides quick answers and links to more information for the most commonly asked questions. ### ... create a website? Use the `webgen` command to create the needed directories webgen create -t project -s andreas07 my_site This will create a webgen website in the directory `my_site` using the specified template and style. ### ... set configuration options? You can set any configuration options via the configuration file called `config.yaml`. For example, say you want to set the option `website.link_to_current_page` to `true`, then you would add the following to the configuration file: website.link_to_current_page: true There is a second possibility for webgen tags: you can set the options directly in the tag definition, like this: \{menu: {start_level: 2, min_levels: 3}} And if you want to have complete control over the configuration options, you can use the file `ext/init.rb`. For example, the following specifies that all page files should be in the menu by default: config = Webgen::WebsiteAccess.website.config config['sourcehandler.default_meta_info']['Webgen::SourceHandler::Page']['in_menu'] = true ### ... change the default language? To use, for example, German as the default language, put the following into the configuration file: website.lang: de The value needs to be a valid ISO-639-1/2 language code. ### ... use a different processing pipeline for page files? If you want to change the processing pipeline (ie. how a page file get rendered), you need to add the following to your configuration file: default_processing_pipeline: Page: erb,tags,textile,blocks The `default_processing_pipeline` key is a special key which allows to directly set the processing pipeline (instead of going through all the meta information). If you just want to change the pipeline for one block, you can do it like this: --- pipeline:erb,tags,textile,blocks This is the content of the block ### ... set the default meta information for files created by a specific source handler? Use the configuration file! For example, to change the meta information `in-menu` sothat it defaults to `true` for all page files use the following in your configuration file: default_meta_info: Page: inMenu: true The key `default_meta_info` is a special key in the configuration file which allows to update the default meta information for a source handler and not to substitute it. ### ... ignore files in the source directory? This can be done using the `sourcehandler.ignore` configuration options. For example, to ignore all files starting with `core`, you would put the following in the configuration file: sourcehandler.ignore: [**/core*] The value of this option has to be an array of path patterns. Be aware that this overwrites the default setting. ### ... change the output name style? You have several options of varying granularity: * Set the meta information `output_path_style` for all source handlers: default_meta_info: :all: output_path_style: [:parent, :cnbase, [., :lang], :ext] * Set the meta information `output_path_style` for a specific source handler to only change the output paths of this source handler (the page source handler in the following example): default_meta_info: Page: output_path_style: [:parent, :cnbase, [., :lang], :ext] * Add the meta information `output_path_style` to a single file via, for example, a meta information backing file. ### ... modify the template chain? To stop the template chain at a specific template or even at the page file itself, specify a null template in the meta information, like this: template: ~ To nest templates, you just need to specify the template, in which this template/page file should be nested, in the meta information: template: my_special.template Be aware that if no `template` meta information is specified for a page or template file, the template handler automatically searches for a default template in the directory and the parent directories of the file! ### ... localize a directory name? Just set the `routed_title` meta information on the correct localized directory index files. ### ... provide additional attributes on links to a file? You can specify additional attributes for a link to a file by using the `link_attrs` meta information. Take the following page file: --- title: Tutorial in_menu: true link_attrs: title: This is a rather large tutorial accesskey: D tabindex: 5 --- Yippieh, this is my tutorial! When a link to this page is created, the specified attributes get additionally set on the link! ### ... add page specific sidebar content? There are many ways to accomplish this, I will show only one way here using blocks. Add the following to the sidebar part in your `default.template` (ensure that you haven't disabled `erb` in the processing pipeline): <%% if node.node_info[:page].blocks.has_key?('sidebar') %> \ <%% end %> This will include the contents of the block `sidebar` in the sidebar if such a block exists for a page. You can then add a sidebar block to each page file which needs it. Following is such a sample page file: This is the main content block --- sidebar This is the sidebar block and everything in here goes to the sidebar! ### ... create XML output? This can be achieved manually (by removing any markup processor in the processing pipeline of the page file and then directly creating the XML elements) or by changing the processing pipeline to include content processor `builder` which provides an easy way of programmatically creating an XML compliant file. More information on this can be found on the documentation page of Webgen::ContentProcessor::Builder! ### ... create a static menu? You can use virtual nodes to define virtually any menu structure you like, including things like having menu entries that point to the same page and links to external pages. ### ... use short menu title? You can use a special of the meta information `link_attrs` to achieve that. Just use the following in the meta information block of the page file for which you want a short menu title: link_attrs: :link_text: Short title > Be aware that this changes not only how the page appears in a menu but also how it appears in > breadcrumb trails and other links generated by webgen. {.exclamation}