Основа - Доска обьявлений

#
Основа - Доска обьявлений
Добрый день!
Наш сайт (http://www.454646.ru/), основывается на доске обьявлений, но у вашей доски обьявлений мало функций.
Мне бы хотелось в подробностях узнать как сдеать:
1) 5 последних обьявлений на главной
2) Статистику, сколько за день было добавлено обьявлений
3) Убрать строку "Заголовок", и где все обьявления, выводить не заголовок, а выводить текст обьявления.
4) Сделать отдельно форму добавления обьявления, с выбором категорий.
5) Предоставить пользователю самому выбирать валюту ($, или руб.)
6) Очень нужна премодерация обьявлений.
Очень прошу, подробно распишите как и что делать, с примерами кода...(для тех кто в танке )
Модератор
#
Re: Основа - Доска обьявлений
goldar писал(а):
но у вашей доски обьявлений мало функций.

Вероятно Вы говорите о демонстрационной доске объявлений. Это гибкое решение позволяет сделать многое, все функции в демо-версию включить просто невозможно.

1) Вывод магазина с сортировкой по убыванию даты элемента, описание и примеры см. в API.
2) Можно просто запросом к базе данных.
3) Отредактируйте XSL-шаблон.
4) В форму добавления добавьте выпадающий список с рубриками, в динамической странице получайте ID рубрики и передавайте в метод добавления.
5) Аналогично добавляется в форму.
6) Элементарно, в коде динамической страницы активность вновь создаваемого элемента смените с 1 на 0.
#
Re: Основа - Доска обьявлений
У меня редакция "Малый бизнес", я не думаю что у меня демонстрационная версия.
1) хорошо посмотрю
2) это не обязательно, я посто думал если сделать легко, то зделаю, но не стоит...
3) А что именно отредактировать скажите пожалуйста
4) И это пожалуйста поподробнее, у меня нет такого превосходного опыта как у вас.
5) Здесь аналогично приведите пожалуйста код...
6) Ясно, спасибо большое!
#
Re: Основа - Доска обьявлений
1) Я смотрел API, но так и не нашёл. Ткните пожалуйста пальцем, а ещё лучше напишите здесь пример.
6) Я нашёл нужные мне вещи, но именно того что искал, т.е премодарацию не нашёл.
Как эта переменная называется?
Кстати, когда я применил, ошибка вылезла:
ПРЕДУПРЕЖЕДЕНИЕ: chmod() [function.chmod]: Operation not permitted в файле /home/wm9834/public_html/modules/lib/lib.class.php (строка 0)

Но файл сохранился нормально...на какой файл я не указал права?
#
Re: Основа - Доска обьявлений
Так ну всё с пунктами 4,6 я разобрался, немножко другим способом, но тож неплохо))
А вот самое важное сейчас пункт 1,3,5...надеюсь на вашу помощь.
Модератор
#
Re: Основа - Доска обьявлений
Для отображения 5 последних элементов необходимо задать следующие значения параметра $param метода ShowShop:

...

$param['current_group_id'] = false;
$param['items_begin'] = 0;
$param['items_on_page'] = 5;// число товаров, отображаемых на странице
$param['items_field_order'] = 'shop_items_catalog_date_time'; //Сортируем по дате добавления
$param['items_order'] = 'DESC'; // Сортируем по убыванию

$shop->ShowShop($current_shop_id, $xsl_catalog, $param, $external_propertys);


По 3-му пункту напишите подробнее, не совсем понятно, что необходимо изменить.

Для добавления в форму добавления объявления список валют необходимо сделать следующее:
1) в коде типовой динамической страницы Доски объявлений после кода

<tr>
   <td>
     E-mail<br />
     <input type="text" name="advertisement_email" size="70" value="<?php echo $advertisement_email;?>" />
    </td>
</tr>

вставить следующий код

<?php
// Получаем список валют, используемых в доске объявлений   
$result_currency = $shop->GetAllCurrency();         
?>
<tr>
<td>
   Валюта<br />
   <select name="advertisement_currency">
   <?php
   while($row_currency = mysql_fetch_assoc($result_currency))
   {
   ?>
   <option value="<?php echo $row_currency['shop_currency_id'];?>"><?php echo $row_currency['shop_currency_international_name'];?></option>
   <?php               
    }
   ?>
    </select>
  </td>
</tr>            
<?php


Также строку

$param['currency_id'] = 1;


Заменить на:

$param['currency_id'] = intval($_POST['advertisement_currency']);


#
Re: Основа - Доска обьявлений
Ну сейчас главное 1 пункт выполнить...остальные потом, вобщем я зделал так:
<?php

$shop = & singleton('shop');

$param = array();
// Заполняем первое условие
$element['type'] = 0;
$element['prefix'] = ' and ';
$element['name'] = 'shop_items_catalog_date_time';
$element['if'] = '>';

$DateClass = new DateClass();

// Вместо 7 подставить нужное число дней
$time = time() - 60 * 60 * 24 * 7;

$element['value'] = $DateClass->DateUnixToSQL($time);
$element['sufix'] = '';
$param['select'][] = $element;

$param['current_group_id'] = false;
$param['items_begin'] = 0;
$param['items_on_page'] = 5;
$param['items_field_order'] = 'shop_items_catalog_date_time'; //Сортируем по дате добавления
$param['items_order'] = 'DESC'; // Сортируем по убыванию

