DPL:Manual - DPL parameters: Controlling output format
Manual | Controlling output format |
You can select one of several default formats or define your own format (mode=userformat); output can be grouped in columns or rows.
Contents
General approach to output formatting
The general approach to output formatting is two-fold:
- There are a couple of simple predefined output formats which generate lists of articles
- You will understand their meaning directly from reading
- There is a mode called "userformat" which puts complete control into your hands
- This is somewhat complicated.
While the standard output formats are meant to be used for fast generation of simple page lists, the userformat approach aims at transcluding contents from other pages and requires some effort to understand. There is a system of three tags which are used to enclose (a) the whole output, (b) each item, (c) each transcluded section of an item. A fourth tag is used to separate values between items of one section which occur more than once.
We assume that we have two documents which use templates x and y with varying arguments; while x is being used once within each document, y is used several times. In very short notation the structure might look as follows:
A: x(a) y(3) y(5) B: x(b) y(4) y(1) y(2)
The following DPL parameters are used to define a set of tags which are used to construct the output:
- listseparators = liststart,itemstart,itemend,listend
- secseparators = sec-1-start,sec-1-end,sec-2-start,sec-2-end, .. , ..
- multisecseparators = multi-sep
The arguments of the above statements can contain references to %VARIABLES%. So sec-1-start might contain a reference like %PAGE% to output the page name. See format for more details on variable substitution.
Now think of the following page inclusion statement:
includepage={x}.dpl,{y}.dpl
The output will then look like this:
liststart itemstart sec-1-start x.dpl(a) sec-1-end sec-2-start y.dpl(3) multi-sep y.dpl(5) sec-2-end itemend itemstart sec-1-start x.dpl(b) sec-1-end sec-2-start y.dpl(4) multi-sep y.dpl(1) multi-sep y.dpl(2) sec-2-end itemend listend
Assuming that the tags (liststart, itemstart, etc.) contain wiki syntax for table definitions and multi-sep defines a horizontal line, the output might look like this:
+------+---------------------+ | | | y.dpl(3) | | A | x.dpl(a) | ---- | | | | y.dpl(5) | +------+----------+----------+ | | | y.dpl(4) | | | | ---- | | B | x.dpl(b) | y.dpl(1) | | | | ---- | | | | y.dpl(2) | +------+----------+----------+
In some situations, however, you may want to create an output table where each of the calls of template y is used to create a separate output row. Using a sortable table you could then easily rearrange the output.
+------+---------------------+ +------+---------------------+ | A | x.dpl(a) | y.dpl(1) | | B | x.dpl(b) | y.dpl(1) | +------+---------------------+ +------+---------------------+ | A | x.dpl(a) | y.dpl(2) | | B | x.dpl(b) | y.dpl(2) | +------+---------------------+ +------+---------------------+ | B | x.dpl(b) | y.dpl(3) | | A | x.dpl(a) | y.dpl(3) | +------+---------------------+ +------+---------------------+ | B | x.dpl(b) | y.dpl(4) | | A | x.dpl(a) | y.dpl(4) | +------+---------------------+ +------+---------------------+ | B | x.dpl(b) | y.dpl(5 | | B | x.dpl(b) | y.dpl(5) | +------+---------------------+ +------+---------------------+
There is a special parameter called dominantsection which you can use to mark one section of your includepage statement as "dominant" (in our example: dominatsection=2 as {y}.dpl is the second argument of our includepage statement). You can only have one dominant section in a DPL statement. Marking a section as "dominant" makes only sense if you have multiple calls of the same template (or multiple chapters with the same heading) in your documents. Each piece of contents in the dominant section will generate an individual output row with the values of all other columns being repeated.
As all of the above is not very easy to understand there are additional DPL commands (table, tablerow) which make it fairly easy to create tabular output.
Setting the basic output mode
mode
mode | Provide basic control over the output of DPL. |
Syntax:
mode=modename
modename can be one of:
- unordered
- outputs an unordered list — HTML tag "ul" — (default)
- ordered
- outputs an ordered list — HTML tag "ol"
- none
- outputs a list using newlines and HTML tags "br" to separate each item
- inline
- outputs a list using symbol defined by the inlinetext parameter to separate items.
- category
- outputs resulting articles in a way category-pages are shown (you have to use
ordermethod = title | titlewithoutnamespace | category,title | user,title
with this option!)
- userformat
- will leave output control completely to the user;
see parameter listseparators and secseparators; in this mode DPL2 will offer built-in variables which must be referenced in the output format description provided by the user. mode=userformat is quite important to have complete control over the output.
For advanced use of DPL it is important to understand mode=userformat. Note that this mode is automatically implied when listseparators= or format= are used.
Example1
<DPL> category=Africa mode=ordered </DPL> | This list will output pages that have [[Category:Africa]] shown in an <ol>...</ol> list:
|
Example2
<DPL> titlematch=%frica% mode=category ordermethod=titlewithoutnamespace </DPL>
This list will output pages that have 'frica' in their name; pages will be ordered by their name regardless of category, the output will be shown in category style (i.e. with chapter capitals)
Related DPL extension variables: $wgDPL2CategoryStyleListCutoff
.
mode 'Inline'
inlinetext
inlinetext | To define the inline text used in mode=inline
|
Syntax:
inlinetext=wikitext
, with wikitext some wiki text
default is ' - ' except for mode=userformat where inlinetext is empty by default.
Extra whitespaces are stripped by DPL from the beginning and end of wikitext. If you want to show one or multiple spaces, use one or multiple '
', or use 'nowiki' tags like in '<nowiki> - </nowiki>' which has same effect as ' - '.
Example:
<DPL> category=Africa mode=inline inlinetext= • </DPL>
This list will output pages that have [[Category:Africa]] shown like Item1 • Item2 • Item3 • ...
mode 'Userformat'
listseparators
listseparators (alias for format) | see the format parameter. |
Note that format= automatically implies mode=userformat whereas listseparators does not.
format
format | customize the output format completely. Implicitly sets mode=userformat. Uses variable references like %PAGE% to describe the output format. See also the secseparators parameter. |
Note: listseparators is an alias for format which does not automatically imply mode=userformat.
Syntax:
format=Startall,Start,End,Endall
'Startall', 'Start', 'End' and 'Endall' are wiki tags used to separate the list items.
- 'Startall' and 'Endall' define an outer frame for the whole list.
- 'Start' and 'End' build an inner frame for each article item.
Because wiki syntax depends on newline characters the string \n must be used to explicitly insert newline characters into the output.
As we want to be able to control output completely we reference article names and other possible output by special symbols:
- %PAGES% = number of articles in the result set (only available in resultsheader and resultsfooter)
- %TOTALPAGES% = total number of articles in the result set (only available in resultsheader and resultsfooter, regardless of count limits)
- %VERSION% = the current DPL version (only available in resultsheader and resultsfooter)
- %NR% = the current article sequence number (starting from 1)
- %PAGE% = the name of the article (including namespace)
- %PAGESEL% = the name of a page which was used within the selection criteria (only applies to linksfrom and linksto)
- %IMAGESEL% = the name of an image which was used within the selection criteria (only applies to imageused)
- %TITLE% = the title of the page (without the namespace)
- %NAMESPACE% = the namespace of the page
- %COUNT% = the usage counter (requires addpagecounter=true)
- %SIZE% = the article size (requires addpagesize=true)
- %SIZEFS% = a font size number which is based on the article size (logarithm of square root of counter)
- %COUNTFS% = a font size number which is based on the usage counter (currently this is the logarithm of the usage counter)
- %COUNTFS2% = similar to %COUNTFS%, but based on the logarithm of the square root of the usage counter.
- %DATE% = the date selected, eg. lastedit; requires addeditdate=true or similar; the formatting of the date can be influenced using userdateformat=
- %USER% = the user who changed the document last; requires adduser=true
- %CONTRIBUTOR% = the user who made a contribution; requires addcontribution=true
- %CONTRIBUTION% = the number of bytes changed; requires addcontribution=true
- %CONTRIB% = an asterisk bar to indicate the amount of change; requires addcontribution=true
- %CATLIST% = a pipe-separated list of links to all categories to which the article belongs (requires addcategories=true)
- %CATNAMES% = a comma-separated list of all categories to which the article belongs (requires addcategories=true)
- %REVISION% = the name of the revision of the article; this will only be available if you made a selection based on revisions
These symbols will be replaced by the corresponding values if they occur within 'Start' or 'End' or within the corresponding tags of the secseparators= parameter.
This means that the classical default output of DPL2 can also be produced with the following statements:
Example:
<DPL> category = Africa format = ,\n* [[%PAGE%|%TITLE%]],, </DPL>
Note that a bullet point list in wiki syntax is defined by a "*" at the beginning of a line -- therefore we have to use a special symbol '\n' or '¶' to refer to the beginning of a new line of wiki text. Replace the "*" by a "#" and you will get a numbered list. 'Startall' and 'Endall' are empty (note that we start with a comma, note the two commas at the end), the 'Start' tag is used to create a new line with an initial "* " followed by the page name, written as a link. That´s all.
Creating a top-five hitlist with access rates and bold article names of varying size could be done like this:
<DPL> category = Africa ordermethod = counter order = descending addpagecounter = true count = 5 format = ,\n%COUNT% --- <font size="%COUNTFS%">'''[[%PAGE%]]'''</font>,<br/>, </DPL>
You can also use HTML syntax for the tags, although this is discouraged.
<DPL> linksto = Africa format = <ul type="disc">,<li>[[%PAGE%]],</li>,</ul> </DPL>
Now let us create a table using wiki syntax:
<DPL> linksto = Africa format = {| class="wikitable"¶!pages found,¶|-¶|[[%PAGE%]],,¶|} </DPL>
We use 'Startall' to define the table header and 'Endall' for the footer. Each article is presented in a table row using wiki syntax for table layout.
we could also produce image galleries:
<DPL> namespace = Image format = <gallery>,%PAGE%\n,,</gallery> </DPL>
secseparators
secseparators | customize the output format of included sections. Can be used with standard output modes and with mode=userformat. |
Syntax
secseparators=Start1,End1,Start2,End2,..,..
or
secseparators=Start
Please note that the semantics of this parameter have changed with version 0.9.6!. When upgrading to 0.9.6 it will probably be necessary to change the secseparator statements.
In the first syntax variant, specify pairs of tags which correspond to the includepage statement. StartN and EndN are HTML strings or wiki tags which will be put around each transcluded section (see includepage=name1,name2,...).
In the second syntax variant, specify just one element which will then be used as 'StartN' for all sections; in this case the second tag (EndN) will be empty for all transcluded sections.
Symbolic replacements of %PAGE% etc. take place as described in listseparators. In addition, the symbol %SECTION% can be used to refer to the section found (works only for chapter headings).
If the same section occurs more than once in an article (or an article includes the same template more than once) all such occurences will be transcluded as a block and the secseparator tags will only be put once around the whole block (but see dominantsection).
Example
<DPL> linksto = Africa mode = userformat listseparators = {|¶!pages found¶!fruit¶!color,¶|-¶|[[%PAGE%]],,¶|} includepage = #fruit,#color secseparators = ¶|,,¶|,, </DPL>
Which produces,
pages found | fruit | color |
---|---|---|
Amethyst | ||
Nigeria |
The fruit of Nigeria is big and round. |
Nigeria is blue. |
Sudan |
Use listseparators to define a table with three columns and put a link to the article in the first column of each row. Use secseparators to add more columns for each section found. There are two pairs for each transcluded section; the first element of each pair is a linefeed and a pipe (which define a new column in the table) and the second element of each pair is empty. Have a careful look at the '¶' symbols ('\n' can be used as an alternative). They always appear before a wiki syntax element which must be placed at the beginning of a new line. Thus, make sure that the wiki parser will understand them. Note: if an article does not contain a section named "fruit", it will result in an empty cell in the table.
As mentioned above, a single element can be used in the secseparators statement in order to apply this as a start tag to all transcluded sections; so it could have also been written:
Example 2
<DPL> linksto = Africa mode = userformat listseparators = {|\n!pages found\n!fruit\n!color,\n|-\n|[[%PAGE%]],,\n|} includepage = #fruit[50],#color[100 more..] secseparators = \n| </DPL>
Assuming that the chapters on fruit and color contain long texts, they can be truncated to 50 or 100 characters. A link which refers directly to those chapters will be generated automatically if needed.
multisecseparators
multisecseparators | put a tag between multiple transcluded parts which refer to the same template or chapter. |
Syntax:
multisecseparators=sep1,sep2,...
The tags correspond to the transcluded section (see includepage=name1,name2,...).
Symbolic replacements of %PAGE% etc. take place as described in listseparators. In addition the symbol %SECTION% can be used to refer to the section found (works only for chapter headings). It will give you the precise name of each heading even if you used a regular expression (double ##) in the include statement.
If an article uses the same template more than once you will get all references with "sepN" as a separator.
Example:
<DPL> category=TestSSt includepage={interfaces_overview} dpl mode=userformat listseparators=¶{|class=sortable ¶!Interface ¶!Source system ¶!Target system ¶!Technology,¶|-¶|[[%PAGE%]] ¶,¶,¶|} secseparators = \n| multisecseparators=¶|-¶| | </DPL>
See also Test article structure.
dominantsection
dominantsection | define a section with multiple occurencies as dominant, i.e. each piece of contents of this section (which is associated with a template call or a chapter within the original document) will create a separate output line. |
Syntax:
dominantsection=number
between 1 and the number of arguments in your includepage= statement
If there is only 0 or 1 piece of contents for the dominant section you will see no difference from normal DPL behaviour.
Example:
See the explanations at the top of this document to understand the meaning of dominantsection.
Note: Using dominantsection together with table may lead to strange result formatting.
Generating tabular output
table
table | a simple syntax to create standard tabular output; see also tablerow |
Syntax:
table=
tableatr, linkheader, (column headlines) ..
The table statement is a shortcut which implicitly sets certain values for other DPL parameters, namely mode, listseparators / format, secseparators, and multisecseparators.
The layout is less flexible than the individual use of all of the above parameters but will probably be sufficient in many cases, especially when used together with tablerow.
If you use table in a DPL statement, it does not make sense to use one of the other options mentioned because their values will be overwritten without notice. There is one exception of this rule: It can make sense to specify the THIRD argument for format in combination with table. Therefore this parameter is NOT overwritten by the table command. The third argument can be used to output meta data like %COUNT%, %USER% etc. as columns in an output table. If you want to do so, the third parameter must contain wiki syntax for output columns like this:
include = {some template}:parm1,#some heading table =,,tplparm,chapter,#hits format =,,\n%COUNT%
Do not forget to escape the '|' symbol if your DPL statement uses parser function syntax. You will get a table which contains template parameters, chapter contents and the usage counter as a third column. Meta data can only be placed AFTER normal contents as we use the THIRD parameter of the format statement.
The use of table requires an include statement which should, for reasons of readability, directly precede the tablestatement). Each argument of the include statement will produce one or more columns in the output table described in the table statement.
table expects a comma-separated list of parameters:
- The first parameter will be used to describe general parameters for the table
- it is recommended to make a CSS reference here, using something like class=wikitable or class=mytable if mytable is defined in the Mediawiki:Common.css document.
- class=wikitable is the default value. Use double-quotes to specify multiple classes, e.g., class="wikitable sortable".
- The second parameter is the headline for the first column.
- The first column will automatically contain a reference to the article, so something like Article should be o.k.
- Article is the default value.
- if you use a single - (dash), the column with the hyperlink to the article will be suppressed. You can supply a hyperlink to the article in any other column if you use [[{{{%PAGE%}}}|{{{%TITLE%}}}]] within a phantom template.
- All subsequent parameters are column headings which correspond to the arguments of the include parameter. Note that if you call a phantom template (like {Some Template}.dpl) in the include statement, you will have to provide as many headlines as the phantom template produces columns.
- mode will be set to userformat
- listseparators will be configured to produce wiki syntax which defines a table
- secseparators will be configured to produce wiki syntax which creates a table row. The first column will always contain a hyperlink to the article of the query result (except you set the link header to '-' as described above.
- multisecseparators will be configured to produce wiki syntax which creates another table row for multiple occurencies of the first include argument. For all other arguments a linebreak will be used if we are dealing with template parameters and a horizontal separation line will be used when dealing with chapter contents. The background for this is the following: If you have an article which calls the same template several times, you may want to have a table where each template invocation becomes a row in your table.
When using phantom templates (i.e. templates which are called during DPL execution instead of the original template) they must be written to produce output according to wiki table syntax. When entering such a template we are already at the beginning of a column (i.e. a preceding line with a | has already been put into the output stream). So start directly with the contents of the first column. To add more columns use a | in a separate line. Example:
some output for the first column: {{{1|}}} | some output for the next column: {{{2|}}} | some output for the next column: {{{3|}}}
It may sound complicated, but is a huge improvement compared to the native use of mode, listseparators, secseparators and multisecseparators.
A typical DPL statement using the table parameter would contain:
include = #Chapter X,{T1}:parm1,#Chapter Y,{T2}.dpl table = class=sortable, Article, X , t-p , Y , T2-a, T2-b
Note that we have written the above statement in a way to show the correspondence between include and table. You can see the first two parameters which define the table characteristics and a headline for the hyperlink to the article. Then follow headlines for each argument of include. Note that there are TWO headlines which correspond to the last argument of the include statement (assuming that Template:T2.dpl outputs TWO columns). Template:T2 itself might have more or less than 2 arguments -- it only matters how many columns are output by Template:T2.dpl).
Now look at the examples
tablerow
tablerow | a simple syntax to create customized tabular output; see also table |
Syntax:
tablerow=
coldef, ..
Where coldef contains wiki code which uses the symbol '%%' to refer to the corresponding element of an include statement.
The table statement (which must be used as a prerequisite for tablerow) cares for the basics of table generation. So, when you define a column definition, you only need to specify the code for the field contents itself. You can start with field attributes like "bgcolor" or skip them. You can add a leading "\n" to make sure that the field contents is displayed correctly if it contains wiki syntax that depends on linebreaks (e.g. enumeration list). You must specify all columns. i.e. you must have as many entries in the tablerow statement as there are columns in your table. Skipping a column would suppress output for that column completely.
The tablerow command is best explained by an example (you can also find this example on the title page of this wiki):
<dpl> category=African Union member states nottitlematch=Sudan addpagecounter=true includepage ={Infobox Country or territory}:area:population_estimate,%0[100] format =,,\n|align=right|²{#ifexpr:%COUNT%>300¦<big>'''%COUNT%'''</big>¦%COUNT%}², table =,Country,Area,Population,Text,#hits tablerow =align=right|%%,align=right|%%,bgcolor=lightyellow|<small>%%</small>,\n|align=right|%% </dpl>
Country | Area | Population | Text | #hits | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Cameroon | 475,442 | 16,323,000 |
Syntax:
number is the position of the column that shall be used as sortkey when the result is initially displayed.
Heading modeheadingmode
Syntax:
modename can be one of:
Example: <DPL> category=Africa|Europe ordermethod=category,title headingmode=definition mode=ordered </DPL> This list will output pages that belong to one of the categories Africa, Europe in a list similar to this (HTML source), with pages 1 and 2 in the Africa category, Page 1 in the Europe category as well (in fact, the titles are replaced with the appropriate links): <dl> <dt>Africa</dt> <dd> <ol> <li>Page1</li> <li>Page2</li> </ol> </dd> <dt>Europe</dt> <dd> <ol> <li>Page1</li> </ol> </dd> </dl> Headingmode can be used with multi-column output but the length of the columns may in this case vary more than you would expect. headingcount
Syntax:
default is
listattr
Syntax:
Examples:
itemattr
Syntax:
Example: see listitemattr. hlistattr
Syntax:
Example:
See also hitemattr. hitemattr
Syntax:
Example:
userdateformat
Syntax:
The formatstring may contain letters like "y,Y,m,M,d,D,h,H,i,I,s" for year, month day. Other characters are printed as they are. See the documentation for php function gmdate() for more details. The "userdateformat" applies to all date/time fields, see the parameters: addeditdate,addpagetoucheddate,addfirstcategorydate Example: userdateformat=Y-m-d (D) Control the way article names are displayedshownamespace
Syntax:
Example: <DPL> category = Africa namespace = Talk shownamespace = false </DPL> This list will output all Talk pages in [[Category:Africa]], listed without the Talk: prepended to page names. Note that in "mode=userformat" there is a different way to decide whether you want to output the title with or without namespace. In mode=userformat two built-in variables are provided which contain the page name including the namespace (%PAGE%) and the base title name (%TITLE%).
escapelinks
Syntax:
Note: You can use this parameter to show images; an other way to do this is to use the gallery extension in combination with DPL; there is an example for this on the dpldemo website.
titlemaxlength
Syntax:
replaceintitle
Syntax:
The "search for" argument must be an expression which can be used in a php preg_replace() function call. Example: to remove the string "demo" in article names, you must write
Note that standard regexp rules apply. The regexp must start with a non-alphanumeric character -- but not with a backslash! It is good habit to use a '/' if this character is not needed within the regexp itself. Read the php manual to understand the details of regular expressions.
Arranging article lists in columns and rowscolumns
Syntax:
In mode=userformat the outer tags from listseparators will be repeated for each column. Example: <DPL> category=Africa addpagesize=true ordermethod=size mode=userformat listseparators={|class=sortablewikitable id=2\n!Rank\n!Article\n!Bytes\n|-,\n|%NR%.\n|[[%PAGE%]]\n|align=right|%SIZE%,\n|-,\n|} count=12 columns=3 </DPL> The output will contain a list of the 12 largest articles on Africa, arranged in three columns. Each column consists of a table which has itself three columns: rank, article name and size.
<dpl> category=Test columns=3 rowcolformat=width=100% </dpl>
rows
Syntax:
In "mode=userformat" the outer tags from "listseparators" will be repeated for each column. Thus you can create long lists where the table heading is repeated from time to time. Example: <DPL> category=Africa addpagesize=true ordermethod=size mode=userformat listseparators={|class=sortablewikitable id=2\n!Rank\n!Article\n!Bytes\n|-,\n|%NR%.\n|[[%PAGE%]]\n|align=right|%SIZE%,\n|-,\n|} count=12 rows=2 </DPL> The output will contain a list of the 12 largest articles on Africa, arranged in two rows (of 6 lines each). Each row consists of a table which has itself three columns: rank, article name and size. rowsize
Syntax:
In "mode=userformat" the outer tags from "listseparators" will be repeated after each group of "rowsize" output lines. Thus you can create long lists where the table heading is repeated in regular intervals. Example: <DPL> category=Africa addpagesize=true ordermethod=size mode=userformat listseparators={|class=sortablewikitable id=2\n!Rank\n!width=200px|Article\n!Bytes\n|-,\n|%NR%.\n|[[%PAGE%]]\n|align=right|%SIZE%,\n|-,\n|} rowsize=20 </DPL> The output will contain a list of all articles on Africa. After each group of 20 entries (article names) the table heading will be repeated. It may be useful to set the width of the column with the article names explicitly, so that the tables in each row have equal width. rowcolformat
Syntax:
Example: <DPL> category=Africa columns=3 rowcolformat=cellspacing=20 </DPL> There will be more space around the columns than normal. See columns above for another example. The ideal way to use rowcolformat is to assign a CSS class to your DPL table which has been defined in your mediawiki:Common.css article. Example: <DPL> category=Africa columns=3 rowcolformat=class=dpl3columns </DPL> In your Common.css article you might have written something like table.dpl3columns td { background: #f2f2f2; padding: 0.5em; border:3px; width:33%; } |