.comment { color: gray; } .keyword { font-weight: bold; } .html .atribute .value { color: green; }

пятница, 16 сентября 2011 г.

Пример shell скрипта

Пример shell скрипта. Это быстрый вариант отчета по трафику шефу с двух офисов. Использовал korn shell только ради массивов (в c shell массивов не нашел :).

#!/usr/local/bin/ksh
#echo "Start..."

mdate=`date -v-1m +%Y.%m`

set -A host_k ' BONDARENKO      .   '\
              ' BOSS            .   '\
              ' DYMARSKIY       .   '\
              ' GORODKOV        .   '\
              ' GRISHIN         .   '\
              ' KUZHETSOVA      .   '\
              ' LIPETSKAYA      .   '\
              ' MALZUP          .   '\
              ' MELNICHENKO     .   '\
              ' MITINA          .   '\
              ' MOISEENKO       .   '\
              ' PODVOINAYA      .   '\
              ' RECRUIT         .   '\
              ' RYASCHENKO_nb   .   '\
              ' RYASHENK        .   '\
              ' SECRETARY       .   '\
              ' SIKALOV         .   '\
              ' YATSUN          .   '\
              ' ZHUKOVSKIY      .   '\
              ' ZORINA          .   '\
              ' ZUBOVA          .   '

set -A ip_k     59\
                10\
                50\
                58\
                19\
                15\
                12\
                18\
                40\
                75\
                56\
                13\
                14\
                11\
                8\
                43\
                60\
                45\
                51\
                21\
                55


set -A host_b   ' BESSMERTNIY     .   '\
                ' BUHGALTER       .   '\
                ' BURLIY          .   '\
                ' GAVRUSHENKO     .   '\
                ' GAVRUSHENKO_nb  .   '\
                ' GUBENKO         .   '\
                ' IVANCHENKO      .   '\
                ' IVANCHENKO_nb   .   '\
                ' KONONENKO       .   '\
                ' KONONENKO_iPhone.   '\
                ' KUCHERENOSOV    .   '\
                ' KUCHERENOSOV_nb .   '\
                ' LISCHUK         .   '\
                ' METELKIN_S      .   '\
                ' PARHOMENKO      .   '\
                ' SECRETARY_b     .   '\
                ' SHKURKO         .   '\
                ' YAKOVENKO       .   '\
                ' YAKOVENKO_J     .   '



set -A ip_b     78\
                72\
                80\
                77\
        82\
                87\
                38\
                83\
                71\
                85\
                5\
                20\
                76\
                88\
                84\
                74\
                17\
                81\
                86



###### Get data from Krestchatik report and resolv host names #####

cd /opt/traf_notify_k/

#cat /dev/null > boss_month_report_k.tmp

i=0

while [ $i -lt 21 ]

do
#echo "${ip_k[i]}"
data=`cat /opt/traf_notify_k/report_boss.txt | grep -w 192.168.3.${ip_k[i]} | awk '/192.168.3/ {a= $2/1048576; print(int(a))}'`;
#echo "${data}"

echo "|| ${host_k[i]}    ${data} Mb" >> boss_month_report_k.tmp

((i += 1))

done

###### Get data from Barbusa report and resolv host names #####

cd /opt/traf_notify_b/

cat /dev/null > boss_month_report_b.tmp
#pwd
i=0

while [ $i -lt 19 ]

do
#echo "${ip_b[i]}"
data=`cat /opt/traf_notify_b/report_boss.txt | grep -w 192.168.2.${ip_b[i]} | awk '/192.168.2/ {a= $2/1048576; print(int(a))}'`;
#echo "${data}"
echo "|| ${host_b[i]}    ${data} Mb" >> boss_month_report_b.tmp

((i += 1))

done


##### Mailing all of this shit to BOSS #####
cd /opt/traf_notify_k/


echo "Общий трафик за месяц ${mdate} :

    ### Крещатик ###

  Имя Компьютера          Объем
" > /opt/traf_notify_k/mail_to_boss.tmp

cat /opt/traf_notify_k/boss_month_report_k.tmp >> /opt/traf_notify_k/mail_to_boss.tmp

echo "
    ### Барбюса ###

  Имя Компьютера          Объем
" >> /opt/traf_notify_k/mail_to_boss.tmp

cat /opt/traf_notify_b/boss_month_report_b.tmp >> /opt/traf_notify_k/mail_to_boss.tmp

echo "
" >> /opt/traf_notify_k/mail_to_boss.tmp

########################################
#cat /opt/var/mail_to_boss.tmp | awk '/\|\|/ {a= $2/1048576; print($1,int(a)" Mb"); s=s+a} END {print("Total "int(s)" Mb")}'\
########################################

cat /opt/traf_notify_k/mail_to_boss.tmp | awk '/\|\|/ {a= $4; s=s+a} END {print("     Всего "int(s)" Mb")}' >> /opt/traf_notify_k/mail_to_boss.tmp