// Выводим элементы
$shop->ShowShop(2, 'ПоследниеОбьявленияНаГлавной', $param);
?>

Поставил я это в шаблон для главной страницы. А он мне взял и показал все директории, и форму для сортировки, ну а уже в самом низу последние обьявления.
Я создал XSL-шаблон "ПоследниеОбьявленияНаГлавной", и скопировал туда код из XSL-шаблона "СписокОбъявлений". Скажите пожалуйста что от-туда надо удалить чтобы не высвечивались категории, и форма сортировки...Я думаю это решит проблему...
Модератор
#
Re: Основа - Доска обьявлений
Ниже приведен код стандартного 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:decimal-format name="my" decimal-separator="," grouping-separator=" "/>
   
   <xsl:template match="/">
      <xsl:apply-templates select="/shop"/>
   </xsl:template>
   
   <!-- Шаблон для магазина -->
   <xsl:template match="/shop">
      <!-- Получаем ID родительской группы и записываем в переменную $parent_group_id -->
      <xsl:variable name="parent_group_id" select="@current_group_id"/>
      
      <!-- Если в находимся корне - выводим название информационной системы -->
      <xsl:if test="$parent_group_id=0">
         <h1>
            <xsl:value-of disable-output-escaping="yes" select="name"/>
         </h1>
      </xsl:if>
      
      <!-- Если в находимся в группе - выводим название группы -->
      <xsl:if test="$parent_group_id!=0">
         <h1>
            <xsl:value-of disable-output-escaping="yes" select=".//group[@id=$parent_group_id]/name"/>
         </h1>
      </xsl:if>
      
      <!-- Обработка выбранных тэгов -->
      <xsl:if test="count(selected_tags/tag) = 1">
      <h2>Метка &#x97; <strong><xsl:value-of select="selected_tags/tag/tag_name"/></strong>.</h2>
      </xsl:if>
      
      <!-- Путь к группе -->
      <div class="path">
         <xsl:apply-templates select=".//group[@id=$parent_group_id]" mode="goup_path"/>
      </div>
      
      <!-- Сообщение -->
      <xsl:if test="message/node()">
         <h2><xsl:value-of disable-output-escaping="yes" select="message" /></h2>
      </xsl:if>
      
   
      <xsl:if test="$parent_group_id!=0">
         <div id="ShowAddComment">
            <a onclick="javascript:cr('FormAddAdvertisement')" href="javascript:void(0)">Добавить объявление в этот раздел</a>
         </div>
         
         <xsl:value-of disable-output-escaping="yes" select="/shop/ФормаДобавленияОбъявления"/>
      </xsl:if>
         
      <xsl:variable name="count">1</xsl:variable>
      
      <!-- Отображение подгрупп данной группы, только если подгруппы есть и не идет фильтра по меткам -->
      
      <!-- Этот раздел отвечает за отображение категорий -->
      <!--
      <xsl:if test="count(selected_tags/tag) = 0 and count(//group[@parent=$parent_group_id]) &gt; 0">
         <table width="100%" border="0" cellpadding="3" cellspacing="0">
            <tr>
               <td valign="top">
                  <xsl:apply-templates select="//group[@parent=$parent_group_id]">
                     <xsl:with-param name="style_font">shop_root_title</xsl:with-param>
                  </xsl:apply-templates>
               </td>
            </tr>
         </table>
      </xsl:if>
      -->
      

      
      
      <!-- Этот раздел отвечает за отображение формы фильтрации и сортировки  -->
      
      <xsl:if test="count(item) &gt; 0">
      
      <!--
         <form method="get" action="./">
            <div class="shop_block">
               <p>Производитель:&#xA0;
                  <select name="producer_id">
                     <option value="0">&#x2026;</option>
                     <xsl:apply-templates select="producerslist/producer"/>
                  </select>&#xA0;
                  
                  Продавец:&#xA0;
                  <select name="saller_id">
                     <option value="0">&#x2026;</option>
                     <xsl:apply-templates select="sallers/saller"/>
                  </select>&#xA0;
                  
                  Цена от:&#xA0;
                  <input name="price_from" size="5" type="text">
                     <xsl:if test="/shop/price_from != 0">
                        <xsl:attribute name="value">
                           <xsl:value-of disable-output-escaping="yes" select="/shop/price_from"/>
                        </xsl:attribute>
                     </xsl:if>
                  </input>&#xA0;
                  
                  до:&#xA0;
                  <input name="price_to" size="5" type="text">
                     <xsl:if test="/shop/price_to != 0">
                        <xsl:attribute name="value">
                           <xsl:value-of disable-output-escaping="yes" select="/shop/price_to"/>
                        </xsl:attribute>
                     </xsl:if>
               </input>&#xA0;</p>
               <p>
                  <span style="white-space: nowrap">Товаров на странице:</span>&#xA0;
                  <select name="on_page">
                     <option value="0">&#x2026;</option>
                     <xsl:call-template name="for_on_page">
                        <xsl:with-param name="i" select="10"/>
                        <xsl:with-param name="n" select="50"/>
                     </xsl:call-template>
                  </select>&#xA0;
                  <input name="apply_filter" value="Применить" type="submit"/>
                  
                  <xsl:if test="count(properties_for_group/property) &gt; 0">
                     <p>
                        <b>Фильтр по дополнительным свойствам товара:</b>
                     </p>
                     <table cellpadding="10px" cellspacing="0">
                        <tr valign="top">
                           <xsl:apply-templates select="properties_for_group/property"/>
                        </tr>
                     </table>
                  </xsl:if>
               </p>
            </div>
            
            
            <xsl:if test="count(/shop/compare_items/compare_item) &gt; 0">
               <table cellpadding="5px" cellspacing="0" border="0">
                  <tr>
                     <td>
                        <input type="checkbox" onclick="SelectAllItems(this.checked, 'del_compare_id_')" />
                     </td>
                     <td>
                        <b>Сравниваемые элементы</b>
                     </td>
                  </tr>
                  <xsl:apply-templates select="compare_items/compare_item"/>
               </table>
               
               <input name="apply_compare" value="Сравнить" type="button" onclick="javascript:location='{/shop/path}compare_items/';"/>
               <input name="delete_compare" value="Удалить" type="submit"/>
               
            </xsl:if>
                        
            <div class="shop_block">
               
               <xsl:variable name="filter">
                  <xsl:if test="/shop/apply_filter/node()">?action=apply_filter&amp;producer_id=<xsl:value-of select="/shop/producer_id"/>&amp;saller_id=<xsl:value-of select="/shop/saller_id"/>&amp;price_from=<xsl:value-of select="/shop/price_from"/>&amp;price_to=<xsl:value-of select="/shop/price_to"/>&amp;on_page=<xsl:value-of select="/shop/on_page"/>
                     <xsl:if test="/shop/property_xml/node()">                        
                        <xsl:value-of select="/shop/property_xml"/>
                     </xsl:if>
                  </xsl:if>
               </xsl:variable>                              
               <xsl:variable name="first_symbol">
                  <xsl:choose>
                     <xsl:when test="$filter != ''">&amp;</xsl:when>
                     <xsl:otherwise>?</xsl:otherwise>
                  </xsl:choose>
               </xsl:variable>
               
               Сортировать по алфавиту
               
               <xsl:choose>
                  <xsl:when test="/shop/sort_by_field = 1 and /shop/order_direction = 'ASC'">
                     <div class="arrow_up"></div>
                     <img src="/hostcmsfiles/images/arrow_up.png" style="filter: alpha(opacity=0); margin: 0px 0px -4px 0px" alt="по возрастанию"/>
                  </xsl:when>
                  <xsl:otherwise>
                     <div class="arrow_up_gray"></div>
                     <a href="{$filter}{$first_symbol}sort_by_field=1&amp;order_direction=1" class="without_decor">
                        <img src="/hostcmsfiles/images/arrow_up_gray.png" style="filter: alpha(opacity=0); margin: 0px 0px -4px 0px" alt="по возрастанию"/>
                     </a>
                  </xsl:otherwise>
               </xsl:choose>
               
               <xsl:choose>
                  <xsl:when test="/shop/sort_by_field = 1 and /shop/order_direction = 'DESC'">
                     <div class="arrow_down"></div>
                     <img src="/hostcmsfiles/images/arrow_down.png" style="filter: alpha(opacity=0); margin: 0px 0px -4px 0px" alt="по убыванию"/>
                  </xsl:when>
                  <xsl:otherwise>
                     <div class="arrow_down_gray"></div>
                     <a href="{$filter}{$first_symbol}sort_by_field=1&amp;order_direction=2" class="without_decor">
                        <img src="/hostcmsfiles/images/arrow_down_gray.png" style="filter: alpha(opacity=0); margin: 0px 0px -4px 0px" alt="по убыванию"/>
                     </a>
                  </xsl:otherwise>
               </xsl:choose>,&#xA0;по цене
               
               <xsl:choose>
                  <xsl:when test="/shop/sort_by_field = 2 and /shop/order_direction = 'ASC'">
                     <div class="arrow_up"></div>
                     <img src="/hostcmsfiles/images/arrow_up.png" style="filter: alpha(opacity=0); margin: 0px 0px -4px 0px" alt="по возрастанию"/>
                  </xsl:when>
                  <xsl:otherwise>
                     <a href="{$filter}{$first_symbol}sort_by_field=2&amp;order_direction=1" class="without_decor">
                        <img src="/hostcmsfiles/images/arrow_up_gray.png" style="filter: alpha(opacity=0); margin: 0px 0px -4px 0px" alt="по возрастанию"/></a>
                  </xsl:otherwise>
               </xsl:choose>
               
               <xsl:choose>
                  <xsl:when test="/shop/sort_by_field = 2 and /shop/order_direction = 'DESC'">
                     <img src="/hostcmsfiles/images/arrow_down.png" style="filter: alpha(opacity=0); margin: 0px 0px -4px 0px" alt="по убыванию"/>
                  </xsl:when>
                  <xsl:otherwise>
                     <div class="arrow_down_gray"></div>
                     <a href="{$filter}{$first_symbol}sort_by_field=2&amp;order_direction=2" class="without_decor">
                        <img src="/hostcmsfiles/images/arrow_down_gray.png" style="filter: alpha(opacity=0); margin: 0px 0px -4px 0px" alt="по убыванию"/>
                     </a>
                     
                  </xsl:otherwise>
               </xsl:choose>
            </div>
                        
            <xsl:variable name="filter">
               <xsl:choose>
                  <xsl:when test="/shop/apply_filter/node()">?action=apply_filter&amp;producer_id=<xsl:value-of select="/shop/producer_id"/>&amp;saller_id=<xsl:value-of select="/shop/saller_id"/>&amp;price_from=<xsl:value-of select="/shop/price_from"/>&amp;price_to=<xsl:value-of select="/shop/price_to"/>&amp;on_page=<xsl:value-of select="/shop/on_page"/>
                     <xsl:if test="/shop/property_xml/node()">                        
                        <xsl:value-of select="/shop/property_xml"/>
                     </xsl:if>
                  </xsl:when>
                  <xsl:otherwise></xsl:otherwise>
               </xsl:choose>
            </xsl:variable>            
            <xsl:variable name="first_symbol">
               <xsl:choose>
                  <xsl:when test="$filter != ''">&amp;</xsl:when>
                  <xsl:otherwise>?</xsl:otherwise>
               </xsl:choose>
            </xsl:variable>
            -->
            

            <!-- Список объявлений -->
            <xsl:apply-templates select="item" />
            
             <!--
            <input name="add_compare" value="Добавить для сравнения" type="submit"/>
            
            <xsl:if test="count_items &gt; 0 and items_on_page &gt; 0">
               <p>
                  <xsl:call-template name="for">
                     <xsl:with-param name="items_on_page" select="items_on_page"/>
                     <xsl:with-param name="current_page" select="current_page"/>
                     <xsl:with-param name="count_items" select="count_items"/>
                     <xsl:with-param name="visible_pages" select="5"/>
                  </xsl:call-template>
               </p>
               <div style="clear: both"></div>
            </xsl:if>
            
         </form>
         -->
         

         
      </xsl:if>
      
   </xsl:template>
   
   <!-- Шаблон для списка товаров для сравнения -->
   <xsl:template match="compare_items/compare_item">
      <xsl:variable name="var_compare_id" select="."/>
      <tr>
         <td>
            <a href="{/shop/path}{compare_item_fullpath}{compare_item_path}/">
               <xsl:value-of disable-output-escaping="yes" select="compare_item_name"/>
            </a>
         </td>
         <td>
            <input type="checkbox" name="del_compare_id_{compare_item_id}" id="id_del_compare_id_{compare_item_id}"/>
            <label for="id_del_compare_id_{compare_item_id}">Да</label>
         </td>
      </tr>
   </xsl:template>
   
   <!-- Шаблон для фильтра производителей -->
   <xsl:template match="producerslist/producer">
      <option value="{@id}">
         <xsl:if test="@id = /shop/producer_id">
            <xsl:attribute name="selected">
            </xsl:attribute>
         </xsl:if>
         <xsl:value-of disable-output-escaping="yes" select="name"/>
      </option>
   </xsl:template>
   
   <!-- Шаблон для фильтра продавцов -->
   <xsl:template match="sallers/saller">
      <option value="{@id}">
         <xsl:if test="@id = /shop/saller_id">
            <xsl:attribute name="selected">
            </xsl:attribute>
         </xsl:if>
         <xsl:value-of select="sallers_name"/>
      </option>
   </xsl:template>
   
   <!-- Шаблон для фильра по дополнительным свойствам -->
   <xsl:template match="properties_for_group/property">
      
      <xsl:variable name="nodename">property_id_<xsl:value-of select="@id"/></xsl:variable>
      <td>
         <xsl:value-of disable-output-escaping="yes" select="property_name"/>&#xA0;
         <xsl:if test="property_show_kind = 1">
            <!-- Отображаем поле ввода -->
            <br/>
            <input type="text" name="property_id_{@id}">
               <xsl:if test="/shop/*[name()=$nodename] != ''">
                  <xsl:attribute name="value">
                     <xsl:value-of select="/shop/*[name()=$nodename]"/>
                  </xsl:attribute>
               </xsl:if>
            </input>
         </xsl:if>
         <xsl:if test="property_show_kind = 2">
            <!-- Отображаем список -->
            <br/>
            <select name="property_id_{@id}">
               <option value="0">...</option>-->
               <xsl:apply-templates select="list_items/list_item"/>
            </select>
         </xsl:if>
         <xsl:if test="property_show_kind = 3">
            <!-- Отображаем переключатели -->
            <br/>
            <input type="radio" name="property_id_{@id}" value="0" id="id_prop_radio_{@id}_0"></input>
            <label for="id_prop_radio_{@id}_0">Любой вариант</label>
            <xsl:apply-templates select="list_items/list_item"/>
         </xsl:if>
         <xsl:if test=" property_show_kind = 4">
            <!-- Отображаем флажки -->
            <xsl:apply-templates select="list_items/list_item"/>
         </xsl:if>
         
         <xsl:if test=" property_show_kind = 5">
            <!-- Отображаем флажок -->
            <br/>
            <input type="checkbox" name="property_id_{@id}" id="property_id_{@id}" style="padding-top:4px">
               <xsl:if test="/shop/*[name()=$nodename] != ''">
                  <xsl:attribute name="checked">
                     <xsl:value-of select="/shop/*[name()=$nodename]"/>
                  </xsl:attribute>
               </xsl:if>
            </input>
            <label for="property_id_{@id}">Да</label>
         </xsl:if>
      </td>
      <xsl:if test="position() mod 6 = 0">
         <xsl:text disable-output-escaping="yes">
            &lt;/tr&gt;
            &lt;tr valign="top"&gt;
         </xsl:text>
      </xsl:if>
   </xsl:template>
   
   <xsl:template match="list_items/list_item">
      <xsl:if test="../../property_show_kind = 2">
         <!-- Отображаем список -->
         <xsl:variable name="nodename">property_id_<xsl:value-of select="../../@id"/></xsl:variable>
         <option value="{@id}">
            <xsl:if test="/shop/*[name()=$nodename] = @id">
               <xsl:attribute name="selected">
               </xsl:attribute>
            </xsl:if>
            <xsl:value-of disable-output-escaping="yes" select="list_item_value"/>
         </option>
      </xsl:if>
      <xsl:if test="../../property_show_kind = 3">
         <!-- Отображаем переключатели -->
         <xsl:variable name="nodename">property_id_<xsl:value-of select="../../@id"/></xsl:variable>
         <br/>
         <input type="radio" name="property_id_{../../@id}" value="{@id}" id="id_property_id_{../../@id}_{@id}">
            <xsl:if test="/shop/*[name()=$nodename] = @id">
               <!--<xsl:attribute name="checked"> </xsl:attribute>-->
            </xsl:if>
            <label for="id_property_id_{../../@id}_{@id}">
               <xsl:value-of disable-output-escaping="yes" select="list_item_value"/>
            </label>
         </input>
      </xsl:if>
      <xsl:if test="../../property_show_kind = 4">
         <!-- Отображаем флажки -->
         <xsl:variable name="nodename">property_id_<xsl:value-of select="../../@id"/>_item_id_<xsl:value-of select="@id"/></xsl:variable>
         <br/>
         <input type="checkbox" name="property_id_{../../@id}_item_id_{@id}" id="id_property_id_{../../@id}_{@id}">
            <xsl:if test="/shop/*[name()=$nodename] = @id">
               <!--<xsl:attribute name="checked"> </xsl:attribute>-->
            </xsl:if>
            <label for="id_property_id_{../../@id}_{@id}">
               <xsl:value-of disable-output-escaping="yes" select="list_item_value"/>
            </label>
         </input>
      </xsl:if>
   </xsl:template>
   
   <!-- Цикл с шагом 10 для select'a количества элементов на страницу -->
   <xsl:template name="for_on_page">
      <xsl:param name="i" select="0"/>
      <xsl:param name="n"/>
      
      <option value="{$i}">
         <xsl:if test="$i = /shop/on_page">
            <xsl:attribute name="selected">
            </xsl:attribute>
         </xsl:if>
         <xsl:value-of select="$i"/>
      </option>
      
      <xsl:if test="$n &gt; $i">
         <!-- Рекурсивный вызов шаблона -->
         <xsl:call-template name="for_on_page">
            <xsl:with-param name="i" select="$i + 10"/>
            <xsl:with-param name="n" select="$n"/>
         </xsl:call-template>
      </xsl:if>
   </xsl:template>
   
   <!-- Шаблон для групп товара -->
   <xsl:template match="group">
      
      <xsl:variable name="parent_id" select="@parent"/>
      
      <div style="margin-bottom: 15px;">
         <a href="{/shop/path}{fullpath}" style="font-weight: bold">
            <xsl:value-of disable-output-escaping="yes" select="name"/>
      </a>&#xA0;<span style="color: #aaaaaa">(<xsl:value-of select="count_all_items"/>)</span>
         <br/>
         <xsl:value-of disable-output-escaping="yes" select="description"/>
         
         <xsl:if test="count(group) &gt; 1">
            <xsl:apply-templates select="group" mode="sub_group"/>
         </xsl:if>
      </div>
      
      <xsl:if test="position()= round(count(//group[@parent = $parent_id]) div 2)">
         <xsl:text disable-output-escaping="yes">
            &lt;/td&gt;
            &lt;td valign="top" width="50%"&gt;
         </xsl:text>
      </xsl:if>
      
   </xsl:template>
   
   <!-- Шаблон для подразделов -->
   <xsl:template match="group" mode="sub_group">
      <a href="{/shop/path}{fullpath}">
         <xsl:value-of disable-output-escaping="yes" select="name"/>
      </a>
      <xsl:variable name="parent_id" select="@parent"/>
      <!-- Ставим запятую после группы, за которой следуют еще группы из данной родителской группы -->
      <xsl:if test="position() != last() and count(//group[@parent = $parent_id]) &gt; 1">,&#xA0;</xsl:if>
   </xsl:template>
   
   <!-- Шаблон для товара -->
   <xsl:template match="item">
      
      <!-- Определяем цвет фона -->
      <xsl:variable name="background_color">
         <xsl:choose>
            <xsl:when test="(position() + 1) mod 2 &gt; 0">#f7f7f7</xsl:when>
            <xsl:otherwise>#ffffff</xsl:otherwise>
         </xsl:choose>
      </xsl:variable>
      
      <table width="97%" border="0" cellpadding="0" cellspacing="0" style="padding-bottom: 7px; margin-bottom: 15px; margin-right: 10px; border-bottom: 1px solid #dadada">
         <tr>
            <td width="130" class="cat_price_label" style="padding-left: 10px" valign="middle">
               <div style="display: inline">
                  <xsl:choose>
                     <xsl:when test="price != 0">
                        <span style="font-size: 11pt">
                           <b>
                              <xsl:variable name="price" select="price"/>
                              <xsl:value-of select="format-number($price, '### ###', 'my')"/>&#xA0;<xsl:value-of disable-output-escaping="yes" select="currency"/>
                           </b>
                        </span>
                     </xsl:when>
                     <xsl:otherwise>
                        <span style="font-size: 11pt">
                           <b>цена&#xA0;договорная</b>
                        </span>
                     </xsl:otherwise>
                  </xsl:choose>
                  <!-- Если цена со скидкой - выводим ее -->
                  <xsl:if test="price!=price_tax">
                     <br/>
                     <font color="gray">
                        <strike>
                           <span style="font-size: 12pt">
                              <xsl:value-of disable-output-escaping="yes" select="price_tax"/>&#xA0;<xsl:value-of disable-output-escaping="yes" select="currency"/></span>
                        </strike>
                     </font>
                  </xsl:if>
               </div>
            </td>
            <xsl:if test="small_image != ''">
               <xsl:variable name="td_image_width" select="small_image/@width +10"/>
               <td class="cat_t" style="width:{$td_image_width}px" valign="top" align="center">
                  <!-- Изображение для товара, если есть -->
                  <xsl:if test="small_image/node() and small_image!=''">
                     <a href="{/shop/path}{fullpath}{path}/">
                        <img src="{small_image}" style="border: 1px solid #dadada"/>
                     </a>
                  </xsl:if>
               </td>
            </xsl:if>
            
            <td style="padding-left:12px;" valign="middle">
               <div>
                  <a href="{/shop/path}{fullpath}{path}/" class="cat_title">
                     <span style="font-size: 13pt">
                        <b>
                           <xsl:value-of disable-output-escaping="yes" select="name"/>
                        </b>
                     </span>
                  </a>
               </div>
               
               
               <div style="margin-top:4px;margin-bottom:10px;margin-left:5px;font-size:11px;"></div>
            </td>
            <td width="128" valign="middle">
               <xsl:value-of disable-output-escaping="yes" select="property[@id = 61]/value"/>
            </td>
         </tr>
      </table>
      <!--</div>-->
