Неоднократное использование $link в формировании меню

#
Неоднократное использование $link в формировании меню
Меню формируется табличкой, в таблице два столбца. 1 столбец - текстовые ссылки, второй - картинка.
Вопрос: как сделать так, что бы и на картинку можно было нажать?

Пробую где-то так:
<tr><td class="td_sep" colspan="2"><img src="/images/menu_line.jpg" /></td></tr>
<tr><td>


<!-- Показывать ссылку, или нет -->
<xsl:choose>
<xsl:when test="show_link = 1">
<!-- Определяем адрес ссылки -->
<xsl:variable name="link">
<xsl:choose>
<!-- Если внешняя ссылка -->
<xsl:when test="is_external_link = 1">
<xsl:value-of disable-output-escaping="yes" select="external_link"/>
</xsl:when>
<!-- Иначе если внутренняя ссылка -->
<xsl:otherwise>
<xsl:value-of disable-output-escaping="yes" select="link"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<!-- Ссылка на пункт меню -->
<a href="{$link}" title="{name}">
<!-- Выделяем текущую страницу добавлением к <a> стиля font-weight: bold, если это текущая страница, либо у нее есть ребенок с атрибутом id, равным текущей группе. -->
<xsl:if test="current_structure_id = @id or count(.//structure[@id=$current_structure_id]) = 1">
<xsl:attribute name="style">text-decoration: underline;</xsl:attribute>
</xsl:if>
<xsl:value-of disable-output-escaping="yes" select="name"/>
</a>
</xsl:when>
<!-- Если не показывать ссылку - выводим просто имя ссылки -->
<xsl:otherwise>
<xsl:value-of disable-output-escaping="yes" select="name"/>
</xsl:otherwise>
</xsl:choose>
</td><td>
<a href="{$link}">
<img src="/images/bullet.gif" />
</a>
</td></tr>

и не работает почему-то. Помогите пожалуйста, кто компетентен в этом вопросе.
Модератор
#
Re: Неоднократное использование $link в формировании меню
А что в коде готовом получается? Что содержит в себе ссылка?
#
Re: Неоднократное использование $link в формировании меню
В готовом коде должно быть что-то вроде
<tr><td><a href="/kontakty/" title="Контакты">Контакты</a></td><td><a href="/kontakty/"><img src="/images/bullet.gif" /></a></td></tr>


а получается
<tr><td><a href="/kontakty/" title="Контакты">Контакты</a></td><td><img src="/images/bullet.gif" /></td></tr>


кстати сгодиться также вариант такой: [/code]
<tr><td><a href="/kontakty/" title="Контакты">Контакты</a></td><td><img style="cursor: pointer;" onclick="window.location='/kontakty/'" src="/images/bullet.gif" /></td></tr>

принцип один и тот же, я думаю.

upd: извиняюсь, не уточнил - "что бы на картинку можно было нажать и ссылкой являлась та же ссылка, что и на текстовую рядом с ней"
Модератор
#
Re: Неоднократное использование $link в формировании меню
т.е. Ваш вставленный тэг <a href вообще отсутствует? Тогда уточняю, Вы уверены, что меняете тот XSL-шаблон?
#
Re: Неоднократное использование $link в формировании меню
мой тэг <a href не то чтобы отсутствовал, а когда я пишу как в первом посте с
<a href="{$link}">
<img src="/images/bullet.gif" />
</a>

то меню вообще не отображается и на его месте тексты ошибок xsl-шаблонов.

