Новости Joomla

Вышли релизы Joomla 6.1 и Joomla 5.4.5: новые возможности и стабильность

Релиз Joomla 6.1.0

Проект Joomla! объявил о доступности Joomla 6.1 [Nyota] — новой минорной версии шестой серии, а также о выпуске релиза исправлений ошибок Joomla 5.4.5. Релиз 6.1 приносит ряд долгожданных функций, повышающих удобство управления контентом и защиту от спама.

👩‍💻 Компонент "CS Афиши" для Joomla.

👩‍💻 Компонент "CS Афиши" для Joomla.

Расширение "CS Афиши" позволяет выводить список мероприятий, фильтровать их по датам, поиск по заголовкам и описанию.

В состав пакета расширений входят:
- Компонент "CS Афиши"
- Модуль "Календарь событий"
- Модуль "Предстоящие события"
- Библиотека "ImgResize"

Расширение "CS Афиши" позволяет выводить список мероприятий, фильтровать их по датам, поиск по заголовкам и описанию.

Модуль "Календарь событий" отображает предстоящие и прошедшие мероприятие на календаре, с отображением мероприятий на конкретную дату во всплывающем окне.

Модуль "Предстоящие события" показывает список предстоящий событий по порядку их наступления.

P.S. Расширение платное, но плата символическая, чисто для отработки приема платежей. Ключи без ограничения по времени, купившие сейчас - смогут обновляться без ограничений.

Разработчик - участник нашего сообщества Дмитрий Денисов (@codersite).

Страница расширения
Демо

Яндекс выпустил инструмент Видимость сайта в Алисе AI.

Яндекс выпустил инструмент Видимость сайта в Алисе AI.

С тех пор, как в поисковиках появились нейроответы ИИ, трафик на сайты стал гораздо меньше, так как пользователь стал получать информацию непосредственно на странице поисковика без перехода на сайт. Но при генерации ответа ИИ указывает источники - ссылки на сайты, информация которых была использована для генерации ответа.

Долгое время у всех был немой вопрос: "Как же теперь оценивать эффективность сайта?". Теперь этот на этот вопрос отчасти отвечает новый инструмент аналитики.
Процитируем справку Яндекса по инструменту:
На запросы пользователей в Поиске может отвечать Алиса AI. Ответы появляются в поисковой выдаче, в объектных ответах и на отдельной вкладке Поиска. В них чаще всего упоминаются страницы сайтов, на которые Алиса AI опиралась при подготовке ответа.

С помощью инструмента Видимость сайта в Алисе AI в Яндекс Вебмастере вы можете:
- узнать долю упоминаний сайта среди источников в ответах Алисы AI в Поиске и отследить динамику изменений;
- посмотреть примеры запросов, по которым страницы сайта показываются в ответах Алисы AI;
- посмотреть примеры сайтов той же тематики, которые часто упоминаются в генеративной выдаче.
Данные отображаются за последние 3 месяца и обновляются каждую неделю.

Статистика собирается только по тем запросам, по которым ваш сайт уже находится достаточно высоко в поисковой выдаче. Это позволяет анализировать видимость именно в той нише, где вы заинтересованы в продвижении, и избегать «размытия» по малозначимым для вас запросам.

Кроме того, такой подход обусловлен работой Алисы AI: она строит ответ с опорой на самые релевантные, информативные и качественные страницы, которые обычно занимают высокие позиции в Поиске.

Чтобы увидеть статистику вашего сайта в меню Яндекс.Вебмастера перейдите в раздел "Эффективность" и далее в "Показы сайта в Алисе AI".

В начале февраля 2026г. был вебинар с Михаилом Сливинским - амбассадором Поиска Яндекса, и в рамках вебинара была озвучена просьба сделать такой инструмент. Скорее всего разработка на тот момент уже велась, потому что от просьбы до релиза прошло около 2-х месяцев. В любом случае хорошо, что такая статистика появилась.

Показы сайта в Алисе AI в вашем Яндекс,Вебмастере.

@joomlafeed

0 Пользователей и 1 Гость просматривают эту тему.
  • 103 Ответов
  • 51690 Просмотров
*

Wester

  • Захожу иногда
  • 180
  • 4 / 1
