За месяц Сентябрь, 2009

Импорт csv в virtuemart - Simple CSV (часть 2)

Не так давно публиковал заметку о реализации импорта csv в virtuemart

Когда потребовалось повторить установку “мода” Simple CSV - пока читал форум, забыл зачем пошел. :) На десяти страницах форума слишком много “воды” и повторяющихся вопросов. Решил собрать краткий ман-faq по мод-хаку  в одном месте. Может кому-нибудь окажется полезным.

Хак для версии virtuemart 1.0.*
Для более новых версий - см. CSVImproved http://joomlaforum.ru/index.php/topic,42648.msg407103.html#msg407103

http://joomlaforum.ru/index.php/topic,8340.msg87750.html#msg87750 - тут последняя (на дату написания поста) версия Simple CSV. Попутно стоит скачать примеры (на первой странице ветки), и учесть, что в файле параметров параметры надо называть не “Иглы;Размер иглы в СИ”, а просто “Размер иглы в СИ” - возможна ошибка при импорте. В секции товаров (!) в первой строке (заголовок) параметр должен называться  “Иглы;Размер иглы в СИ”.

В файле ps_simple_csv_aliases.php соответствия между заголовками импортируемого файла и полями в базе. Дополнительные поля могут не загружаться, так как в базу пишет функция Virtuemart’a - подправлять следует её.

Модифицировал галочку “проверять товары” (при включенной галочке - все товары, отсутствующие в загрузке “распубликовываются”) - сделал распубликование всех товаров перед загрузкой - запрос из нескольких тысяч in (,,,) почему-то не срабатывал..

Импорт атрибутов
В ps_simple_csv_aliases.php строчки
‘Атрибут’ => ‘attribute’,
‘Атрибут определенный нами’ => custom_attribute’,
на самом деле должны быть
‘Атрибут’ => ‘product_advanced_attribute’,
‘Атрибут определенный нами’ => ‘product_custom_attribute’,
Теперь буду мучать картинки =)

А как залить товар в несколько категорий?
Указать путь к категориям через запятую, или точку с запятой или палку. Смотря какой у вас разделитель данных. Стоит быть внимательным - добавляйте категории без пробелов - возможно “дублирование”/создание “лишних” категорий.

