DPL talk:Manual - DPL parameters: Controlling output format

From FollowTheScore
Revision as of 15:30, 5 September 2007 by 129.176.151.8 (talk)
Jump to: navigation, search

Actual output examples

This page could do with actual output examples instead of showing just code... Also, how do I get a template's field value to show up as specified in the template (with wiki markup)? -Eep² 12:22, 26 July 2007 (CEST)

I agree. But I would not like to have all the examples within the manaul page. We should take the way 'selfhtml' went. So there should be a new Category called 'DPL Manual Demo' or something like that. Each Demo sample should be memeber of that category. It should have a back ling to the manual. And of course the manual should have a link to the exampe ;-). Maybe one could even find a generic way to show the sourcecode of the example - this would be quite helpful.
Gero 15:03, 26 July 2007 (CEST)

getting wiki markup

I do not quite understand the question from above. If you use the template substitution mechanism parameters will be expanded before they are passed to the "surrogate" template. If you use the {templatename}:xx syntax a primitive scanner will identify the position of the template call in the wiki text of the caller and it will return the wikitext it finds between the parameter name and the next '|'. This is enough in many cases, but does not work correctly if the parameter value itself contains another template invocation. Note: the parser was improved in 1.2.9 and now respects wiki syntax conventions.

Gero 15:09, 26 July 2007 (CEST)
Thanks but I'm not sure how this works. How can I get the wiki markup/syntax to be outputted in the list/table? How would I change the code below (see #resultsfooter bug as parser function)? -Eep² 10:36, 27 July 2007 (CEST)
See http://www.tnlc.com/wiki/index.php?title=Comparison_table for what I'm trying to do. Template:game doesn't use templates but does have wiki markkup which I would like each field that appears in the comparison table to contain (that, in this case, links to the category of the same name). How do I do this? Obviously, if I pulled in this game template's fields, they would also categorize the comparison table into every category too, so I just need a way to add category links to each field in the DPL output (preferably also being able to use a template if desired). Is this possible?
I see there is a %SECTION% parameter for secseparators but I don't see a %FIELD% for use with templates. Can this be added that will pull in the template field's contents and allow it to be wiki-formatted ([[%FIELD%]], [[:Category:%FIELD%]], etc) and, if specified, have escapelinks (or a relevant parameter like parse) to either strip the wiki markup or show (parse/whatever) it as it would be if the template field was in a normal wiki article (with wiki links, category designations, etc). If all of this is already possible with DPL, please tell me how. -Eep² 08:04, 27 July 2007 (CEST)
I don't understand what you mean by "{templatename}:xx syntax"--I thought that was only for the includepage parameter? Why doesn't it work correctly if another template inclusion is in the parameter value?
Also, is there a resultsfooter parameter? I'd like to create a "totals" row below the table of how many games there are but resolutsheader only seems to be able to appear above the table.
Lastly, the edit page has a lot of "undefined" text that appears, trying to render non-existent edit buttons, probably. -Eep² 15:23, 26 July 2007 (CEST)
I'm having this problem ever since I got SimpleForms to work. Do you know how you fixed it? -Eep² 12:04, 17 August 2007 (CEST)
Disable mootools. Gero 12:13, 17 August 2007 (CEST)
Unfortunately, doing that disables most of SimpleForms' functionality (like listing category articles in the test example on User:Eep²). :/ -Eep² 12:46, 17 August 2007 (CEST)

resultsfooter bug as parser function

Thanks for adding this, but I think I found a bug. On http://www.tnlc.com/wiki/index.php?title=Comparison_table I have these DPL declarations for tables:

<dpl>
  category=Games
  includepage={game}:year,{game}:genre,{game}:publisher,{game}:developer,{game}:engine,{game}:character
  mode=userformat
  ordermethod=title
  listseparators=\n{|order cellpadding=0 cellspacing=0 class=sortable border style="border: 1px black; font-family: Tahoma; font-size: 8pt"\n !Game\n !Year\n !Genre\n !Publisher\n !Developer\n !Engine\n !Character,\n|-\n|[[%PAGE%]],,\n|}
  secseparators=\n|
  resultsfooter=Total games: %PAGES%
</dpl>

{{#dpl:
category=Games
|includepage={game}:year,{game}:genre,{game}:publisher,{game}:developer,{game}:engine,{game}:character
|mode=userformat
|ordermethod=title
|listseparators=\n{¦cellpadding=0 cellspacing=0 border class=sortable style="border: 1px black; font-family: Tahoma; font-size: 8pt"\n!{{cat|Games|Game}}\n !{{cat|Years|Year}} !!{{cat|Genres|Genre}} !!{{cat|Companies|Publisher}} !!{{cat|Companies|Developer}} !!{{cat|Engines|Engine}} !!{{cat|Player characters|Character}},\n¦-\n¦[[%PAGE%]],,¦}
|secseparators=\n¦
|uses=Template:game
|resultsfooter=Total games: %PAGES%
}}