На странице подтверждения заказа VirtueMart выводит адрес доставки пустым, хотя согласно шаблону, должен выводить выбранный адрес доставки  :(
Подскажите где подкрутить.

Joomla 1.5.14
VirtueMart 1.1.3

\components\com_virtuemart\themes\default\templates\checkout\get_final_confirmation.tpl
Код
// Begin with Shipping Address
if (!ps_checkout::noShipToNecessary ()) {

$db->query ("SELECT * FROM #__{vm}_user_info WHERE user_info_id='".strip_tags ($_REQUEST['ship_to_info_id'])."'");
$db->next_record ();

echo '<tr><td valign="top"><strong>'.$VM_LANG->_('PHPSHOP_ADD_SHIPTO_2'). ":</strong></td>";
echo '<td>';
echo vmFormatAddress ( array ('name' => $db->f ("first_name")." ".$db->f ("last_name"),
        'address_1' => $db->f ("address_1"),
        'address_2' => $db->f ("address_2"),
        'state' => $db->f ("state"),
        'zip' => $db->f ("zip"),
        'city' => $db->f ("city"),
        'country' => $db->f ('country')
        ), true );

echo "</td></tr>";
}

« Последнее редактирование: 14.08.2009, 16:39:07 от Wester »
*

Wester

  • Захожу иногда
  • 180
  • 4 / 1
У всех работает?
*

Wester

  • Захожу иногда
  • 180
  • 4 / 1
Пишет "Адрес доставки:*пусто*", кто-нибудь исправил?
*

Wester

  • Захожу иногда
  • 180
  • 4 / 1
*

Wester

  • Захожу иногда
  • 180
  • 4 / 1
*

beagler

  • Moderator
  • 3276
  • 392 / 4
  • https://alorisman.ru/
в ps_checout.php закомментировать следующие строки (у меня 712-713)
Код
		$q .= "INNER JOIN #__{vm}_country c ON (i.country=c.country_3_code) ";
$q .= "LEFT JOIN #__{vm}_state s ON (i.state=s.state_2_code AND s.country_id=c.country_id) ";

*

Wester

  • Захожу иногда
  • 180
  • 4 / 1
ps_checkout.php*
Что-то не получается (  Просто пропадает страна и регион в адресе доставки, но на странице подтвердить заказ поле адрес доставки все равно пустое...
*

Wester

  • Захожу иногда
  • 180
  • 4 / 1
Так вроде из базы данных берет?
ro_basket.php
Код
<?php
if ( !defined ( '_VALID_MOS' ) && !defined ( '_JEXEC' ) ) die ( 'Direct Access to '.basename (__FILE__).' is not allowed.' );
/**
* This is the read-only version of the BASKET handler.
* It displays all products and all totals. Product quantities can't be
* changed on this page.
*
* @version $Id: ro_basket.php 1589 2008-12-08 20:27:20Z soeren_nb $
* @package VirtueMart
* @subpackage html
* @copyright Copyright (C) 2004-2008 soeren - All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
* VirtueMart is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* See /administrator/components/com_virtuemart/COPYRIGHT.php for copyright notices and details.
*
* http://virtuemart.net
*/
mm_showMyFileName ( __FILE__ );

require_once (CLASSPATH. 'ps_product.php' );
$ps_product = new ps_product;
require_once (CLASSPATH. 'ps_checkout.php' );
$ps_checkout = new ps_checkout;
require_once (CLASSPATH . 'ps_shipping_method.php' );

global $weight_total, $total, $tax_total, $order_tax_details, $discount_factor, $order_total;

/* make sure this is the checkout screen */
if ($cart["idx"] == 0) {
echo $VM_LANG->_('PHPSHOP_EMPTY_CART');
$checkout = False;
}
else {
$checkout = True;
$payment_method_id = vmGet ( $_REQUEST, "payment_method_id" );
$total = 0;
// Added for the zone shipping module
$vars["zone_qty"] = 0;
$weight_total = 0;
$weight_subtotal = 0;
$tax_total = 0;
$shipping_total = $shipping_tax = 0;
$order_total = 0;
$coupon_discount = vmGet ( $_SESSION, 'coupon_discount', 0 );
$coupon_discount_before=$coupon_discount_after=$payment_discount_before=$payment_discount_after=$tax=$shipping=false;
$product_rows = Array ();

for ($i=0;$i<$cart["idx"];$i++) {
// Added for the zone shipping module
$vars["zone_qty"] += $cart[$i]["quantity"];

if ($i % 2) $product_rows[$i]['row_color'] = "sectiontableentry2";
else $product_rows[$i]['row_color'] = "sectiontableentry1";

// Get product parent id if exists
$product_parent_id=$ps_product->get_field ($cart[$i]["product_id"],"product_parent_id");

// Get flypage for this product
$flypage = $ps_product->get_flypage ($cart[$i]["product_id"]);

// Build URL based on whether item or product
if ($product_parent_id) {
$url = $sess->url (URL .basename ($_SERVER['PHP_SELF']). "?page=shop.product_details&flypage=$flypage&product_id=$product_parent_id");
}
else {
$url = $sess->url (URL . basename ($_SERVER['PHP_SELF'])."?page=shop.product_details&flypage=$flypage&product_id=" . $_SESSION['cart'][$i]["product_id"]);
}

$product_rows[$i]['product_name'] = "<a href=\"$url\"><strong>"
. shopMakeHtmlSafe ($ps_product->get_field ($_SESSION['cart'][$i]["product_id"], "product_name"))
. "</strong></a><br />"
. $ps_product->getDescriptionWithTax ( $_SESSION['cart'][$i]["description"], $_SESSION['cart'][$i]["product_id"] );

// Display attribute values if this an item
$product_rows[$i]['product_attributes'] = "";
if ($product_parent_id) {
$db_detail=$ps_product->attribute_sql ($cart[$i]["product_id"],$product_parent_id);
while ($db_detail->next_record ()) {
$product_rows[$i]['product_attributes'] .= "<br />" . $db_detail->f ("attribute_name"). "<br />";
$product_rows[$i]['product_attributes'] .= $db_detail->f ("attribute_value");
}
}
$product_rows[$i]['product_sku'] = $ps_product->get_field ($cart[$i]["product_id"], "product_sku");

/* Product PRICE */
$my_taxrate = $ps_product->get_product_taxrate ($cart[$i]["product_id"], $weight_subtotal);
$tax = $my_taxrate * 100;

$price = $ps_product->get_adjusted_attribute_price ($cart[$i]["product_id"], $cart[$i]["description"]);
$price['product_price'] = $GLOBALS['CURRENCY']->convert ( $price['product_price'], $price['product_currency'] );
if ( $auth["show_price_including_tax"] == 1 ) {
$product_price = $price["product_price"] * ($my_taxrate+1);
} else {
$product_price = $price["product_price"];
}
$product_price = round ( $product_price, 5 );
$product_rows[$i]['product_price'] = $GLOBALS['CURRENCY_DISPLAY']->getFullValue ($product_price);

/* Quantity Box */
$product_rows[$i]['quantity'] = $cart[$i]["quantity"];

/* WEIGHT CALCULATION */
$weight_subtotal = ps_shipping_method::get_weight ($cart[$i]["product_id"]) * $cart[$i]['quantity'];
$weight_total += $weight_subtotal;

/* SUBTOTAL CALCULATION */
$subtotal = $product_price * $cart[$i]["quantity"];

$total += $subtotal;
$product_rows[$i]['subtotal'] = $GLOBALS['CURRENCY_DISPLAY']->getFullValue ($subtotal);
if (!empty ($my_taxrate) && MULTIPLE_TAXRATES_ENABLE=='1') {
if ( $auth["show_price_including_tax"] == 1 ) {
eval ( "\$message = \"".$VM_LANG->_('PHPSHOP_INCLUDING_TAX')."\";" );
$product_rows[$i]['subtotal'] .= "&nbsp;".$message;
}
else {
$product_rows[$i]['subtotal'] .= "&nbsp;(+ $tax% ".$VM_LANG->_('PHPSHOP_CART_TAX').")";
}
}

// UPDATE CART / DELETE FROM CART
$action_url = $_SERVER['SERVER_PORT']=="443" ? SECUREURL : URL . basename ($_SERVER['PHP_SELF']);
$product_rows[$i]['update_form'] = "<input type=\"hidden\" name=\"page\" value=\"". $page ."\" />
        <input type=\"hidden\" name=\"func\" value=\"cartUpdate\" />
        <input type=\"hidden\" name=\"product_id\" value=\"". $_SESSION['cart'][$i]["product_id"] ."\" />
        <input type=\"hidden\" name=\"Itemid\" value=\"". $sess->getShopItemid ()."\" />
        <input type=\"hidden\" name=\"description\" value=\"". $cart[$i]["description"]."\" />
        <input type=\"image\" name=\"update\" title=\"". $VM_LANG->_('PHPSHOP_CART_UPDATE')."\" src=\"". IMAGEURL ."ps_image/edit_f2.gif\" value=\"". $VM_LANG->_('PHPSHOP_UPDATE')."\" />
      </form>";
$product_rows[$i]['delete_form'] = "<form action=\"$action_url\" method=\"post\" name=\"delete\" />
        <input type=\"hidden\" name=\"option\" value=\"com_virtuemart\" />
        <input type=\"hidden\" name=\"page\" value=\"". $page ."\" />
        <input type=\"hidden\" name=\"Itemid\" value=\"". $sess->getShopItemid ()."\" />
        <input type=\"hidden\" name=\"func\" value=\"cartDelete\" />
        <input type=\"hidden\" name=\"product_id\" value=\"". $_SESSION['cart'][$i]["product_id"] ."\" />
        <input type=\"hidden\" name=\"description\" value=\"". $cart[$i]["description"]."\" />
      <input type=\"image\" name=\"delete\" title=\"". $VM_LANG->_('PHPSHOP_CART_DELETE')."\" src=\"". IMAGEURL ."ps_image/delete_f2.gif\" value=\"". $VM_LANG->_('PHPSHOP_CART_DELETE')."\" />
      </form>";
} // End of for loop through the Cart

$total = $total_undiscounted = round ($total, 5);
$subtotal_display = $GLOBALS['CURRENCY_DISPLAY']->getFullValue ($total);


if ($_REQUEST["page"] == "checkout.index" && !empty ($_POST["do_coupon"])) {
/* process the coupon */

/* make sure they arent trying to run it twice */
if (@$_SESSION['coupon_redeemed'] == true) {
$vmLogger->warning ( $VM_LANG->_('PHPSHOP_COUPON_ALREADY_REDEEMED',false) );
}
else {
require_once ( CLASSPATH . "ps_coupon.php" );
$vars["total"] = $total;
ps_coupon::process_coupon_code ( $vars );
}
}

// DISCOUNT
$discount_word = ' ';
$payment_discount_display = '0';
$payment_discount = $ps_checkout->get_payment_discount ($payment_method_id, $total);
if ( PAYMENT_DISCOUNT_BEFORE == '1') {
if ( $payment_discount != 0.00 ) {
$payment_discount_before = true;
if ( $payment_discount > 0.00 ) {
$discount_word = $VM_LANG->_('PHPSHOP_PAYMENT_METHOD_LIST_DISCOUNT');
}
else {
$discount_word = $VM_LANG->_('PHPSHOP_FEE');
}

$total -= $payment_discount;
$payment_discount_display = $GLOBALS['CURRENCY_DISPLAY']->getFullValue ($payment_discount-($payment_discount*2));
}
// COUPON DISCOUNT
$coupon_display = '';
if ( PSHOP_COUPONS_ENABLE=='1' && @$_SESSION['coupon_redeemed']==true ) {
$total -= $_SESSION['coupon_discount'];
$coupon_discount_before = true;
$coupon_display = "- ".$GLOBALS['CURRENCY_DISPLAY']->getFullValue ( $_SESSION['coupon_discount'] );
}
}
/* SHOW SHIPPING COSTS */
if ( !empty ($shipping_rate_id) && !ps_checkout::noShippingMethodNecessary () && !is_null ($ps_checkout->_SHIPPING) ) {
$shipping = true;
$vars["weight"] = $weight_total;
$shipping_total = round ( $ps_checkout->_SHIPPING->get_rate ( $vars ), 5 );
$shipping_taxrate = $ps_checkout->_SHIPPING->get_tax_rate ();

// When the Shipping rate is shown including Tax
// we have to extract the Tax from the Shipping Total
if ( $auth["show_price_including_tax"] == 1 ) {
$shipping_tax = round ( $shipping_total- ($shipping_total / (1+$shipping_taxrate)), 5);
}
else {
$shipping_tax = round ( $shipping_total * $shipping_taxrate, 5);
}
$shipping_display = $GLOBALS['CURRENCY_DISPLAY']->getFullValue ($shipping_total);
}
else {
$shipping_total = 0;
$shipping_display = "";
}
/* SHOW TAX */
if (!empty ($_REQUEST['ship_to_info_id']) || $auth["show_price_including_tax"] == 1) {
$tax = true;

if ( ($weight_total != 0 || TAX_VIRTUAL=='1') && $total > 0 ) {
$order_taxable = $ps_checkout->calc_order_taxable ($vars);
$vars['payment_discount'] = $payment_discount;
$tax_total = $ps_checkout->calc_order_tax ($order_taxable, $vars);
} else {
$tax_total = 0;
}
if ( $auth['show_price_including_tax']) {
$tax_total *= $discount_factor;
}
$tax_total += $shipping_tax;
$tax_total = round ( $tax_total, 5 );
$tax_display = $GLOBALS['CURRENCY_DISPLAY']->getFullValue ($tax_total);

$tax_display .= ps_checkout::show_tax_details ( $order_tax_details );
}

if ( PAYMENT_DISCOUNT_BEFORE != '1') {
if ( $payment_discount != 0.00 ) {
$payment_discount_after = true;
if ( $payment_discount > 0.00 ) {
$discount_word = $VM_LANG->_('PHPSHOP_PAYMENT_METHOD_LIST_DISCOUNT');
}
else {
$discount_word = $VM_LANG->_('PHPSHOP_FEE');
}
$total -= $payment_discount;
$payment_discount_display = $GLOBALS['CURRENCY_DISPLAY']->getFullValue ($payment_discount-($payment_discount*2));
}
// COUPON DISCOUNT
$coupon_display = '';
if ( PSHOP_COUPONS_ENABLE=='1' && @$_SESSION['coupon_redeemed']==true ) {
$total -= $_SESSION['coupon_discount'];
$coupon_discount_after = true;
$coupon_display = "- ".$GLOBALS['CURRENCY_DISPLAY']->getFullValue ( $_SESSION['coupon_discount'] );
}
}

// Attention: When show_price_including_tax is 1,
// we already have an order_total including the Tax!
if ( $auth["show_price_including_tax"] == 0 ) {
$order_total += $tax_total;
$total_undiscounted += $tax_total;
}
$order_total += $shipping_total + $total;
$total_undiscounted += $shipping_total;

/* check if the minimum purchase order value has already been reached */
if (round ($_SESSION['minimum_pov'], 2) > 0.00) {
if ($total_undiscounted >= $GLOBALS['CURRENCY']->convert ( $_SESSION['minimum_pov'] ) ) {
// OKAY!
define ('_MIN_POV_REACHED', '1');
}
} else
define ('_MIN_POV_REACHED', '1');

$order_total_display = $GLOBALS['CURRENCY_DISPLAY']->getFullValue ($order_total);

$tpl = new $GLOBALS['VM_THEMECLASS']();
$tpl->set_vars ( Array (
'product_rows' => $product_rows,
'subtotal_display' => $subtotal_display,
'discount_word' => $discount_word,
'payment_discount_before' => $payment_discount_before,
'payment_discount_after' => $payment_discount_after,
'payment_discount_display' => $payment_discount_display,
'coupon_discount_before' => $coupon_discount_before,
'coupon_discount_after' => $coupon_discount_after,
'coupon_display' => $coupon_display,
'shipping' => $shipping,
'shipping_display' => $shipping_display,
'tax' => $tax,
'tax_display' => $tax_display,
'order_total_display' => $order_total_display,
));

if ( $auth["show_price_including_tax"] == 1) {
$basket_html = $tpl->fetch ( 'basket/ro_basket_b2c.html.php');
}
else {
$basket_html = $tpl->fetch ( 'basket/ro_basket_b2b.html.php');
}

}
?>
И так к слову зачем нужен файл ro_basket_b2b.html.php?
« Последнее редактирование: 14.08.2009, 16:41:34 от Wester »
*

beagler

  • Moderator
  • 3276
  • 392 / 4
  • https://alorisman.ru/
*

Wester

  • Захожу иногда
  • 180
  • 4 / 1
А с пустым адресом что делать? не выводит и все ((
*

Wester

  • Захожу иногда
  • 180
  • 4 / 1
...ага... оформление заказа в 2 шага - 1 .... 2 - подтведить заказ

[вложение удалено Администратором]
« Последнее редактирование: 14.08.2009, 18:21:22 от Wester »
*

Wester

  • Захожу иногда
  • 180
  • 4 / 1
нет  >:( Может быть сама функция не правильно написана (в 1 посту)
« Последнее редактирование: 14.08.2009, 20:29:44 от Wester »
*

Wester

  • Захожу иногда
  • 180
  • 4 / 1
уже пробывал не помагает..
*

beagler

  • Moderator
  • 3276
  • 392 / 4
  • https://alorisman.ru/
*

Wester

  • Захожу иногда
  • 180
  • 4 / 1
Цитировать
а в {vm}_user_info есть адрес с таким user_info_id
Это в базе данных искать?
На странице подтверждения заказа:
$vars: ship_to_info_id => c5821315791756c6f74b27077a5797b3
*

Wester

  • Захожу иногда
  • 180
  • 4 / 1
Есть!
*

Wester

  • Захожу иногда
  • 180
  • 4 / 1
при выборе 1 варианта (по умолчанию): "ИМЯ ФАМИЛИЯул. Елецкая77115583МоскваRUS"
при выборе 2 варианта выводит: "77115583RUS"

Код
// Begin with Shipping Address
//if (!ps_checkout::noShipToNecessary ()) {

$db->query ("SELECT * FROM #__{vm}_user_info WHERE user_info_id='".strip_tags ($_REQUEST['ship_to_info_id'])."'");
$db->next_record ();

echo '<tr><td valign="top"><strong>'.$VM_LANG->_('PHPSHOP_ADD_SHIPTO_2'). ":</strong></td>";
echo '<td>';
echo $db->f ("first_name")." ".$db->f ("last_name"). $db->f ("address_1"). $db->f ("address_2").$db->f ("state"). $db->f ("zip"). $db->f ("city").$db->f ('country');

echo "</td></tr>";
//}
*

Wester

  • Захожу иногда
  • 180
  • 4 / 1
Ну я так понял приехал я с этим вопросом никуда ))) beagler, подскажи еще че-нить, еще +1 поставлю ))
*