вот xsl вывода левого меню:
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
   
   <!-- ЛевоеМеню -->
   
   <xsl:template match="/document">
      <!-- <ul class="left_menu mp gray_link"> -->
         <table class="menu_tab">
            <!-- Выбираем узлы структуры первого уровня -->
            <xsl:apply-templates select="structure[show=1]"/>
         </table>
         <!-- </ul> -->
      
      <!-- Если вывод подменю -->
      <xsl:if test="submenu/node() and count(structure[show=1]) > 0">
         <!-- <hr /> -->
      </xsl:if>
      
   </xsl:template>
   
   <xsl:template match="structure">
      
      
      <!-- Запишем в константу ID структуры, данные для которой будут выводиться пользователю -->
      <xsl:variable name="current_structure_id" select="/document/structure/current_structure_id"/>
      
      <!-- Если первый элемент то убираем подчеркивание -->
      <xsl:if test="position() = 1">
         <!-- <li> -->
            <tr><td>
                  <!-- Показывать ссылку, или нет -->
                  <xsl:choose>
                     <xsl:when test="show_link = 1">
                        <!-- Определяем адрес ссылки -->
                        <xsl:variable name="link">
                           <xsl:choose>
                              <!-- Если внешняя ссылка -->
                              <xsl:when test="is_external_link = 1">
                                 <xsl:value-of disable-output-escaping="yes" select="external_link"/>
                              </xsl:when>
                              <!-- Иначе если внутренняя ссылка -->
                              <xsl:otherwise>
                                 <xsl:value-of disable-output-escaping="yes" select="link"/>
                              </xsl:otherwise>
                           </xsl:choose>
                        </xsl:variable>
                        <!-- Ссылка на пункт меню -->
                        <a href="{$link}" title="{name}">
                           <!--
                           Выделяем текущую страницу добавлением к <a> стиля font-weight: bold,
                              если это текущая страница, либо у нее есть ребенок с атрибутом id, равным текущей группе.   -->
                              <xsl:if test="current_structure_id = @id or count(.//structure[@id=$current_structure_id]) = 1">
                                 <xsl:attribute name="style">text-decoration: underline;</xsl:attribute>
                              </xsl:if>
                              <xsl:value-of disable-output-escaping="yes" select="name"/>
                           </a>
                        </xsl:when>
                        <!-- Если не показывать ссылку - выводим просто имя ссылки -->
                        <xsl:otherwise>
                           <xsl:value-of disable-output-escaping="yes" select="name"/>
                        </xsl:otherwise>
                     </xsl:choose>
                  </td>
                  <td>
                     <a href="{$link}">
                        <img src="/images/bullet.gif" />
                     </a>
               </td></tr>
            </xsl:if>
            
            <xsl:if test="not (position() = 1)">
               <!-- <li> -->
               <tr><td class="td_sep" colspan="2"><img src="/images/menu_line.jpg" /></td></tr>
                  <tr><td>
                        <!-- Показывать ссылку, или нет -->
                        <xsl:choose>
                           <xsl:when test="show_link = 1">
                              <!-- Определяем адрес ссылки -->
                              <xsl:variable name="link">
                                 <xsl:choose>
                                    <!-- Если внешняя ссылка -->
                                    <xsl:when test="is_external_link = 1">
                                       <xsl:value-of disable-output-escaping="yes" select="external_link"/>
                                    </xsl:when>
                                    <!-- Иначе если внутренняя ссылка -->
                                    <xsl:otherwise>
                                       <xsl:value-of disable-output-escaping="yes" select="link"/>
                                    </xsl:otherwise>
                                 </xsl:choose>
                              </xsl:variable>
                              <!-- Ссылка на пункт меню -->
                              <a href="{$link}" title="{name}">
                                 <!--
                                 Выделяем текущую страницу добавлением к <a> стиля font-weight: bold,
                                    если это текущая страница, либо у нее есть ребенок с атрибутом id, равным текущей группе.   -->
                                    <xsl:if test="current_structure_id = @id or count(.//structure[@id=$current_structure_id]) = 1">
                                       <xsl:attribute name="style">text-decoration: underline;</xsl:attribute>
                                    </xsl:if>
                                    <xsl:value-of disable-output-escaping="yes" select="name"/>
                                 </a>
                              </xsl:when>
                              <!-- Если не показывать ссылку - выводим просто имя ссылки -->
                              <xsl:otherwise>
                                 <xsl:value-of disable-output-escaping="yes" select="name"/>
                              </xsl:otherwise>
                           </xsl:choose>
                        </td>
                        <td>
                           <a href="{$link}">
                              <img src="/images/bullet.gif" />
                           </a>
                     </td></tr>
                  </xsl:if>
                  
               </xsl:template>
            </xsl:stylesheet>
Модератор
#
Re: Неоднократное использование $link в формировании меню
gl12 писал(а):
то меню вообще не отображается и на его месте тексты ошибок xsl-шаблонов.

А почему об этом Вы сообщаете только сейчас?
#
Re: Неоднократное использование $link в формировании меню
Вы меня извините. Просто такое бывает, что хочется сказать все и сразу, а получается, что чего-то не договариваешь
Т.е. все же использовать переменную $link дважды нельзя?
Брать на счет недостатков языка xsl? =)
Авторизация