</xsl:template>

<!-- Шаблон для модификаций -->
<xsl:template match="modifications/item">
   <tr>
      <td>
         <!-- Название модификации -->
         <a href="{/shop/path}{fullpath}{path}/">
            <xsl:value-of disable-output-escaping="yes" select="name"/>
         </a>
      </td>
      <td>
         <!-- Цена модификации -->
         <xsl:choose>
            <xsl:when test="price != 0">
               <xsl:value-of disable-output-escaping="yes" select="price"/>&#xA0;
               <!-- Валюта товара -->
               <xsl:value-of disable-output-escaping="yes" select="currency"/>
            </xsl:when>
            <xsl:otherwise>договорная</xsl:otherwise>
         </xsl:choose>
      </td>
   </tr>
</xsl:template>

<!-- Шаблон для скидки -->
<xsl:template match="discount">
   <br/>
   <xsl:value-of disable-output-escaping="yes" select="name"/>&#xA0;
   <xsl:value-of disable-output-escaping="yes" select="value"/>%</xsl:template>


<!-- Цикл для вывода строк ссылок -->
<xsl:template name="for">
   <xsl:param name="i" select="0"/>
   <xsl:param name="items_on_page"/>
   <xsl:param name="current_page"/>
   <xsl:param name="count_items"/>
   <xsl:param name="visible_pages"/>
   
   <xsl:variable name="n" select="$count_items div $items_on_page"/>
   
   <!-- Считаем количество выводимых ссылок перед текущим элементом -->
   <xsl:variable name="pre_count_page">
      <xsl:choose>
         <xsl:when test="$current_page &gt; ($n - (round($visible_pages div 2) - 1))">
            <xsl:value-of select="$visible_pages - ($n - $current_page)"/>
         </xsl:when>
         <xsl:otherwise>
            <xsl:value-of select="round($visible_pages div 2) - 1"/>
         </xsl:otherwise>
      </xsl:choose>
   </xsl:variable>
   
   <!-- Считаем количество выводимых ссылок после текущего элемента -->
   <xsl:variable name="post_count_page">
      <xsl:choose>
         <xsl:when test="0 &gt; $current_page - (round($visible_pages div 2) - 1)">
            <xsl:value-of select="$visible_pages - $current_page - 1"/>
         </xsl:when>
         <xsl:otherwise>
            <xsl:choose>
               <xsl:when test="round($visible_pages div 2) = ($visible_pages div 2)">
                  <xsl:value-of select="$visible_pages div 2"/>
               </xsl:when>
               <xsl:otherwise>
                  <xsl:value-of select="round($visible_pages div 2) - 1"/>
               </xsl:otherwise>
            </xsl:choose>
         </xsl:otherwise>
      </xsl:choose>
   </xsl:variable>
   
   <xsl:if test="$i = 0 and $current_page != 0">
      <span class="ctrl">
         &#8592; Ctrl
      </span>
   </xsl:if>
   
   <xsl:if test="$i >= $n and ($n - 1) > $current_page">
      <span class="ctrl">
         Ctrl &#8594;
      </span>
   </xsl:if>
   
   <xsl:if test="$count_items &gt; $items_on_page and $n &gt; $i">
      
      <!-- Заносим в переменную $parent_group_id идентификатор текущей группы -->
      <xsl:variable name="parent_group_id" select="/shop/@current_group_id"/>
      
      <!-- Путь для тэга -->
      <xsl:variable name="tag_path">
         <xsl:if test="count(/shop/selected_tags/tag) = 1">tag/<xsl:value-of select="/shop/selected_tags/tag/tag_path_name"/>/</xsl:if>
      </xsl:variable>
      
      <!-- Определяем группу для формирования адреса ссылки -->
      <xsl:variable name="group_link">
         <xsl:choose>
            <!-- Если группа не корневая (!=0) -->
            <xsl:when test="$parent_group_id != 0">
               <xsl:value-of select="/shop//group[@id=$parent_group_id]/fullpath"/>
            </xsl:when>
            <!-- Иначе если нулевой уровень - просто ссылка на страницу со списком элементов -->
            <xsl:otherwise></xsl:otherwise>
         </xsl:choose>
      </xsl:variable>
      
      <!-- Определяем адрес ссылки -->
      <xsl:variable name="number_link">
         <xsl:choose>
            <!-- Если не нулевой уровень -->
            <xsl:when test="$i != 0">page-<xsl:value-of select="$i+1"/>/</xsl:when>
            <!-- Иначе если нулевой уровень - просто ссылка на страницу со списком элементов -->
            <xsl:otherwise></xsl:otherwise>
         </xsl:choose>
      </xsl:variable>
      
      <!-- Передаем фильтр -->
      <xsl:variable name="filter">
         <xsl:choose>
            <xsl:when test="/shop/apply_filter/node()">?action=apply_filter&amp;producer_id=<xsl:value-of select="/shop/producer_id"/>&amp;saller_id=<xsl:value-of select="/shop/saller_id"/>&amp;price_from=<xsl:value-of select="/shop/price_from"/>&amp;price_to=<xsl:value-of select="/shop/price_to"/>&amp;on_page=<xsl:value-of select="/shop/on_page"/>
               <xsl:if test="/shop/property_xml/node()">
                  <!-- GET для доп. свойств -->
                  <xsl:value-of select="/shop/property_xml"/>
               </xsl:if>
            </xsl:when>
            <xsl:otherwise></xsl:otherwise>
         </xsl:choose>
      </xsl:variable>
      
      <!-- Определяем первый символ вопрос или амперсанд -->
      <xsl:variable name="first_symbol">
         <xsl:choose>
            <xsl:when test="$filter != ''">&amp;</xsl:when>
            <xsl:otherwise>?</xsl:otherwise>
         </xsl:choose>
      </xsl:variable>
      
      <!-- Данные для стрелок сортировки -->
      <xsl:variable name="arrows">
         <xsl:choose>
            <xsl:when test="(/shop/sort_by_field = 1) or (/shop/sort_by_field = 2)">
               <xsl:choose>
                  <!-- Стрелка вверх -->
                  <xsl:when test="/shop/order_direction = 'ASC'">
                     <xsl:value-of select="$first_symbol"/>sort_by_field=<xsl:value-of select="/shop/sort_by_field"/>&amp;order_direction=1</xsl:when>
                  <!-- Стрелка вниз -->
                  <xsl:otherwise>
                     <xsl:value-of select="$first_symbol"/>sort_by_field=<xsl:value-of select="/shop/sort_by_field"/>&amp;order_direction=2</xsl:otherwise>
               </xsl:choose>
            </xsl:when>
            <xsl:otherwise></xsl:otherwise>
         </xsl:choose>
      </xsl:variable>
      
      <!-- Ставим ссылку на страницу-->
      <xsl:if test="$i != $current_page">
         
         <!-- Выводим ссылку на первую страницу -->
         <xsl:if test="$current_page - $pre_count_page &gt; 0 and $i = 0">
            <a href="{/shop/path}{$group_link}{$tag_path}{$number_link}{$filter}{$arrows}" class="page_link" style="text-decoration: none;">&#x2190;</a>
         </xsl:if>
         
         <xsl:if test="$i &gt;= ($current_page - $pre_count_page) and ($current_page + $post_count_page) &gt;= $i">
            <!-- Выводим ссылки на видимые страницы -->
            <a href="{/shop/path}{$group_link}{$tag_path}{$number_link}{$filter}{$arrows}" class="page_link">
               <xsl:value-of select="$i + 1"/>
            </a>
         </xsl:if>
         
         <!-- Выводим ссылку на последнюю страницу -->
         <xsl:if test="$i+1 &gt;= $n and $n &gt; ($current_page + 1 + $post_count_page)">
            <xsl:choose>
               <xsl:when test="$n &gt; round($n)">
                  <!-- Выводим ссылку на последнюю страницу -->
                  <a href="{/shop/path}{$group_link}{$tag_path}{$number_link}{$filter}{$arrows}page-{round($n+1)}/" class="page_link" style="text-decoration: none;">&#x2192;</a>
               </xsl:when>
               <xsl:otherwise>
                  <a href="{/shop/path}{$group_link}{$tag_path}{$number_link}{$filter}{$arrows}" class="page_link" style="text-decoration: none;">&#x2192;</a>
               </xsl:otherwise>
            </xsl:choose>
         </xsl:if>
      </xsl:if>
      
      <!-- Ссылка на предыдущую страницу для Ctrl + влево -->
      <xsl:if test="$current_page != 0 and $i = $current_page">
         <xsl:variable name="prev_number_link">
            <xsl:choose>
               <!-- Если не нулевой уровень -->
               <xsl:when test="($current_page - 1) != 0">page-<xsl:value-of select="$i"/>/</xsl:when>
               <!-- Иначе если нулевой уровень - просто ссылка на страницу со списком элементов -->
               <xsl:otherwise></xsl:otherwise>
            </xsl:choose>
         </xsl:variable>
         
         <a href="{/shop/path}{$group_link}{$tag_path}{$prev_number_link}{$filter}{$arrows}" id="id_prev"></a>
      </xsl:if>
      
      <!-- Ссылка на следующую страницу для Ctrl + вправо -->
      <xsl:if test="($n - 1) > $current_page and $i = $current_page">
         <a href="{/shop/path}{$group_link}{$tag_path}page-{$current_page+2}/{$filter}{$arrows}" id="id_next"></a>
      </xsl:if>
      
      <!-- Не ставим ссылку на страницу-->
      <xsl:if test="$i = $current_page">
         <span class="current">
            <xsl:value-of select="$i+1"/>
         </span>
      </xsl:if>
      
      <!-- Рекурсивный вызов шаблона. НЕОБХОДИМО ПЕРЕДАВАТЬ ВСЕ НЕОБХОДИМЫЕ ПАРАМЕТРЫ! -->
      <xsl:call-template name="for">
         <xsl:with-param name="i" select="$i + 1"/>
         <xsl:with-param name="items_on_page" select="$items_on_page"/>
         <xsl:with-param name="current_page" select="$current_page"/>
         <xsl:with-param name="count_items" select="$count_items"/>
         <xsl:with-param name="visible_pages" select="$visible_pages"/>
      </xsl:call-template>
   </xsl:if>
