parser in #set

From semantic-mediawiki.org

This is the code that sets the property:

{{#set:Описание модели={{{!}} class="oritable" width="100%"
 {{!}}-
 {{!}}{{#if:{{{шагов|}}}|({{{шагов|}}})|}} ''{{{название модели|}}}'' {{#if:{{{opus|}}}|(op.{{{opus|}}}{{#if:{{{ver_opus|}}}| v.{{{ver_opus|}}}|}}{{#if:{{{num_opus|}}}|-{{{num_opus|}}}|}})|}} {{#if: {{{konkurs|}}}|([[{{{konkurs|}}}{{!}}{{{num_tur|}}} тур]])|}}
 {{!}}-
 {{!}}{{#if:{{{источник|}}}|[[{{{источник|}}}]]|~ ~ ~}} {{#if:{{{страница|}}}|(стр.{{{страница|}}})}}
 {{#if:{{{источники|}}}|{{!}}-
 {{!}} & ({{#arraymap:{{{источники|}}}|,|x|[[x]]}})}}
 {{#if:{{{автор|}}}|{{!}}- 
 {{!}}[[{{{автор|}}}]]}}
 {{#if:{{{addtomodel|}}}|{{!}}-
 {{!}}({{{addtomodel|}}}{{#if:{{{formattomodel|}}}| + {{{formattomodel|}}}}})|}}
 {{!}}}
 }}

It is called from within a template hence the named parametres.

This wikicode is almost undebuggable. Sir, I can only suggest:

  • copy it into a separate template, check its calls with different combinations of empty and non-empty parametres, and comment out fragments of the template (using binary search) until the source of trouble is found;
  • replace wiki markup for the table with pure HTML;
  • upgrade to the last stable versions of MW and SMW.
16:10, 6 January 2013

Thanks for reply!

1. First, I am upgrade wiki to v.1.20 and SMW to 1.8. - my query not displayed. Now I use on local SMF 1.7.1

2. Yes, I did it. And find problem with parser

{{#set:Описание модели= ''{{{название модели|}}}'' }} - work is good

{{#set:Описание модели= {{#if:{{{var|}}}|({{{var|}}})|}} ''{{{название модели|}}}'' }} - not worked. Property is empty.

If you have SMW > 1.7 - Can you check it out with parser function {{#if:{{{var|}}}|({{{var|}}})|}}

Thanks

16:30, 6 January 2013

If {{{название модели|}}} is empty, the apostrophes are interpreted as ''' ' and therefore unbalanced. Try replacing them with <em>. Not that I hope it would help (in a wiki I checked it in, the property was set anyway).

You could also try to replace emptyness in the else branch of the {{#if:}} call with a space or, better, <nowiki></nowiki>. {{#set:}} might break on empty substrings.

Worst of all, {{#set:}} may be called before {{#if:}}, not after as expected.

16:55, 6 January 2013

Видно, мне это не по силам сообразить. Перепробовал массу вариантов, и последовательно обновлял вики и SMF. Не сочтите за наглость - обратился к вам за помощью через http://www.formspring.me.

Попробую еще убрать апострофы.

17:19, 6 January 2013
 
Edited by author.
Last edit: 23:16, 6 January 2013

Anyway, look here. It works. So I recommend to upgrade anyway (don't forget to run the upgrade scripts for MW and SMW).

17:21, 6 January 2013

Действительно, работает. Большое спасибо. Я обновляю как раз-таки через web-интерфейс. Видимо в этом и кроется пробема. А по другому у меня не получится - я делаю все на локалке (windows). Или можно как-то по другому обновить (руководство по обновлению читал)

17:36, 6 January 2013

Тогда учтите, что семантические данные обновляются не мгновенно, а посредством рабочих заданий, что может привести ко временному отсутствию результатов в запросах SMW, пока данные не перегенерируются. Кстати, недавно в этой вики обсуждался вопрос (ссылки не могу найти) обновления, когда доступен только веб-интерфейс. Кажется, написали даже страницу справки. У кого-то тоже были затруднения.

Вообще, для полноценного администрирования вики его недостаточно. Подумайте об организации доступа через удалённый рабочий стол или по telnet.

17:45, 6 January 2013

В том то и дело. После обновления мои старые свойства сохраняются. Как только я делаю правку на модели - свойство обновляется и становится пустым. Ну и результат вы можете видеть сверху.

Про обновления - я так и делаю. Уже месяц вожусь с этим обновлением. Только сегодня вот решил спросить, мало надеясь, что ответят ).

17:58, 6 January 2013
 

Взгляните сюда.

17:49, 6 January 2013

Большое спасибо.

Так и делал раньше, но в 1.7.1 у меня не работала галерея с SMW 1.8.

Обновил до 1.8, потом таблицы, после добавил переменную $smwgDefaultStore = 'SMWSQLStore2';

Пока работает. Буду делать и дальше по инструкции.

20:15, 6 January 2013