среда, 18 февраля 2009 г.

Перемещение папок на удаленном сервере

Сегодня столкнулась с такой проблемой: нужно было перенести большую папку с картинками из одной директории в другую на masterhost. А в панели управления этого самого мастерхоста файловый менеджер отсутствует. Положение спасли две простые ftp команды:
rnfr /исходная директория/имя моей папки/
rnto /директория куда нужно перенести/имя моей папки/
Для того, чтобы выполнить эти команды в FileZilla нужно выбрать в меню "Сервер" пункт "Ввести команду..." и ввести сначала первую команду, потом - вторую.

вторник, 17 февраля 2009 г.

ShopCMS: реализуем возможность добавления в карзину дробного числа товаров

Движок магазина ShopCMS к сожалению предусматривает добавление в карзину только целого количества товаров. Иногда же возникает ситуация когда нужно позволить пользователю заказать, к примеру, 1.5 мешка сахора. При помощи небольших манипуляций с php кодом Shop CMS можно исправить ситуацию.

1. В корне движка находим файл cart.php. Ищем переменную $_GET["multyaddcount"] и везде где она встречается стираем перед ней конструкцию (int).

2. В этом же файле находим строку 
for ($mcn=0; $mcn<$_GET["multyaddcount"]; $mcn++) cartAddToCart((int)$_GET["addproduct"], $variants); заменяем ее на $mac=str_replace(",",".",$_GET["multyaddcount"]);  cartAddToCart((int)$_GET["addproduct"], $variants, $mac);

здесь заодно позволим пользователю ввести , вместо .

3. Открываем файл /functions/cart_functions.php

Находим заголовок функции
 function cartAddToCart( $productID, $variants )
и меняем его на
function cartAddToCart( $productID, $variants,$count_to_order)
далее в теле этой функции комментируем все места, где переменной $count_to_order присваевается значение, а так же стираем все конструкции (int) перед этой переменной.

4. Далее открываем файл /design/user/default/ shopping_cart.tpl
Находим в нем заголовок формы formppl. Обработчик формы ведет на файл index.php, но он закодирован зендом. Поэтому напишем свой обработчик. Меняем заголовок формы на

<form action="/update_cart.php?shopping_cart=yes" method=get name="formppl" id="formppl">

5. Теперь осталось написать сам обработчик update_cart.php и поместить его в корень сайта. Привожу его примерный текст:
<?
include ("config/connect.inc.php");
include ("includes/database/mysql.php");
include ("config/language_list.php");
include ("functions/functions.php");
include ("functions/session_functions.php");
MagicQuotesRuntimeSetting();


db_connect(DB_HOST, DB_USER, DB_PASS) or die(db_error());
db_select_db(DB_NAME) or die(db_error());

settingDefineConstants();

define("SECURITY_EXPIRE", 60 * 60 * CONF_SECURITY_EXPIRE);
session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
session_set_cookie_params(SECURITY_EXPIRE);
session_start();

$qmin="select min(itemID) as m1 from pnte_shopping_carts";
$m1r=mysql_query($qmin);
$min=mysql_result($m1r,0);

$qmax="select max(itemID) as m2 from pnte_shopping_carts";
$m2r=mysql_query($qmax);
$max=mysql_result($m2r,0);

for ($i=$min; $i<=$max; $i++)
{
$nm="count_$i";
if ($_GET[$nm]){
$gnm=str_replace(",",".",$_GET[$nm]);

if ((int)regGetIdByLogin($_SESSION["log"])){
$query="update pnte_shopping_carts set Quantity=".$gnm." where itemID=$i and customerID=".(int)regGetIdByLogin($_SESSION["log"]);
print $query."<br>";
$result = mysql_query($query);
}
else{

for ($j = 0; $j < count($_SESSION["gids"]); $j++)
{
if ($_SESSION["gids"][$j]==$i)
{

$_SESSION["counts"][$j]=$gnm;

}
}
}
}
}
header ("Location: /cart.html");
?> 