beagler

  • Moderator
  • 3276
  • 392 / 4
  • https://alorisman.ru/
посмотри как в list_shipto_addresses.tpl.php адреса выводятся

:) плюс на хлеб не намажешь.
*

Wester

  • Захожу иногда
  • 180
  • 4 / 1
Там все ясно... а как решить проблему не понимаю)
list_shipto_addresses.tpl.php

ЗЫ Понимаю, и в холодильник не поставишь...  ;)
« Последнее редактирование: 17.08.2009, 10:39:50 от beagler »
*

Wester

  • Захожу иногда
  • 180
  • 4 / 1
А почему я не могу вывести страну и регион (все остальное работает) на странице подтверждения >:(
echo $db->f ("country_name"). ", ";
echo $db->f ("state_name"). ", ";
тоже самое работает на странице выбора адреса (list_shipto_addresses.tpl.php)...  ?
*

Wester

  • Захожу иногда
  • 180
  • 4 / 1
Да, если это убрать то пропадает везде страна и регион
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Для одного товара несколько активных цен!

Автор RodrigeZ

Ответов: 7
Просмотров: 7323
Последний ответ 24.04.2017, 01:22:33
от VIPersone
Как настроить уведомление о новом заказе?

Автор mrfruze

Ответов: 5
Просмотров: 5962
Последний ответ 02.03.2015, 14:58:59
от redsowet
Не работает авторизация на сайте

Автор ranaza

Ответов: 4
Просмотров: 1628
Последний ответ 10.12.2012, 15:38:18
от dstavropolskij
При регистрации не сообщает что email или логиl

Автор SMVVK

Ответов: 0
Просмотров: 1590
Последний ответ 01.10.2012, 20:14:55
от SMVVK
[РЕШЕНО]Не выводятся доступные варианты о

Автор SMVVK

Ответов: 1
Просмотров: 1587
Последний ответ 07.01.2012, 13:05:12
от SMVVK