</xsl:template>

<!-- Шаблон выводит рекурсивно ссылки на группы инф. элемента -->
<xsl:template match="group" mode="goup_path">
   <xsl:param name="parent_id" select="@parent"/>
   
   <!-- Получаем ID родительской группы и записываем в переменную $parent_group_id -->
   <xsl:param name="parent_group_id" select="/shop/@current_group_id"/>
   
   <xsl:apply-templates select="//group[@id=$parent_id]" mode="goup_path"/>
   
   <xsl:if test="@parent=0">
      <a href="{/shop/path}">
         <xsl:value-of select="/shop/name"/>
      </a>
   </xsl:if>
   
   <span class="path_arrow">&#x2192;</span>
   
   <xsl:choose>
      <xsl:when test="$parent_group_id = @id">
         <xsl:value-of disable-output-escaping="yes" select="name"/>
      </xsl:when>
      <xsl:otherwise>
         <a href="{/shop/path}{fullpath}">
            <xsl:value-of disable-output-escaping="yes" select="name"/>
         </a>
      </xsl:otherwise>
   </xsl:choose>
</xsl:template>
</xsl:stylesheet>
#
Re: Основа - Доска обьявлений
Спасибо большое, что помогли с первой проблемой разобраться...
Есть ещё проблемы:
1) Как сделать чтобы объявления хранились 3 недели, и потом удалялись?
2) Убрать фильтр к переменной
$advertisement_price = '';
Я
в настройках доски объявлений убрал вообще валюту, и столкнулся с проблемой, что когда в форму цена я пишу "100 рублей", в обьявлении, он выдирает слово рублей, и не понятно, рублей или долларов.
3)
У меня так:
<form method="POST" action="./" enctype="multipart/form-data">
         <table>
            <tr>
               <td>
               Текст объявления<br />
               <textarea name="advertisement_title" rows="5" cols="53" value="<?php echo $advertisement_title;?>" /></textarea>
               </td>
            </tr>
            <tr>
               <td>
               Цена<br />
               <input type="text" name="advertisement_price" size="70" value="<?php echo $advertisement_price;?>" />
               </td>
            </tr>
            <tr>
               <td>
               <input type="hidden" name="advertisement_text"><?php echo $advertisement_title;?>
               </td>
            </tr>
            
            <tr>
               <td>
               Фото<br />
               <input type="file" name="advertisement_file" size="59" />
               </td>
            </tr>
            
            <tr>
               <td>
               Ваше имя<br />
               <input type="text" name="advertisement_fio" size="70" value="<?php echo $advertisement_fio;?>" />
               </td>
            </tr>
            
            <tr>
               <td>
               Телефон<br />
               <input type="text" name="advertisement_phone" size="70" value="<?php echo $advertisement_phone;?>" />
               </td>
            </tr>
            
            <tr>
               <td>
               <input type="hidden" name="advertisement_email" size="70" value="<?php echo $advertisement_email;?>" />
               </td>
            </tr>

Заметьте, что заместо заголовка текст обьявление,  и там стоит ограничитель сиволов. Поэтому я хочу чтобы текст который был введён в переменную $advertisement_title , копировался в переменную $advertisement_text...
Я даже сделал так, но не подействовало:
$advertisement_text = $advertisement_title;

Должен быть другой выход...
Модератор
#
Re: Основа - Доска обьявлений
Для удаления объявлений через 3 недели после добавления необходимо создать специальный файл, который будет содержать функции проверки времени хранения объявлений. Проще для каждого добавляемого объявления задавать дату завершения публикации. Тогда по достижению этой даты объявление не будет отображаться, но будет храниться в системе управления.

Система хранит цены как числа. Поэтому когда цена задается в виде "100 рублей", то будет сохранено значение 100. Выше я писал как добавить выпадающий список валют.

Если Вы хотите, чтобы в текст объявления записывалась информация из заголовка, то строку

$param['text'] = htmlspecialchars(strip_tags(to_str($_POST['advertisement_text'])));

замените на строку

$param['text'] = $param['name'];
Авторизация