Критическая ошибка

#
Критическая ошибка
Здравствуйте! возникает такая проблема - при переходе по внутренним ссылкам на главной странице
периодически выскакивает ошибка

Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 825241 bytes) in /home/alterge3/public_html/nsktekstil/modules/InformationSystems/InformationSystems.class.php on line 0

при обновлении страницы все опять какое то время (4-5 переходов) работает нормально, в чем проблема и как с этим бороться?
Модератор
#
Re: Критическая ошибка
#
Re: Критическая ошибка
Пытался побороть проблему с инфосистемой вопросы-ответы, ковырял XSL (при переходе к ответам возле каждого ответа отображалась не нужная форма ввода, не мог её убрать, а оставить только ту основную, что ниже). Видимо, чего-то поломал, и теперь на странице с ответами (ОтображениеВопроса) выводится:
Предупреждение: DOMDocument::loadXML() [domdocument.loadxml]: StartTag: invalid element name in Entity, line: 16 в файле /modules/Xsl/Xsl.class.php (строка 267)

Как это понимать и где чинить? XSL ОтображениеВопроса я пробовал восстанавливать, заменяя и моей когда-то рабочей версией, и версией с демо-сайта, ничего не изменилось.

И ещё немного не в тему, но чтоб два раза не вставать. Можно ли настроить координаты расположения панели управления на сайте? Той, которая по дефолту в левом верхнем углу сайта появляется. Или ещё лучше - сделать, чтобы она запоминала, в каком месте её последний раз оставили.
#
Re: Критическая ошибка
ProVal, приведите код XSL-шаблона "ОтображениеВопроса" полностью.
ProVal писал(а):
Можно ли настроить координаты расположения панели управления на сайте?
- в текущей версии системы такой возможности, к сожалению, нет. Мы постараемся предусмотреть ее в 6-ой версии системы.
#
Re: Критическая ошибка

<?xml version="1.0" encoding="utf-8"?>
<!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="utf-8" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>
   <xsl:template match="/">
      <xsl:apply-templates select="/document/item"/>
   </xsl:template>
   <!-- ОтображениеВопроса -->
   <xsl:template match="/document/item">
      <!-- Получаем ID родительской группы и записываем в переменную $parent_group_id -->
      <xsl:variable name="parent_group_id" select="/document/information_system/parent_group_id"/>