Вот и все – теперь ваши пользователи смогут заказывать в интернет-магазине дробное количество товаров.


вторник, 10 февраля 2009 г.

SELECT запросы к базе данных Joomla 1.5

При настройке Joomla 1.5 часто возникает необходимость вывести из базы данных некоторую информацию, скажем, в виде модуля. Для того чтобы это сделать совсем не обязательно заморачиваться с созданием отдельного модуля. Можно внедрить свой php-код в Joomla при помощи модуля mod_php. Запрос SELECT к базе данных и его обработка будет выглядеть например так:

<ul>
<?
$db =& JFactory::getDBO();
$query = "SELECT * FROM #__my_joomla_table";
$db->setQuery($query);
$result = $db->loadObjectList();
foreach ($result as $r) :
?>
<li>
<?php echo $r->my_field1; ?>
</li>
<?php
endforeach;
?>
</ul>

Режим отладки Joomla

Когда вы занимаетесь отладкой Joomla целесообразно включить соответствующий режим, а так же вывести время генерации страницы. Режим отладки вкючается соответствующим флажком в «Глобальной конфигурации» Joomla. А для того, чтобы вывести время генерации страницы добавьте в файл index.php движка следующий код:
После тега <body>:
<?php
$tstart = mosProfiler::getmicrotime();
?>
Перед тегом </body>:
<?php
$tend = mosProfiler::getmicrotime();
$totaltime = ($tend - $tstart);
printf ("Страница сгенерирована за %f секунд", $totaltime);
?>

Оптимизируем Joomla для снижения нагрузки на сервер

Представьте ситуацию: вы приложили все возможные усилия, чтобы добиться высокой посещаемости вашего сайта на движке Joomla. Наконец-то посещаемость выросла больше 1000 уникальных посетителей в день. Вы только-только начали радоваться первой прибыли от рекламы на сайте. И вот вы получаете сообщение от своего хостера примерно такого содержания: ваш сайт создает слишком высокую нагрузку на наш сервер. Нагрузка не должна превышать столько-то процентов. Ваш аккаунт будет удален через столько-то дней… и т.д. Что же делать в такой ситуации? Не отчаивайтесь. Есть несколько простых способов, позволяющих оптимизировать работу Joomla и снизить нагрузку на сервер:

1. В административной панели Joomla зайдите в «Глобальная конфигурация (Общие настройки)» -> «Кеш». Если кеширование выключено – включите его. Если кеширование включено, увеличте время жизни кеша в 5-10 раз.
2. Если вы пользуетесь сторонними компонентами для ЧПУ (SEF) – отключите их – оставьте только встроенный SEF Joomla. Красивые URL адреса страниц – это конечно хорошо. Но ЧПУ компоненты примерно в 2 раза увеличивают нагрузку на сервер.
3. Если пункта 2 оказалось мало, отключите и встроенное Joomla ЧПУ (в «Глобальная конфигурация»-> Дружественные для поисковых систем URL-ы (SEF) поставьте флажок «нет»).
4. Установите мамбот для полного кеширования страниц Joomla. Очень хороший мамбот botSystemCacheJ10. После установки этого мамбота не забудьте его опубликовать. У этого мамбота есть настройка «время жизни кеша в секундах» - чем большее время вы поставите – тем меньше будет нагрузка на сервер. Этот вариант хорошо подходит, если содержимое вашего сайта в основном статичное (статьи, каталог чего-нибудь и т.д.) и не подходит, если сайт по своему функционалу должен постоянно обновляться.
5. Перенесите содержимое статичных модулей (счетчики, блоки рекламы) в шаблон сайта. Не используйте модулей «Пользовательский модуль» и mod_php – их содержимое лучше прописать в шаблоне сайта
Вот и все. После проведения этих мероприятий напишите своему хостеру о том, что вы оптимизировали свой сайт, и нагрузка на сервер должна была снизиться. Включив режим отладки Joomla до проведения этих мероприятий и после, вы и сами сможете в этом убедиться.