The parser function version displays the footer (plus a }) inside the last table cell while the parser extension version displays it correctly. -Eep² 10:28, 27 July 2007 (CEST)

That is strange. Can you try adding \n as the first two characters in the footer? Gero 10:38, 27 July 2007 (CEST)
Doing that results in a new line under the } and before "Total games: %PAGES%"--but the footer is still inside the last table cell (which should contain "Lara Croft", the name of the game's player character that appears in the DPL parser extension table version above. -Eep² 10:43, 27 July 2007 (CEST)
Your table definition starts each item with a |-; try instead to put an initial |- at the end of the first part of listseparators (table headline) and then use the THIRD parameter to END each line with |-. Gero 10:59, 27 July 2007 (CEST)
I don't understand what you mean. Can you edit the listseparators line here as to how you mean?
|listseparators=\n{¦cellpadding=0 cellspacing=0 border class=sortable style="border: 1px black; font-family: Tahoma; font-size: 8pt"\n!{{cat|Games|Game}}\n !{{cat|Years|Year}} !!{{cat|Genres|Genre}} !!{{cat|Companies|Publisher}} !!{{cat|Companies|Developer}} !!{{cat|Engines|Engine}} !!{{cat|Player characters|Character}},\n¦-\n¦[[%PAGE%]],,¦}
-Eep² 11:05, 27 July 2007 (CEST)
see my modifications below. The main point, however, is probably that the LAST argument should start with \n. Maybe you change only this first and try if it works. You might also want to use the debugging trick I described in the FAQ document..
|listseparators=\n{¦cellpadding=0 cellspacing=0 border class=sortable style="border: 1px black; font-family: Tahoma; font-size: 8pt"\n!{{cat|Games|Game}}\n !{{cat|Years|Year}} !!{{cat|Genres|Genre}} !!{{cat|Companies|Publisher}} !!{{cat|Companies|Developer}} !!{{cat|Engines|Engine}} !!{{cat|Player characters|Character}}\n¦-,\n¦[[%PAGE%]],\n¦-\n,\n¦}

Gero 14:24, 27 July 2007 (CEST)

OK, this works, but I'm not sure why it's necessary since the parser extension works fine the other way. Ah well. Now, is there any way to add wiki markup/syntax to each cell? I'd like each cell to link to the category of the same name, for example. -Eep² 21:50, 27 July 2007 (CEST)
Use surrogate templates, e.g. include={game}.dpl and do whatever you want in "Template:game.dpl". It receives all the parameters of the original Template:game plus %PAGE% and %TITLE%. This gives you more flexibility than the 'include={game}:paramNrOrName approach. Use the 'debug trick' from the FAQ if the result table looks weird. Gero 23:44, 27 July 2007 (CEST)
I'm not sure what you mean by a surrogate template. I'd rather not have to create a different template that has the exact same values as the normal/regular template... Can't DPL just pull in the fields from the normal/regular template with an option to not strip their wiki markup (and also have a way to add wiki/HTML markup in a cell parameter, perhaps--or within listseparators like the table headers can)? -Eep² 05:22, 28 July 2007 (CEST)
NO. Go and create the different template. Gero 08:45, 28 July 2007 (CEST)
OK, but I don't see why a special DPL template is even necessary since it also includes wiki markup and duplicates the fields in the non-DPL template. Is it that hard to just pull out the fields from the non-DPL template and allow specialized wiki markup within the DPL parser function/extension as is done with formatting for lists, the table header, and even the table's first row's cell! I just don't get it...you even also allow special cell secseparators so why not a cell (or a general field) parameter for template parameters (+ a %FIELD% special/magic word--whatever, to pull in the current field--or maybe %TPARAM% for "template parameter") that allows wiki markup too? Just seems having to make another template is unnecessary and means having to maintain 2 templates instead of just one...plus the DPL function to designate the template fields (and the headers)... Ideally, a single template should be all that is necessary for DPL to pull in the table header/cell fields. Something like this:
{{#dpl:
category=Games
|includepage={game}:year,{game}:genre,{game}:publisher,{game}:developer,{game}:engine,{game}:character
|ordermethod=title
|listseparators=\n{¦cellpadding=0 cellspacing=0 border class=sortable style="border: 1px black; font-family: Tahoma; font-size: 8pt"\n!{{cat|Games|Game}}\n !{{cat|Years|Year}} !!{{cat|Genres|Genre}} !!{{cat|Companies|Publisher}} !!{{cat|Companies|Developer}} !!{{cat|Engines|Engine}} !!{{cat|Player characters|Character}}\n¦-,\n¦[[%PAGE%]],\n¦-\n,\n¦}
|secseparators= ¦¦
|field=[[:Category:%FIELD%|]]
|uses=Template:game
|resultsfooter='''Total games: %PAGES%'''
}}

Or the %FIELD% could be in listseparators:

|listseparators=\n{¦cellpadding=0 cellspacing=0 border class=sortable style="border: 1px black; font-family: Tahoma; font-size: 8pt"\n!{{cat|Games|Game}}\n !{{cat|Years|Year}} !!{{cat|Genres|Genre}} !!{{cat|Companies|Publisher}} !!{{cat|Companies|Developer}} !!{{cat|Engines|Engine}} !!{{cat|Player characters|Character}}\n¦-,\n¦[[%PAGE%]],\n¦-\n[[%FIELD%]],\n¦}

Or, more specifically, also allow pulling in the exact template fields for specific markup:

|listseparators=\n{¦cellpadding=0 cellspacing=0 border class=sortable style="border: 1px black; font-family: Tahoma; font-size: 8pt"\n!{{cat|Games|Game}}\n !{{cat|Years|Year}} !!{{cat|Genres|Genre}} !!{{cat|Companies|Publisher}} !!{{cat|Companies|Developer}} !!{{cat|Engines|Engine}} !!{{cat|Player characters|Character}}\n¦-,\n¦[[%PAGE%]] || [[{{{year}}}]] || [[:Category:{{{genre}}}]] || [[{{{publisher}}}|Different publisher]] || [[Wikipedia:{{{developer}}}|]] || [[{{{engine}}}]] || {{{character}}}\n¦-\n,\n¦}

Although, it might have to be {template}:field instead of {{{field}}} since multiple templates can be used which may have the same parameter/field names. -Eep²

I can't get this DPL template to work with the above code (substituting this for the includepage line):

|includepage={game}.dpl:year,{game}.dpl:genre,{game}.dpl:publisher,{game}.dpl:developer,{game}.dpl:engine,{game}.dpl:character

And I tried this too:

|includepage={game.dpl}:year,{game.dpl}:genre,{game.dpl}:publisher,{game.dpl}:developer,{game.dpl}:engine,{game.dpl}:character

Does the template extension work when specifying specific template parameters/fields to include? Also, it seems counterintuitive to require the ".dpl" outside the curly braces {} considering the template name is template:game.dpl not template:game.dpl. -Eep² 00:44, 29 July 2007 (CEST)

  • You should ONLY write 'include:{game}.dpl', nothing else. Leave all the parameter stuff away. Have a look at the DPL source code if you want. Firthermore there a lots of examples on this website which demonstarte how it works. The line in "somearticle" (which we assume calls Template:game is changed in a way that it now calls Template:game.dpl. All the parameters are untouched and two more parameters added (%TITLE% and %PAGE%). To me this is the _most elegant way_ to handle this whole topic. The code in Template:game and Template:game.dpl typically is significantly different to justify keeping it int two different templates. If we wanted to offer variables for substitution we would need prefixes for the template name and the parameter name (or number). Imagine your article includes Template:game and Template:hardware and you wanted to construct output from some parameters of both of these templates ..
84.58.211.73 07:56, 29 July 2007 (CEST)
I can imagine it quite easily, actually, and DPL should support it since it already supports multiple sections on different pages so why not multiple template fields on different templates? The "elegant" way seems like a copout copout (you really ought to add the wikipedia: interwiki link to your MediaWiki database...) to me... -Eep² 08:04, 29 July 2007 (CEST)

mode=none

Seems like this parameter should not display any results. I'm trying to do just a page count of how many items are in a particular category: {{#dpl:category=Games|mode=none|resultsheader=(%PAGES%)}}. But this results in:

(3)
Game 1
Game 2
Game 3

How do I get just a page count? -Eep² 22:23, 27 July 2007 (CEST)

take mode=userformat and do not specify listseparators. That will produce no results. 'mode=none' is kind of a relict of ancient times ... Gero 23:38, 27 July 2007 (CEST)
Doing that screws up bullets:
And if I have a superscript after it, it messes up even more:
I want the "(#)" to be in-line and not put blank lines after the output but, of course, that is only with "mode=inline", right? :/ Also, how would I get the last row in a table/list to be totals of the above rows/lists? -Eep² 05:22, 28 July 2007 (CEST)
You are right. If you want to have inline (#) sums of articles DPL must not add an implicit newline after ther reultsheader or resultsfooter. So I removed that. As a consequence you must add a \n after a resultsheader if you want to create a headline with ==x== notation. That is acceptable, I think. Version 1.3.1 has this modification as you see. PLease have a look at Test resultsheader!
Gero 08:13, 28 July 2007 (CEST)
Thanks for fixing this. -Eep² 22:07, 28 July 2007 (CEST)

example code within the manual

The example code at hlistattr (and some others) creates unwanted effects on the TOC table. I would rather see all examples as separate files, (a) the code of the example and (b) the actual example itself. The manual could then include the example code directly and with nowiki tags around so that the code need not be duplicated. "selfhtml" shows how to do this. I suggest that you change hlistattr that way and that we agree on a standard way how to do it based on that example. Gero 14:29, 17 August 2007 (CEST)

Inserting spaces and comma in the output

  • I'd like to simulate the mode=inline behaviour, but removing the namespace of the links.

So I wrote {{#dpl:category=MyItems|listseparators=,[[%PAGE%|%TITLE%]] ,,}} which correctly renders Item1 Item2 Item3 Item4, but how to insert a comma between the items ? Yopai 20:44, 20 August 2007 (CEST)

I solved it (if any better solution, I'll be glad to take it) by hacking the code :
  • adding a parameter inlinetext=,%SPC% before the "listseparators" parameter
  • modifying the code so the "listseparators" doesn't empty the "inlinetext" variable.
  • replacing, inside inlinetext, '%SPC%' with ' ' (I also had the problem of spaces being trimmed when used in inlinetext, and I did'nt want to use   which would have cause my line not to break)
Hope it can be useful. Yopai 20:44, 20 August 2007 (CEST)

Reply

I think there is no nbeed to change the php code. Just use &#44; as an alias for a comma; you can keep the space after that 'comma', so line wrapping will work normally:

{{#dpl:category=MyItems|listseparators=,[[%PAGE%|%TITLE%]]&#44; ,,}}

Gero 18:17, 22 August 2007 (CEST)

Replace category lists

How can I replace the default MediaWiki category lists with DPL-generated lists instead? Also, I'd like lists to optionally sort mixed-case alphabetically (not separating CAPS and lowercase letters)--is that possible with DPL? And I'd like to have the columns equal size like they are on http://www.tnlc.com/wiki/index.php?title=Category:Templates in MediaWiki's default category list but not in the DPL-generated list. -Eep² 15:09, 29 August 2007 (CEST)

I did not think about replacing the default category lists so far. Maybe there is a hook for that? If you find a canonic/legal way to do it I might be able to offer taht feature. But I will not offer a solution that would require to patch mediawiki source code.
Why not?
Regarding case-insensitive sorting: There seems to be a simple way to do it with SQL. So I will be able to offer that option in one of the next releases.
OK, how is it done--do you have a link? I'd like to change how MediaWiki sorts things by default throughout anyway.
o.k. with 1.3.6 Gero 16:53, 30 August 2007 (CEST)
changing mediawiki as a whole requires direct changes to the database and/or to MySQL (defining own collation sequences). There is literature on that in the MySQL world ... Gero 16:53, 30 August 2007 (CEST)
Thanks.
Equal size for columns or width=100% is possible with 'rowcolformat'. I changed your example accordingly.
Gero 21:53, 29 August 2007 (CEST)
Thanks; I corrected the parameter and added more info to it but how do I get equal column widths? I tried rowcolformat=cols=3 but that doesn't seem to work. I guess I have to set specific widths for each column--is there a way to set a width for all columns (without having to specify a width for each column)? -Eep² 23:09, 29 August 2007 (CEST)
you may want to try setting colwidth to 33%. Read SELFHTML to understand whether this works.Gero 16:53, 30 August 2007 (CEST)
SELFHTML? A link would be nice since there is no colwidth HTML tag... -Eep² 22:51, 30 August 2007 (CEST)
selfhtml is a wonderful online manual explaining everything about html, JavaScript, css etc. Its root is in Austria, so it is in German. There used to be an English version but it may be outdated. Anyway, you would have to use DPL rowcolformat to assign a special class to your table and then you should be able to define css properties for that class in the article mediawiki:Common.css. At least I think it should work like that. You have to find out yourself. If it works it would be nice if you published the solution under FAQ... 09:11, 31 August 2007 (CEST)
Well, unfortunately, I don't know German (or French) so SelfHTML (that wasn't so hard to put a link to, now was it?) is out for me. Doing a simple Google search for "colwidth" turned up non-HTML syntax unusable in MediaWiki and with DPL. How would I define a class for mode=category? Oh and thanks for adding the other booleans. -Eep² 09:43, 31 August 2007 (CEST)

(You may have to clear thebrowser cache or use CTRL-F5 to display the above table correctly). Gero 14:02, 31 August 2007 (CEST)

{{#dpl:titlematch=N%|columns=3|rowcolformat=class=dpl3columns}} is not for mode=category...and there's 4 columns. -Eep² 15:05, 31 August 2007 (CEST)

Compare the template field values??

Is it possible to compare the field values of two same templates: One template in a category and one in those articles belonging to this category. For example, Template:Country in a category has population field with value of 15million. In an article, there is also a Template:Country with population field. What I want to do is that if the population value changes, then the article meets the criteria and will be output in a table to show the changed value like this:
Country|population|
catname|15million|
article1|17million|
article2|18million|
Any idea? Thanks, Guoqian 10:41, 1 September 2007

Answer

This is quite easy to do. Either you write querty which simply picks up all template calls for Population (regardless where they may be) or you build a set of two queries which are directly reflecting your problem structure. I think your example may be of soime relevance to others, so I created some test files and a Population Checker template. See Category:Country. Gero 11:10, 2 September 2007 (CEST)

Question1

This is nice but it seems still showing those articles having the same value with its category. See Template:Population Checker, I added an article Nig3 having population of 5.3 million. I donot want to show this article in table because the population value is not changed. I mean I only need articles with changed value to be output in a table. Can DPL filter out this one? Thanks, - Guoqian 8:59, 2 September 2007

Reply

It is possible. You would have to use a DPL query which outputs just the value of a single parameter (which is possible) and use that result as an argument for the 'includematch' parameter of a second DPL query. I suggest that you try yourself. Gero 20:36, 2 September 2007 (CEST)

Question2

OK. I added a Template:Population.dpl2 to show a single population figure and made a DPL query in Template:Country Population to get the value of a specific field for a specific category. In Template:Population Check, I call template Country Population as the parameter of includenotmatch. It works well if I pass a specific country name. See Template:Population Checker
One question is that how I can pass the field name (country name) to template Country Population without a specific value. I mean different articles have different country names or one article contains different country names.
Another question is that how I can make the country names as column headers and population figures as row entries like:
article|Nigunda|Tosuna
catname|5.3 Mio|2.1 Mio
Nig1|7 Mio|-
Nig2|2.1 Mio|-
Nig5|-|3.2Mio
Nig10|3.3 Mio|4.3 Mio
Is this possible by using DPL? Thanks. -Guoqian 5:01pm, 3 September 2007

Reply 2

  1. If you simply want to get the value of one template parameter you don´t have to invent an extra template. Just put the field name or field number after the template (preceded by a colon). I changed your code in template Country Population accordingly.
  2. I did not know that in your case an article could have statements about more than one country. Therefore the current design is not ideal and would become too complicated if you extended it via, let´s say, another DPL loop around the top level checker.
  3. In your case it is much easier to pick all invocations of the Population template (regardless of where they may occur), then output article name, country name and figure and finally throw it into a sortable list. Then click once on the country column and you will have the conflicting entries right beneath each other.
  4. Could you try that and show us the result here?
  5. As for your last question: As far as I am aware of, the current design of DPL does not allow flipping columns and rows (in neither approach). But sometimes people come up with things I didn´t think of. So, who knows ..
Well, would you consider adding this functionality in DPL please? I really need this for my comparison table so it doesn't get excessively wide, causing scrunched columns or horizontal scrolling! -Eep² 00:36, 5 September 2007 (CEST)

--Gero 19:46, 4 September 2007 (CEST)

Question 3

  1. In your second point, you did not point out how a dynamic value can be set as an input value for a template call in includematch. Without this support, I can not filter out other population figure having the same value with its category. You mentioned we may need a new design. Can you give an example design for this problem?
  2. In my use case, Category:Country also has several subcategories like Category:CountryA and Category:CountryB. I donot want these subcategories to be output in wikitable. How can I exclude these matches for subcategories?

This is a check of Country for consistency of population figures.


article country population
Category Country Nigunda 5.3 Mio
Category Country Tosuna 2.1 Mio
Category Nig1 Nigunda 5 Mio
Category Nig2 Nigunda 7 Mio
Category Nig4 Tosuna 2.1 Mio

--Thanks, Guoqian 9:01pm, 4 September 2007

Use nottitlematch. -Eep² 04:40, 5 September 2007 (CEST)
How does this work? You mean I put nottitlematch=%CountryA%|%CountryB% in the creteria list?