Категории, содержащие запятую (точку с запятой или вертикальную черту) могут грузиться как несколько категорий. Для того, чтобы избежать подобного “разделения одной категории”, в строке ~805 файла ps_simple_csv.php следует убрать или закомментировать ненужный разделитель..
if( !is_array($paths) ) $paths = explode(’,', $paths);

  Разделяем превьюшки и основные изображения по разным папкам: создаем нужный каталог (например resized) для и в csv пишем “resized/image1.jpg” и т.д.

Разные цены, в зависимости от количества товара:
А можно ли сделать чтобы отображалось 3 цены товара? При этом магазин у меня работает как каталог, т.е указать например, что при покупке 100 игл цена 600р, а при покупке 500 игл цена 580р, а при покупке 1000 игл цена 550р. Как это мне можно сделать думаю, что это можэно сделать через “Параметры товара”, я прав???
В версии 4 и ниже - если нужны именно цены, то сделать это можно через цены, а если просто для информаци, то через параметры можно. Через цены пока можно лишь разом загружать цены для разных групп, для возможности загружать цены и для разного количества товара - проверить в файле ps_simple_csv_aliases.php строку №123 заменить на:

'/Цена для группы "(.+?)"(?:(?:.*?)(\d+)(?:.*?)(\d+))?/' =>
'product_prices|shopper_group_name|price_quantity_start|price_quantity_end',

Для версии бета-5 добавлена возможность добавлять “сложные цены” в следующем формате

Цена для группы “<название группы покупателей, сначала это обычно -default->”[[что угодно]<число от>[что угодно]<число до>]

Правильно: Цена для группы “-default-” количество от 3 до 7
Неправильно: Цена для группы “-default-” количество от 3
Правильно: Цена для группы “-default-” 3 - 7
Правильно: Цена для группы “-default-”, 3 7
Правильно: Цена для группы “-default-
Если до много - пишем что-то вроде 3-99999 - http://joomlaforum.ru/index.php/topic,8340.msg89584.html#msg89584 - тут с примером разбора.

При загрузке двух колонок  (артикул, цена) - т.е. выгрузка используется только для обновления цен на сайте, следует подправить 883 строку файла на

if( $csv_data['manufacturer_id'] ) {

Fatal error: Allowed memory size of … bytes exhausted (tried to allocate … bytes) in - ошибка возникает при нехватке памяти скрипту. Следует уменьшать либо количество товаров в файле, либо по возможности убрать “лишнее” - описания, которые не меняются и подобное.

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

define( 'RG_EMULATION', 0 ); в файле globals.php

Несколько изображений в virtuemart - http://forum.virtuemart.net/index.php?topic=18473

Настройка разделителей по умолчанию - в product.simple_csv_upload.php
<input type="radio" name="csv_delimiter" checked="checked" value=";" />

Замеченные глюки с ценой:
- указание цены с пробелами;
- в меню “Информация о магазине” не выставлена валюта “валюта = рубль” - может повлиять на импорт цен;
- добавить в файл импорта поле product_currency с содержимым руб. (видимо, альтернатива предыдущему решению)

Сохраняем связанные товары  http://joomlaforum.ru/index.php/topic,8340.msg170587.html#msg170587

        // Присваиваем значения выборке из базы
        foreach( $csv_data as $key => $value ) {
          //if($db_data[$key]) $db_data[$key] = $value;
          $db_data[$key] = $value;
        }
		/*##my Додаю для того, аби супутні товари не затирались. Старт ##200802281852*/
		$q  = "SELECT related_products FROM #__{vm}_product_relations ";
		$q .= " WHERE product_id='".$db_data['product_id']."'";
		$db->query($q);
		if( $db->num_rows() ) {$db_data_related_products[] = $db->loadResult();}
		$db_data["related_products"]=$db_data_related_products;
		/* Кінець ##200802281852 */

Если у Вас возникли проблемы с установкой Simple CSV и вы их решили (или не решили) - отписывайтесь в комментариях или на форуме. При появлении новой информации пост по возможности (и желанию) буду обновлять.

Опубликовано Сентябрь 25, 2009 | автор: levik  |  Комментарии (5) »

Как скрыть почтовый ящик в Microsoft Exchange

Скрыть почтовый ящик из списка адресов, а также сделать так, чтобы сервер Exchange не выдавал информации при проверке пользователя можно при помощи консоли Active Directory Users and Computers. Сообщения на этот почтовый ящик будут приходить, несмотря на то, что он скрыт.

Скрываем ящик Exchange

Выбираем вид (view - Advanced). Страница свойств пользователя - ищем вкладку Exchange Advanced (просматривается в “продвинутом” режиме) и ставим галочку Hide from Exchange Address List

После такой процедуры Microsoft Outlook при попытке поиска пользователя сообщит - мол Юзер не найден. Для корректной настройки Microsoft Outlook для работы со скрытыми ящиками Exchange, на время этой самой настройки следует сделать ящик видимым - снять галочку.

Опубликовано Сентябрь 16, 2009 | автор: levik  |  Нет комментариев »

FireFox- подключение по умолчанию. “Выберите сетевое подключение”

При работе с Mozilla FireFox периодически (обычно, в случаях, когда сетевой ресурс, к которому происходило обращение был недоступен - либо просто не существовал, либо при проблемах с интернетом) браузер выдавал окошко “Выберите сетевое подключение”. Как ни странно, Internet Explorer в таких ситуациях “молчал”.

Поскольку, довольно часто пользуюсь Мозиллой “без сети” (но не “автономно” - при установке галочки “Работать автономно”, не открываются локальные сайты) , а сообщение “выпадало” со слегка раздражающей периодичностью…

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

Итак, проблема:
Mozilla Firefox запрашивает выбор сетевого подключения при невозможности открытия сетевого ресурса. При этом до закрытия окна браузер фактически останавливает работу… Отображаются только открытые страницы. Дальнейшая навигация невозможна.

Решение:
Заходим IE - Свойства обозревателя (либо, Пуск-Панель управления - Свойства обозревателя)
Вкладка “Подключения”. Ставим точку напротив “Никогда не использовать”.

Как ни странно (казалось, бы относится к Internet Explorer-у), но помогло. Теперь, при отсутствии подключения/недоступности ресурса, все ограничивается лишь кратковременным ожиданием.

ps. Также исчезло окно “Выберите сетевое подключение” у Mozilla Thunderbird.

Опубликовано Сентябрь 13, 2009 | автор: levik  |  Нет комментариев »

регулярное выражение для проверки Email

Задача проверки введенного Email-адреса на валидность используется практически на каждом сайте, который предполагает взаимодействие с пользователем. Поле Email при вводе комментариев в блоге, при оформлении заказа в интернет-магазине, при регистрации пользователя..

При решении задачи проверки Email на валидность рекомендуется ознакомиться со стандартом Mail::RFC822::Address: regexp-based address validation

Код на php для проверки валидности Email с использованием регулярных выражений:
if (preg_match('/^([0-9a-zA-Z]([-.w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-w]*[0-9a-zA-Z].)+[a-zA-Z]{2,9})$/si', $email, $matches)) {
$email = $matches[0];
} else {
$email= "";
}

Более простая регулярка:
/^\w+([\.\w]+)*\w@\w((\.\w)*\w+)*\.\w{2,6}$/
/([\w-\.]+)@((?:[\w]+\.)+)([a-zA-Z]{2,4})\be(\w*)s\b/

Ещё одна регулярка для проверки Email
/\\A(?:^([a-z0-9][a-z0-9_\\-\\.\\+]*)@([a-z0-9][a-z0-9\\.\\-]{0,63}\\.([a-z]{2,6}))$)\\z/i
^[-._a-z0-9]+@(?:[a-z0-9][-a-z0-9]+\.)+[a-z]{2,6}$

регулярное выражение для проверки Email из Django: code.djangoproject.com/browser/django/trunk/django/forms/fields.py#L422
email_re = re.compile(
r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*" # dot-atom
r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-011\013\014\016-\177])*"' # quoted-string
r')@(?:[A-Z0-9-]+\.)+[A-Z]{2,6}$', re.IGNORECASE) # domain