<h4><a href="javascript:history.back()"><button>< <p style="display: inline; text-decoration: none;">Вернуться к вопросам</p></button></a></h4>
      <div>
         <!-- Дата информационного элемента -->
         <div style="margin-bottom: 5px; padding: 3px; border-radius: 5px; background: #ffffff; ">
            <xsl:value-of disable-output-escaping="yes" select="item_date"/>
         </div>
         <h3 style="display: inline;"><xsl:value-of disable-output-escaping="yes" select="item_name"/></h3>
         <!-- ========= -->
         <!-- Путь к группе -->
         <!-- ========= -->
         <xsl:apply-templates select="//group[@id=$parent_group_id]" mode="goup_path"/>
         <p style="display: inline;">
            <!-- Выводим сообщение -->
            <xsl:if test="/document/message/node()">
               <xsl:value-of disable-output-escaping="yes" select="/document/message"/>
            </xsl:if>
         </p>
         <!-- Фотогафия к информационному элементу -->
         <xsl:if test="item_small_image!=''">
            <!-- Проверяем задан ли путь к файлу большого изображения -->
            <xsl:if test="item_image!=''">
               <xsl:variable name="srcpath" select="item_image"/>
               <a href="{item_image}" target="_blank" onclick="ShowImgWindow('{item_name}','/{$srcpath}', {item_image/@width}, {item_image/@height}); return false;">
                  <img align="left" src="{item_small_image}" style="margin-right: 10px; margin-bottom: 10px"/>
               </a>
            </xsl:if>
            <xsl:if test="item_image =''">
               <img align="left" src="{item_small_image}" style="margin-right: 10px; margin-bottom: 10px"/>
            </xsl:if>
         </xsl:if>
         <!-- Текст информационного элемента -->
         <p>
            <xsl:value-of disable-output-escaping="yes" select="item_text"/>
         </p>
      </div>
      <hr />
      <!-- Отображение комментариев  -->
      <xsl:if test="count(item_comments/comment) &gt; 0">
         <p class="title">Ответы</p>
         <xsl:apply-templates select="item_comments/comment"/>
      </xsl:if>
      <br />
      <!-- Если разрешено отображать формы добавления комментария
      1 - Только авторизированным
      2 - Всем -->
      <xsl:if test="/document/show_add_comments/node() and ((/document/show_add_comments = 1 and /document/site_user_id &gt; 0)  or /document/show_add_comments = 2)">
         <br/>
         <div id="ShowAddComment">
         <a href="javascript:void(0)" onclick="javascript:cr('AddComment')"><button>Добавить ответ</button></a>
         </div><br/>
         <div id="AddComment" style="display: none">
            <xsl:call-template name="AddCommentForm"></xsl:call-template>
         </div>
      </xsl:if>
   </xsl:template>
   <!-- Шаблон вывода добавления комментария -->
   <xsl:template name="AddCommentForm">
      <xsl:param name="comment_id" select="0"/>
      <!-- Заполняем форму -->
      <xsl:variable name="subject">
         <xsl:if test="/document/form_parent_id/node() and /document/form_parent_id/node() and /document/form_parent_id= $comment_id">
            <xsl:value-of select="/document/form_subject"/>
         </xsl:if>
      </xsl:variable>
      <xsl:variable name="email">
         <xsl:if test="/document/form_user_email/node() and /document/form_parent_id/node() and /document/form_parent_id= $comment_id">
            <xsl:value-of select="/document/form_user_email"/>
         </xsl:if>
      </xsl:variable>
      <xsl:variable name="text">
         <xsl:if test="/document/form_text/node() and /document/form_parent_id/node() and /document/form_parent_id= $comment_id">
            <xsl:value-of disable-output-escaping="yes" select="/document/form_text"/>
         </xsl:if>
      </xsl:variable>
      <xsl:variable name="name">
         <xsl:if test="/document/form_user_name/node() and /document/form_parent_id/node() and /document/form_parent_id= $comment_id">
            <xsl:value-of select="/document/form_user_name"/>
         </xsl:if>
      </xsl:variable>
      <div class="comment">
         <div class="tl"></div>
         <div class="tr"></div>
         <div class="bl"></div>
         <div class="br"></div>
      </div><br/>
            <!--Отображение формы добавления комментария-->
            <form action="{/document/url}" name="comment_form_0{comment_id}" method="post">
               <!-- Авторизированным не показываем -->
               <xsl:if test="/document/site_user_id = 0">
                  <script>
                     // Функция для отображения лейбла
                     function ShowLabel ( label, input ) {
                     if ( document.getElementById( input ).value == '' )
                     document.getElementById( label ).style.display = '';
                     }
                     // Функция для скрытия лейбла
                     function HideLabel ( label, input ) {
                     document.getElementById( label ).style.display = 'none';
                     document.getElementById( input ).focus(); // Если кликали по лейблу, фокус на поле не перейдет. Надо поставить вручную
                     }
                  </script>
                  <br/>
                  <div style="position:relative;">
                     <input id="comment_autor_input" class="text" type="text" name="comment_autor" size="70" onfocus="HideLabel('comment_autor_label', 'comment_autor_input');" onblur="ShowLabel('comment_autor_label', 'comment_autor_input');"  value="{$name}" />
                     <label id="comment_autor_label" onClick="HideLabel('comment_autor_label', 'comment_autor_input');" style="position:absolute; left: 2px; color: #909090;">Имя</label>
                  </div>
                  <div style="position:relative;">
                     <input id="email{$comment_id}" type="text" size="70" name="comment_email" value="{$email}"
                        onfocus="HideLabel('email{$comment_id}_label', 'email{$comment_id}');"
                        onblur="ShowLabel('email{$comment_id}_label', 'email{$comment_id}'); FieldCheckEmail(this.id)"
                        onkeyup="FieldCheckEmail(this.id)"
                        onkeydown="FieldCheckEmail(this.id)" />
                     <label id="email{$comment_id}_label" onClick="HideLabel('email{$comment_id}_label', 'email{$comment_id}');" style="position:absolute; left: 2px; color: #909090;">Email</label>
                     <div id="error_email{$comment_id}"></div>
                  </div>
               </xsl:if>
               <div style="position:relative;">
                  <input id="comment_subject_input" class="text" type="text" name="comment_subject" size="70" onfocus="HideLabel('comment_subject_label', 'comment_subject_input');" onblur="ShowLabel('comment_subject_label', 'comment_subject_input');"  value="{$subject}" />
                  <label id="comment_subject_label" onClick="HideLabel('comment_subject_label', 'comment_subject_input');" style="position:absolute; left: 2px; color: #909090;">Тема</label>
               </div>
               <p>
                  Текст ответа
                  <br/>
                  <textarea name="comment_text" cols="68" rows="5" class="mceEditor"><xsl:value-of select="$text"/></textarea>
               </p>
               <!--<p>
                  Оценка
                  <br/>
                  <input type="hidden" name="comment_grade" value="0"/>
                  <xsl:variable name="ul_id">
                     <xsl:choose>
                        <xsl:when test="comment_id > 0"><xsl:value-of select="comment_id"/>_stars</xsl:when>
                        <xsl:otherwise>0_stars</xsl:otherwise>
                     </xsl:choose>
                  </xsl:variable>
                  <ul id="{$ul_id}" class="stars">
                     <li onclick="set_rate(this.id, this.id)" onmouseover="set_rate(this.id, '-1')" onmouseout="set_rate(this.id, 0)" id="{comment_id}1_star_1"></li>
                     <li onclick="set_rate(this.id, this.id)" onmouseover="set_rate(this.id, '-1')" onmouseout="set_rate(this.id, 0)" id="{comment_id}2_star_2"></li>
                     <li onclick="set_rate(this.id, this.id)" onmouseover="set_rate(this.id, '-1')" onmouseout="set_rate(this.id, 0)" id="{comment_id}3_star_3"></li>
                     <li onclick="set_rate(this.id, this.id)" onmouseover="set_rate(this.id, '-1')" onmouseout="set_rate(this.id, 0)" id="{comment_id}4_star_4"></li>
                     <li onclick="set_rate(this.id, this.id)" onmouseover="set_rate(this.id, '-1')" onmouseout="set_rate(this.id, 0)" id="{comment_id}5_star_5"></li>
                  </ul>
               </p>-->
               <!-- Обработка CAPTCHA -->
               <xsl:if test="//captcha_key != 0 and /document/site_user_id = 0">
                  <p>Контрольные цифры
                     <sup>
                        <font color="red">*</font>
                  </sup></p>
                  <div style="float: left">
                     <img id="comment_{$comment_id}" class="image" src="/captcha.php?get_captcha={//captcha_key}{$comment_id}&amp;height=30&amp;width=100" title="Код подтверждения" name="captcha"/>
                  </div>
                  <div id="captcha" style="clear:both;">
                     <img style="border: 0px" src="/hostcmsfiles/images/refresh.gif" /> <a href="javascript:void(0);" onclick="ReNewCaptchaById('comment_{$comment_id}', '{//captcha_key}{$comment_id}', 30); return false;">Показать другое число</a>
                  </div>
                  <div style="float: left;margin-top: 5px">
                     <input type="hidden" name="captcha_key" value="{//captcha_key}{$comment_id}"/>
                     <input type="text" name="captcha_keystring" size="15"/>
                  </div>
                  <div id="captcha" style="clear:both;margin-bottom:10px;">
                     Введите число, которое указано выше.
                  </div>
               </xsl:if>
               <xsl:if test="$comment_id != 0">
                  <input type="hidden" name="comment_parent_id" value="{comment_id}"/>
               </xsl:if>   
               <p>
                  <input id="submit_email{$comment_id}" type="submit" name="add_comment" value="Опубликовать"/>
               </p>
         </form>
   </xsl:template>
   <!-- ======================================================== -->
   <!-- Шаблон выводит рекурсивно ссылки на группы инф. элемента -->
   <!-- ======================================================== -->
   <xsl:template match="group" mode="goup_path">
      <xsl:variable name="parent_id" select="@parent_id"/>
      <!-- Выбираем рекурсивно вышестоящую группу -->
      <xsl:apply-templates select="//group[@id=$parent_id]" mode="goup_path"/>
      <xsl:if test="@parent_id=0">
         <a href="{/document/information_system/url}">
            <xsl:value-of disable-output-escaping="yes" select="/document/information_system/name"/>
         </a>
      </xsl:if>
      <span class="path_arrow">&#x2192;</span>
      <a href="{/document/information_system/url}{fullpath}">
         <xsl:value-of disable-output-escaping="yes" select="name"/>
      </a>
   </xsl:template>
   <!-- Отображение комментариев -->
   <xsl:template match="comment">
      <div style="margin-right: 10px; margin-bottom: 20px; padding: 3px; border-radius: 10px; width: 100%; background: #e0e0e0;">
         <div class="comment_desc" style="margin-bottom: 5px; padding: 3px; border-radius: 5px; background: #ffffff; ">
            <xsl:choose>
               <!-- Комментарий добавил авторизированный пользователь -->
               <xsl:when test="site_user_login/node()">
                  <a href="/users/info/{site_user_login}/" class="c_u_l">
                     <xsl:value-of select="site_user_login"/>
                  </a>
               </xsl:when>
               <!-- Комментарй добавил неавторизированный пользователь -->
               <xsl:otherwise>
                  <xsl:value-of select="comment_fio"/></xsl:otherwise>
            </xsl:choose>&#xA0;·&#xA0;<xsl:value-of select="comment_datetime"/>&#xA0;·&#xA0;<xsl:if
               test="/document/show_add_comments/node()
               and ((/document/show_add_comments = 1 and /document/site_user_id > 0)
      or /document/show_add_comments = 2)"><!--<a href="javascript:cr('cr_{comment_id}');">ответить</a>&#xA0;·&#xA0;--></xsl:if><a href="{/document/item/item_path}#comment{comment_id}" title="ссылка">#</a>
         </div>
         <!-- Отображаем комментарий, если задан текст или тема комментария -->
         <xsl:if test="comment_text != '' or comment_subject != ''">
            <a name="comment{comment_id}"></a>
            <div class="comment" id="comment{comment_id}">
               <div class="tl"></div>
               <div class="tr"></div>
               <div class="bl"></div>
               <div class="br"></div>
               <xsl:if test="comment_subject != ''">
                  <div>
                     <strong>
                        <xsl:value-of select="comment_subject"/>
                     </strong>
                  </div>
               </xsl:if>
               <xsl:value-of select="comment_text" disable-output-escaping="yes"/>
               <!-- Оценка комментария -->
               <xsl:if test="comment_grade != 0">
                  <div>Оценка:
                     <xsl:call-template name="show_average_grade">
                        <xsl:with-param name="grade" select="comment_grade"/>
                        <xsl:with-param name="const_grade" select="5"/>
                     </xsl:call-template>
                  </div>
               </xsl:if>
            </div>
            <!-- Отображаем только авторизированным пользователям -->
            <xsl:if test="/document/show_add_comments/node() and ((/document/show_add_comments = 1 and /document/site_user_id > 0) or /document/show_add_comments = 2)">
               <div class="cr" id="cr_{comment_id}">
                  <xsl:call-template name="AddCommentForm">
                     <xsl:with-param name="comment_id" select="comment_id"/>
                  </xsl:call-template>
               </div>
            </xsl:if>
            <!-- Выбираем дочерние комментарии -->
            <xsl:if test="count(comment) > 0">
               <div class="csd">
                  <xsl:apply-templates select="comment"/>
                  
               </div>
            </xsl:if>
      </xsl:if></div>
   </xsl:template>
   <!-- Вывод рейтинга -->
   <xsl:template name="show_average_grade">
      <xsl:param name="grade" select="0"/>
      <xsl:param name="const_grade" select="0"/>
      <!-- Чтобы избежать зацикливания -->
      <xsl:variable name="current_grade" select="$grade * 1"/>
      <xsl:choose>
         <!-- Если число целое -->
         <xsl:when test="floor($current_grade) = $current_grade and not($const_grade &gt; ceiling($current_grade))">
            <xsl:if test="$current_grade - 1 &gt; 0">
               <xsl:call-template name="show_average_grade">
                  <xsl:with-param name="grade" select="$current_grade - 1"/>
                  <xsl:with-param name="const_grade" select="$const_grade - 1"/>
               </xsl:call-template>
            </xsl:if>
            <xsl:if test="$current_grade != 0">
               <img src="/hostcmsfiles/images/stars_single.gif"/>
            </xsl:if>
         </xsl:when>
         <xsl:when test="$current_grade != 0 and not($const_grade &gt; ceiling($current_grade))">
            <xsl:if test="$current_grade - 0.5 &gt; 0">
               <xsl:call-template name="show_average_grade">
                  <xsl:with-param name="grade" select="$current_grade - 0.5"/>
                  <xsl:with-param name="const_grade" select="$const_grade - 1"/>
               </xsl:call-template>
            </xsl:if>
            <img src="/hostcmsfiles/images/stars_half.gif"/>
         </xsl:when>
         <!-- Выводим серые звездочки, пока текущая позиция не дойдет то значения, увеличенного до целого -->
         <xsl:otherwise>
            <xsl:call-template name="show_average_grade">
               <xsl:with-param name="grade" select="$current_grade"/>
               <xsl:with-param name="const_grade" select="$const_grade - 1"/>
            </xsl:call-template>
            <img src="/hostcmsfiles/images/stars_gray.gif"/>
         </xsl:otherwise>
      </xsl:choose>
   </xsl:template>
</xsl:stylesheet>
#
Re: Критическая ошибка
Как вообще подобные сообщения об ошибках понимать?
Модератор
#
Re: Критическая ошибка
Причина проблемы в строке:

<h4><a href="javascript:history.back()"><button>< <p style="display: inline; text-decoration: none;">Вернуться к вопросам</p></button></a></h4>


Уберите её или закомментируйте.
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Критическая ошибка
о_О Внезапно, да. Лишняя открывающая скобка < откуда-то взялась, хотя эту часть кода я точно не трогал... Да и с демо-сайта заменял же тоже. Всё страньше и страньше.
Ладно, пока всё работает - спасибо)
Модератор
#
Re: Критическая ошибка
Пожалуйста.
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
Авторизация