echo "

     Общий трафик включает в себя интернет посещения (http),
передача файлов (ftp), исходящую(smtp) или входящую(pop3) почту.



-- 

Best regards" >> /opt/traf_notify_k/mail_to_boss.tmp

cat /opt/traf_notify_k/mail_to_boss.tmp | mail -s "Общий трафик за месяц ${mdate}" -c pavelb@infocon.ua vic@infocon.ua

rm /opt/traf_notify_k/boss_month_report_k.tmp
rm /opt/traf_notify_b/boss_month_report_b.tmp
rm /opt/traf_notify_k/mail_to_boss.tmp

 

вторник, 16 марта 2010 г.

Проблема с Itemid в VirtueMart

При переходе между категориями к пути в адресной строке добавляется еще один параметр Itemid. Он берется из переменной сессии. То есть если я зашел в категорию с Itemid=1, то перейдя в другую категорию с другим Itemid=2, к пути добавится Itemid=1, а не Itemid=2, и так будет пока не закончится сессия. Это плохо влияет на отображение навигации, а также на SEF урлы.
Решение нашел здесь.
Варианты предлагались разные, но этот рабочий и наиболее изящный. Редактируется класс ps_session.php, ищите функцию getShopItemid(). Вот так она должна выглядеть после редакции:
function getShopItemid() {

if( empty( $_REQUEST['shopItemid'] )) {
$db = new ps_DB;
$db->query( "SELECT id FROM #__menu WHERE link='index.php?option=com_virtuemart' AND published=1");
if( $db->next_record() ) {
$_REQUEST['shopItemid'] = $db->f("id");
}
else {
if( !empty( $_REQUEST['Itemid'] )) {
$_REQUEST['shopItemid'] = intval( $_REQUEST['Itemid'] );
}
else {
$_REQUEST['shopItemid'] = 1;
}
}

// ЗДЕСЬ СОБСТНО ДОПОЛНЕНИЯ
} else {
return intval($_REQUEST['Itemid']);
}
// КОНЕЦ ДОПОЛНЕНИЯ
return intval($_REQUEST['shopItemid']);
}
Логика проста, если Itemid установлено (а при переходе в другую категорию оно передается), то функция не меняет его на сессионную переменную и оставляет как есть, что нам и нужно.

среда, 13 января 2010 г.

Расположение описания категории в Virtuemart

Virtuemart 1.1.3

У каждой категории, в том числе и у подкатегории, есть описание. Изначально оно располагается ниже элементов категории. Что бы описание располагалось сверху, необходимо в файле
components/com_virtuemart/thems/default/templates/browse/includes/browse_header_category.tpl.php
поменять местами следующие куски кода:
<\?php echo $navigation_childlist; ?>
- строка 14 и
<\?php echo $desc; ?>
- строка 19


Дополнено:

Если быть точным, то вместе с куском кода:
<\?php echo $desc; ?>
должен идти кусок с проверкой на НЕ ПУСТУЮ $desc, типа:
<\?php if( trim(str_replace( "
", "" , $desc)) != "" ) { ?>
и
<\?php } ?>
То есть весь кусок кода, который нужно будет двигать выглядит так(без слэшов перед ?php):
<\?php if( trim(str_replace( "
", "" , $desc)) != "" ) { ?>
<\?php echo $desc; ?>
<\?php } ?>

воскресенье, 20 сентября 2009 г.

Модуль S5 Tell a Friend - доведения до ума

Очень неплохой модуль для рассылки рекомендаций с вашего сайта - S5 Tell A Friend. Можно использовать для вирусного маркетинга, например.
Что пришлось сделать что бы я был им доволен:

1. Что бы подружить S5 Tell A Friend с sef404sh нужно подправить mod_S5tellafriend.php в строке 20 (источник):
window.open('modules/mod_S5tellafriend/tellafriend.htm','page',

вставить слэш в пути перед modules:
window.open('/modules/mod_S5tellafriend/tellafriend.htm','page',


2. Добавить дополнительные заголовки для отправки (используется функция mail), для этого правим tellafriend.php (источник):
вместо
@mail("$_POST[fmail1],$_POST[fmail2],$_POST[fmail3]", $tsubject, $ttext, "FROM: $_POST[email]");

ставим следуещее
$headers = "From: " . $_POST[email] . "\r\nContent-Type: text/plain; charset=UTF-8\r\n";
@mail("$_POST[fmail1],$_POST[fmail2],$_POST[fmail3]", $tsubject, $ttext, $headers);


3. И от себя я добавил кодировку темы письма, в том же tellafriend.php:
вместо
$tsubject = "A recommendation from $_POST[name]";

влепил
$send_charset = "UTF-8";
$subject = "A recommendation from $_POST[name]";
$tsubject = mime_header_encode($subject, $send_charset);

и в конце скрипта добавил функцию перекодировки:
function mime_header_encode($str, $send_charset) {

return '=?' . $send_charset . '?B?' . base64_encode($str) . '?=';

}

пятница, 28 августа 2009 г.

Mobile Sites with Joomla! CMS

Установка/Настройка здесь
Файлы здесь

воскресенье, 23 августа 2009 г.

Модуль переключения валют

Joomla 1.5.14, VirtueMart 1.1.3

Автоматическая смена цены относительно выбранной валюты реализована здесь:
http://joomlaforum.ru/index.php/topic,26078.msg210238.html#msg210238
Курс нужно вводить ручками, но для начала пойдет...
Требуются сам модуль и конвектор
Есть еще вариант - смотреть здесь http://joomlaforum.ru/index.php/topic,26078.msg329714.html#msg329714

Вот здесь вводится курс через админку - не пробовал, но нужно попробовать реализовать

Важное дополнение: для корректного отображения конвектора convertHARD.php в админке необходимо сделать это - http://joomlaforum.ru/index.php/topic,26078.msg357825.html#msg357825

пятница, 21 августа 2009 г.

Problem to create a Shipper List (Баг при создании способов доставки)

Joomla 1.5.10, VirueMart 1.1.3

При создании способов доставки выдает ошибку типа:
Warning: Missing argument 2 for vmGet(), called in /blah-blah/administrator/components/com_virtuemart/classes/ps_shipping.php on line 113 and defined in /blah-blah/administrator/components/com_virtuemart/classes/request.class.php on line 26

Решение было найдено здесь
В моем случае я делал замену
vmGet($d["shipping_carrier_name"])
на
vmGet($d, 'shipping_carrier_name')
в строках 225 и 275 в файле administrator/components/com_virtuemart/classes/ps_shipping.php

понедельник, 25 мая 2009 г.

SEF (ЧПУ) для Joomla - кому это нужно?

Статья, которая заставила меня засомневаться в моих действиях и огорчила о возможно потерянном времени в работе над SEO
Линк...
в ту же тему - линк

воскресенье, 24 мая 2009 г.

Почему письма отправленные PHP mail function (Joomla 1.5.x) определяются как спам?

У каждой статьи (опубликованного материала) есть кнопка "отправить ссылку на материал по почте другу". Эта кнопка работает по назначению (в принципе) и если письмо отправлено, то большая часть уважающих себя почтовых серверов определяет эти письма как спам, а это не солидно. Все дело в заголовке Sender. Если там стоит адрес отправителя, который не является корректным, то такое письмо потенциальный спам. Кстати, письма отправленные со страниц VirtueMart'а имеют корректные заголовки, в том числе Sender. У VirtueMart'а своя отправлялка, хотя тоже не без косяков.
Так как же сделать что бы отправлялись валидные мэйлы? Случайно прочитал топик в котором чел описывал такую же проблему, и вдохновившись решил таки найти откуда берется этот заголовок - Sender.
Незнаю, с того боку я зашел или нет, но мне это помогло. В скрипте libraries/phpmailer/phpmailer.php есть много хороших переменных, в том числе var $Sender, а также комментарий к ней:
/**
* Sets the Sender email (Return-Path) of the message. If not empty,
* will be sent via -f to sendmail or as 'MAIL FROM' in smtp mode.
* @var string
*/
var $Sender = "";

где русским языком английскими буквами написано, что если значение не пустое (а оно млин пустое), то будет оправлено сендмейлу, что нам и нужно. Я вписал тот адрес который хотел видеть в заголовке Sender
var $Sender = "name@domen.com";

и алилуйя, отправляется письмо с валидными заголовками!

пятница, 22 мая 2009 г.

PHP Error - Allowed memory size of X bytes exhausted (tried to allocate Y bytes)

Наверняка многие кто хостится даже на платных серверах и не имеющий доступ к файлу настроек php.ini, встречали такую ошибку при отработке прожорливых php скриптов. Я пытался поначалу бороться с этим недугом созданием файла php.ini со своими настройками в корне папки с исполняемым скриптом (у некоторых хостеров это возможно). Но работало это через раз, а то и вообще...
Нашел решение проблемы здесь, спасибо большое товарищу Jason'у !

Ошибка "Allowed memory size of X bytes exhausted (tried to allocate Y bytes)" - говорит о том что вашему скрипту не хватает памяти, точнее скрипт не укладывается в тот обьем памяти который разрешен для выполнения PHP скриптами.

В таких случаях обычно помогает изменение настроек, выберите подходящий:

memory_limit = 12M - опция в вашем php.ini файле (рекомендуется если есть доступ, действует на все скрипты на сервере)
ini_set('memory_limit', '12M'); - php-код в начале проблемных скриптов.
php_value memory_limit 12M - опция в .htaccess файле той папки в которой запускается скрипт.

Вместо 12M подставляем необходимый обьем памяти, например по нарастающей, пока ошбка не перестанет вылазить, значение по умолчанию обычно 8M (мегабайт).

Я выбрал второй способ - добавлял в начале кода
ini_set('memory_limit', 'ХM');

, где Х - желаемое количество памяти.

четверг, 14 мая 2009 г.

Письмо не может быть отправлено - E-mail could not be sent

Joomla 1.5.9

Кнопка E-mail (отправить ссылку другу) предназначена для отправки ссылки на материал другу. Но у меня по каким то причинам при отправке говорит - "Письмо не может быть отправлено".
В этом баг репорте не нашел информацию которая помогла бы мне в этой проблеме.
Но в этом баг репорте нашел то что мне помогло:

Submitted By: Rupert Bailey
Adddate: 2009-03-31 08:06:41
I just realised what is going on!
Above the send() function is the mailTo() function which sets the current time
is used as the "com_mailto.formtime" timestamp.
$session->set('com_mailto.formtime', time());
This is then used as the "start time" for the timeout between it and
the next time time() is called.
so the timeout should occur at
time() - $timeout > 20
not
time() - $timeout < 20

Thus the LOGIC is wrong.

also 20 seconds might not be long enough. Suggest:
time() - $timeout > 20
please submit a change to the Joomla source to reflect this. (line 58)

if($timeout == 0 || time() - $timeout > 50) {


изменения нужно делать в components/com_mailto/controller.php

вторник, 5 мая 2009 г.

Полезные ссылки

VirtueMart + sh404SEF
PNG в шаблонах Joomla!
Расширение «Сравнение товаров» for VirtueMart (Joomla 1.0.x)
Product Comparison for VirtueMart(Joomla 1.5.x)
Мини-FAQ Joomla & Virtuemart
Настройка внешнего вида Virtuemart 1.0.15
Расширение «Сравнение товаров»
Стоимость доставки в зависимости от суммы заказа
Квитанция о заказе VM приходящая на почтовый ящик покупателя
Шаблон категорий в VirtueMart, мой вариант оформления
JoomlaFCK WYSIWYG editor for Joomla!
Filter product category by manufacturer - работает!
Сделал фильтр, или расширенный поиск по характеристикам товара
Добавляем в форму регистрации поле Дата рождения
http://blog.pbelkov.com/page/2/
Mobile Sites with Joomla! CMS
Joomla 1.5.9 + VirtueMart 1.1.3 + SecurityImages 5.1.1
VirtueMart изменяем количество категорий в строке
Добавление изображения товара в письмо при отправки заказа (confirmation email)

Кнопка "Версия для печати" в VirtueMart

Joomla 1.5.9
VirtueMart 1.1.3

Проблема: в VirtueMart кнопка "версия для печати" выбрасывает ошибку 404
Причина: в Джумле включен SEO, а в Вирте SEO не работает
Решение: решение было найдено здесь, спасибо товарищу, который написал SEF роутер для Вирты.
На данный момент в компоненте интернет-магазина VirtualMart для Joomla 1.5 отсутствует роутер ссылок, который конвертирует ссылки.

Предлагаю Вашему вниманию роутер, который написал именно для последней на сегодня версии VirtueMart 1.1.2 stable.

Основной принцип работы роутера:

В Joomla 1.5 все ссылки имеют вид http://example.com/shop.html?page=shop.browse&category_id=1 (категории), в то время как роутер превращает их в более красивый и короткий вид - http:// example.com/shop/shop.browse/1.html

Сам роутер превращает 90% ссылок. Ссылка для обработки роутером заказов в интернет-магазине я не делал, чтобы предотвратить какие-либо ошибки и в принципе для этой части магазина нам красивые ссылки не так уж и важны, ведь основная задача у нас короткие ссылки для категорий и товаров, а также для индексации поисковыми машинами.

Замечания:

Роутер ссылок корректно работает с включенными расширениями (суффиксами) файлов и с отключенной функцией mod_rewrite в настройках Joomla. Если отключить функцию суффиксов для файлов и оставить включенный функцию mod_rewrite, будут возникать ошибки 404, это связано с тем, что параметрах URL используется точка (например: shop.browse).

Поэтому для корректной работы роутера предлагаю 2 варианта настроек SEF в конфигурации Joomla:

1. включена функция mod_rewrite и расширения (суффиксы) файлов;
2. отключена функция mod_rewrite, а расширение (суффиксы) файлов могут быть включены или отключены.

Применение:

1. Распаковать архив;
2. Залить файл router.php в папку components/com_virtuemart/;
3. Включить и настроить SEF в конфигурации Joomla согласно замечаний (см. выше).

Загрузить файл роутера: router.zip