В php >=5.2 для проверки валидности адреса email рекомендуется использовать встроенную функцию:
filter_var($mail, FILTER_VALIDATE_EMAIL)

Регулярка для проверки домена
/^(?:[A-Z0-9-]+\.)+[A-Z]{2,6}$/i

upd:
http://habrahabr.ru/blogs/personal/74206/
http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html
http://habrahabr.ru/blogs/regex/55820/

http://www.gskinner.com/RegExr/
сервис с возможностью тестирования регулярных выражений

Опубликовано Сентябрь 7, 2009 | автор: levik  |  Нет комментариев »

Автоматическое подключение сетевого диска в Windows

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

Подключить сетевой диск легко - достаточно выбрать одноименную команду (”подключить сетевой диск“) в пункте контекстного меню, на нужном сетевом каталоге. Чтобы не повторять действие каждый раз, можно поставить галочку подключать при входе в систему. Кроме того, можно подключить сетевой диск под именем другого пользователя. Однако, совместить эти два пункта немного сложнее.

Автоматическое подключение сетевого диска при загрузке

Если требуется подключить сетевой диск при загрузке, достаточно поставить галочку (подключать при входе в систему). Однако, если диск подключается под другим пользователем, автоматически подключить его не удастся - при попытке зайти на сетевой диск система будет запрашивать пароль пользователя, под которым производится подключение. Галочки “сохранить пароль” в окошке запроса нет.

Несложный bat-файл (файл с расширением .bat) поможет решить проблему автоматического подключения сетевого диска при входе в систему (под другим пользователем). Однако, в этом случае, следует учитывать, что пароль будет доступен в открытом виде. Не забудьте выставить права на доступ к bat-файлу.

подключение сетевого диска в Windows от имени другого пользователя

Опубликовано Сентябрь 3, 2009 | автор: levik  |  Комментарии (15) »