forum.bitel.ru
http://forum.bitel.ru/

xsl шаблон дилеров
http://forum.bitel.ru/viewtopic.php?f=8&t=7551
Страница 2 из 3

Автор:  focus [ 18 янв 2013, 14:25 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

можете полный текст xsl выложить?

Автор:  Sputnik [ 18 янв 2013, 14:41 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

Код:
<!-- Так объявляем для себя переменную, куда будет сохраняться значения cid -->
 <xsl:variable name="mycid" select="/data/contract/@id" />
<!-- Так передаем это значение в SQL запрос  -->
 <xsl:variable name="query">select val from contract_parameter_type_7 where cid=<xsl:value-of select="$mycid"/> and pid=30</xsl:variable>
 <xsl:variable name="pod" select="sql:select( $query )"/>
<!-- Перебираем ответ -->
 <xsl:for-each select="$pod/row">
 <fo:block><xsl:value-of select="@val"/></fo:block>
 </xsl:for-each> 


все это вставляю в <xsl:template name="Contract">

Автор:  Sputnik [ 21 янв 2013, 11:37 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

Вот что хочу сделать
Код:
<tr>
<td class="td2"><b>Анкета</b></td>
<td class="td2">
<!-- Так объявляем для себя переменную, куда будет сохраняться значения cid -->
<xsl:variable name="mycid" select="/data/contract/@id" />
<!-- Так передаем это значение в SQL запрос -->
<xsl:variable name="query">SELECT val FROM contract_parameter_type_7 WHERE cid=<xsl:value-of select="$mycid"/> AND pid=30</xsl:variable>
<xsl:variable name="pod" select="sql:select( $query )"/>
<!-- Перебираем ответ -->
<xsl:for-each select="$pod/row">
<fo:block><xsl:value-of select="@val"/></fo:block>
</xsl:for-each>
<td class="td2">
<xsl:choose>
<xsl:when test="$pod = 53">
<td class="td2">Анкета заполнена</td>
</xsl:when>
<xsl:when test="$pod = 54">
<td class="td2">Анкета не заполнена</td>
</xsl:when>
</xsl:choose>
</td>
</td>
</tr>


Одна проблема. вытащить значение val из базы

Автор:  focus [ 21 янв 2013, 14:22 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

Код:
...
<xsl:for-each select="$pod/row">
<fo:block><xsl:value-of select="@val"/></fo:block>
</xsl:for-each>
...

Смешали и XSL-FO и HTML
<fo:block> замените на тэг из HTML <p> или <a>

Автор:  Sputnik [ 21 янв 2013, 16:12 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

Попробовал. Не помогло. </fo:block> копировал с твоего примера
Да и перебор здесь не особо вляет.

Тормозится на
Код:
<xsl:variable name="pod" select="sql:select( $query )"/>

Убирать перебор и эту строчку, то все оживает.

Может тут проблема?
Код:
<xsl:stylesheet   
   version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   xmlns:fo="http://www.w3.org/1999/XSL/Format"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns:xalan="http://xml.apache.org/xalan"
   xmlns:sql="bitel.billing.server.util.exslt.SQLQuery">
  <xsl:output encoding="windows-1251" method="html" indent="yes"/>

Автор:  skn [ 21 янв 2013, 17:31 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

Код:
<tr>
<td class="td2"><b>Анкета</b></td>
<td class="td2">
<!-- Так объявляем для себя переменную, куда будет сохраняться значения cid -->
<xsl:variable name="mycid" select="/data/contract/@id" />
<!-- Так передаем это значение в SQL запрос -->
<xsl:variable name="query">SELECT val FROM contract_parameter_type_7 WHERE cid=<xsl:value-of select="$mycid"/> AND pid=30</xsl:variable>
<xsl:variable name="rs" select="sql:select( $query )"/>
<!-- Перебираем ответ -->
<xsl:for-each select="$rs/row">
<xsl:variable name="pod" select="@val" />
</xsl:for-each>
<td class="td2">
<xsl:choose>
<xsl:when test="$pod = 53">
<td class="td2">Анкета заполнена</td>
</xsl:when>
<xsl:when test="$pod = 54">
<td class="td2">Анкета не заполнена</td>
</xsl:when>
</xsl:choose>
</td>
</td>
</tr>


если не сработает, давайте ошибки из логов

Автор:  Sputnik [ 21 янв 2013, 22:53 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

skn писал(а):
если не сработает, давайте ошибки из логов

server.error.log пустой
В server.out выходит только вот это
Код:
21.01.2013 22:35:37 org.apache.tomcat.util.http.Parameters processParameters
WARNING: Parameters: Invalid chunk ignored.


код просто скопировал и вставил в <xsl:template name="Contract"> после
Код:
<tr>
<td class="td3"><b>Комментарий</b></td>
<td class="td3">
<textarea name="comment" style="width:100%" rows="5"/></td>
</tr>

Никаких других ошибок нет :(

Мож весь xsl выложить лучше? чтобы так сказать полную картину разом увидеть? :)

Автор:  skn [ 22 янв 2013, 00:27 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

Sputnik писал(а):
Мож весь xsl выложить лучше? чтобы так сказать полную картину разом увидеть? :)


давайте

Автор:  focus [ 22 янв 2013, 07:07 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

Sputnik писал(а):
Мож весь xsl выложить лучше? чтобы так сказать полную картину разом увидеть? :)

focus писал(а):
можете полный текст xsl выложить?

Давайте.

Автор:  Sputnik [ 22 янв 2013, 09:25 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

Вот файл

Вложения:
idealer.txt [19.03 КБ]
Скачиваний: 490

Автор:  focus [ 22 янв 2013, 12:39 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

В данном случае
Код:
<!-- Перебираем ответ -->
<xsl:for-each select="$rs/row">
<xsl:variable name="pod" select="@val" />
</xsl:for-each>

область видимости у переменной pod ограничивается тэгом <xsl:for-each>

попробуйте вот так
Код:
<xsl:variable name="pod">
<xsl:for-each select="$rs/row">
    <xsl:value-of select="@val" />
</xsl:for-each>
</xsl:variable>

У меня подобная конструкция сработала в другом XSL.
Но тут нужно быть аккуратным вот в чем, в value переменной pod будут добавлены значения val всех записей. Если в нашем случае это должна быть 1 запись - то вроде, как нормально.
В других случаях, может быть неожиданный результат.

Автор:  Sputnik [ 22 янв 2013, 15:09 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

Нет. не сработала конструкция.
Тут похоже больше проблема в том что сама переменная rs в строке
Код:
<xsl:variable name="rs" select="sql:select( $query )"/>
не получает результаты запроса, хотя сам запрос в query передается. Получает правильный запрос
Код:
SELECT val FROM contract_parameter_type_7 WHERE cid=10 AND pid=30

Соответсвенно вопрос: почему эта переменная не получает результаты запроса? :?:

Автор:  focus [ 22 янв 2013, 16:55 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

Я вот так сделал в шаблоне card_inet.xsl
Код:
<xsl:variable name="mycid" select="/card/contract/@cid" />
<xsl:variable name="query">SELECT title FROM contract WHERE id=<xsl:value-of select="$mycid"/></xsl:variable>
<xsl:variable name="rs" select="sql:select( $query )"/>
<xsl:variable name="my_module_id">
   <xsl:for-each select="$rs/row">
      <xsl:value-of select="@title" />
   </xsl:for-each>
</xsl:variable>
<fo:block> = <xsl:value-of select="$my_module_id" /></fo:block>


У меня код работает, который указан выше в этом посте.
Если не получает результат - проверь, а если выполнить этот запрос к MySQL из какого-нибудь клиента, результат будет?
Может у Вас для cid=10 параметра с pid=30 и нет?

Автор:  Sputnik [ 22 янв 2013, 21:12 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

Запрос работает (см. скрин)
Это мой тестовый договор. там я разные значения могу ставить и 53 и 54 и NULL
Что может мешать? Проблема версии сервера?
Ведь все делаю как предлагалось, но на этапе выбора договора кнопка выбрать просто перестает реагировать и все :(

Вложения:
запрос.png
запрос.png [ 20.19 КБ | Просмотров: 15364 ]

Автор:  skn [ 22 янв 2013, 21:50 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

попробуйте методом исключение найти кусок кода на котором падает
удаляйте из xsl блоки и смотрите что выходит
попробуйте rs распечатать

Автор:  Sputnik [ 23 янв 2013, 09:00 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

skn писал(а):
попробуйте методом исключение найти кусок кода на котором падает
удаляйте из xsl блоки и смотрите что выходит
попробуйте rs распечатать


Писал об этом выше

Sputnik писал(а):
Тут похоже больше проблема в том что сама переменная rs в строке
Код:
<xsl:variable name="rs" select="sql:select( $query )"/>
не получает результаты запроса, хотя сам запрос в query передается. Получает правильный запрос
Код:
SELECT val FROM contract_parameter_type_7 WHERE cid=10 AND pid=30


rs уже не выводит

Автор:  skn [ 23 янв 2013, 12:32 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

а так

Код:
<xsl:variable name="rs" select="sql:select( select 1 )"/>

Автор:  Sputnik [ 23 янв 2013, 14:16 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

Тоже самое. На кнопке выбрать нет результатов.

Вот что получил с помощью Firebug
Выдало в первый раз
Код:
Метод Document.load() является устаревшим. Для его замены используйте объект DOM XMLHttpRequest. Более подробная информация доступна на https://developer.mozilla.org/en/XMLHttpRequest

xml.load(src);

потом больше не выводилось

другой раз вышло вот это
Код:
Метод Document.load() является устаревшим. Для его замены используйте объект DOM XMLHttpRequest. Более подробная информация доступна на https://developer.mozilla.org/en/XMLHttpRequest
path = new String(window.location);


А вообще тормозит запрос при нажатии на кнопку Выбрать на engine.js (строка 253)
Это чем то поможет :?:

Автор:  skn [ 23 янв 2013, 18:26 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

попробуйте так
Код:
<xsl:variable name="rs" select="sql:select( '$query' )"/>

Автор:  Sputnik [ 24 янв 2013, 09:38 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

нет :cry:

Автор:  Sputnik [ 25 янв 2013, 15:50 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

Идей больше ни у кого нет?

Автор:  skn [ 25 янв 2013, 18:51 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

с sql запросом тут не получиться, так как в отличие от ЛК преобразование xml+xsl=html делается не на стороне сервере, а в браузере клиента. А он ни про яву, sql, базы данных ни чего не знает.

Автор:  Sputnik [ 28 янв 2013, 08:57 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

skn писал(а):
с sql запросом тут не получиться, так как в отличие от ЛК преобразование xml+xsl=html делается не на стороне сервере, а в браузере клиента. А он ни про яву, sql, базы данных ни чего не знает.

А как тогда это можно сделать?

Автор:  focus [ 28 янв 2013, 09:50 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

Sputnik писал(а):
skn писал(а):
с sql запросом тут не получиться, так как в отличие от ЛК преобразование xml+xsl=html делается не на стороне сервере, а в браузере клиента. А он ни про яву, sql, базы данных ни чего не знает.

А как тогда это можно сделать?

Версия БГ какая?
Если 5.2, то можно попробовать модифицировать (дополнить) xml
Недавно в 5.2 появился функционал для создания Action через динамический код. Там можно и переопределить определенный action на свой, где модифицировать XML
На wiki доп. инфа.

skn, так можно будет?

Автор:  skn [ 28 янв 2013, 10:46 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

не факт, дилер работает через специальный сервлет и сделана ли в нем поддержка динам. акшенов с ходу не скажу

Автор:  Sputnik [ 28 янв 2013, 11:40 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

Моя версия БГ
Код:
Сервер: вер. 5.1 сборка 761 от 13.02.2012 20:36:09
os: Linux; java: Java HotSpot(TM) Server VM, v.1.6.0_26

card вер. 5.1 сборка 172 от 21.01.2012 01:57:32

Автор:  dimOn [ 28 янв 2013, 12:16 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

не, для сервлета idealer это не будет работать, он там сам по себе обрабатывает свои экшены

Автор:  focus [ 28 янв 2013, 12:35 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

Тогда Servlet Filter, который модифицирует ответ сервлета.
Вариант?

Автор:  skn [ 28 янв 2013, 15:23 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

focus писал(а):
Тогда Servlet Filter, который модифицирует ответ сервлета.
Вариант?


да или новый отдельный акшен для возврата этого параметра

Автор:  dimOn [ 28 янв 2013, 17:18 ]
Заголовок сообщения:  Re: xsl шаблон дилеров

Уже который можно написать кстати на дин.коде

Страница 2 из 3 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/