Andruxa: Блог

Главные вкладки

Интернет-магазин бренда KEEN

30 августа 2017 в 16:04
1

Второй сайт на общем мультисайтинге с Днем Сурка.

https://www.keenrussia.ru

Функционал тот же, что и у Сурка, немного урезан на первом этапе.

Интернет-магазин "День Сурка"

28 июня 2015 в 15:15

http://www.densurka.ru

Я делал бэкенд, дизайном и вёрсткой занимались другие люди.
Плюс перенос всего контента из drupal 6 + ubercart 2.

26000 сущностей product,
3000 product display,
116 типов товаров (отдельная сущность, в которой хранятся настройки атрибутов, отображения и т.д)
1500 цветов,
600 размеров,
90 особенностей товаров - по ним можно делать выборку в каталоге,
225 характеристик товаров, пока выполняют описательную функцию, планируется добавлять их в индекс в зависимости от типа товара

Цвета и размеры приведены к общепонятным.

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

30 июня 2013 в 9:55

Потоптал немного граблей, докладываю:

допустим, имеются 2 представления, назовём их П1 и П2
П1 - с контекстным фильтром,
П2 - тоже с контекстными фильтрами, один из них - просто целое число: представление вызывается из разных мест, и чтобы не плодить представления, обошелся одним с числовым аргументом

итак, из П1 вызывается П2, в него передаются 2 аргумента в виде: [myarg]/1
[myarg] - значение поля, которое скрыто в выводе, 1 - это просто число 'один'

в таком виде оно не работает
если подставить в П2 [myarg]/1 - всё в порядке, а при вызове из П1 - не работает

Оказалось, что вместо числа 1 (один) в П2 передавалось значение контекстного фильтра П1, т.е. получалось, что запись [myarg]/1 была эквивалентна [myarg]/!1

Доработка YML export под d6

5 июня 2013 в 0:58

Потребовалось экспортировать товары из определенных разделов каталога в Я.Маркет, есть модуль Yml export, который экспортирует все товары из каталога.

Немного доработал его, теперь в настройках можно выбрать разделы каталога, из которых будут экспортированы товары.
Если разделы не выбраны - экспортируется весь каталог.

Кеширование запросов к БД в своём модуле

11 апреля 2013 в 13:39

Приветствую.

Пишу модуль, хранящий данные в своей таблице, ориентировочно предполагаю 500-1000 записей.
Данные редко обновляются, но планируется их частое чтение, запрос возвращает 5-15 записей за раз.

Соответствено, возникла мысль кешировать результаты запросов, чтобы не насиловать БД.

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

Форма создания материала - виджет 2 в 1

18 января 2013 в 16:52

Приветствую.

Есть такая задача.
Тип материала - приказ (по организации). Он может касаться должности и (или) сотрудника.
Например, с приказом об увольнении сотрудника должен быть ознакомлен непосредственно сам увольняемый (юзер), его начальник (должность), начальник СБ (должность) ну и т.д.
Valeratal меня поправит или дополнит при желании.

Соотвественно - приказ это нода, сотрудник - юзер, должность - термин таксономии в дереве штатной структуры.
Типу материала "приказ" добавляются два поля - юзеррефренс для сотрудника и термрефренс для должности.

Но руководство решило пойти дальше и совместить понятия пространства и времени.

Media Gallery + Media Internet Sources = медиаконтент со сторонних ресурсов

16 августа 2012 в 2:27

Есть задача - дать возможность пользователю создавать свои материалы, к которым прикреплять фото и видео.

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

С этим неплохо справляется Media Gallery: пользователь имеет возможность закачать файл, с помощью Media Internet Sources - размещать ссылки на медиафайлы, находящиеся на сторонних хостингах, а также выбирать медиа из библиотеки, куда они добавляются автоматически после аплода или после указания внешней ссылки.

Теперь чего не хватает в этом функционале.

Свой сервис коротких ссылок

12 августа 2012 в 3:50

Потребовалось сделать сервис коротких ссылок на своём домене
да, в дополнение к тем 100500, которые уже есть в сети
не спрашивайте, зачем.

Нужно, чтобы при создании контента на сайте, происходил кросспост в разные фейсбуки и при этом в нем сразу указывалась короткая ссылка на алиас, по которому расположен этот контент, т.е.
создается нода www.site.com/node/100500, при её сохранении pathauto генерит ей алиас www.site.com/контент/чпу-ноды, содержимое публикуется в нужной соцсети и в кросспосте указывается короткая ссылка вида si.te/hhVHV, по которой происходит редирект 301 на www.site.com/контент/чпу-ноды (а не на системный путь www.site.com/node/100500)

D6 + UC2 - виды доставок в зависимости от суммы и адреса заказа

8 апреля 2012 в 1:34

Расскажу о том, как в форме оформления заказа выводить те способы доставки, которые актуальны для данного заказа.

Типичный случай для интернет-магазина: покупателю предлагается доставка курьером по Default City (город, где расположен склад магазина), которая может быть бесплатной при сумме заказа, превышающей определённый порог и доставка почтой / EMS / транспортной компанией - в другие города.

Оговорюсь сразу - я слыхал, но лично не встречал модуль расчета стоимости доставки почтой России, про расчет доставки транспортными компаниями мне вообще ничего не известно, d.org тому в подтверждение,

Сайт-визитка отеля

26 октября 2011 в 2:25

http://www.iguasu.ru/

Базовая тема - Framework, по совету знакомых сеонистов переделал её из HTML 5 в XHTML 1.0 - мол, Яша ещё не готов.
Хз, обратно всегда можно вернуть.

Получилось валидно, практически кроссбраузерно (IE7+)

Из недоделок:

  • можно разукрасить js форму бронирования, если будет дизайн контролов
  • на страницах нет <h1>: ТЗ от сеонистов - будут
  • по этой же причине отключен Meta tags

Я делал вёрстку, темизацию, функционал собран из стандартных модулей, dev-отсутствуют
Дизайн, фото - Олеся Ласкова.

А вы чтите заветы Лебедева?

7 сентября 2011 в 18:35

насчет того, что на странице не стоит постить ссылку на эту же самую станицу.

Отсюда:

Quote:

Делать ссылку с логотипа на главную («домашнюю») страницу — хорошо и правильно. Но при этом надо избегать самой часто распространенной ошибки (ради которой и написан этот параграф) — если мы находимся дома, то ссылки «на главную» там быть не должно. Это относится и к другим местам на сайте: любая ссылка подразумевает перемещение.

Один из основных законов ориентирования на вебе и гипертекстовой навигации: ничто не должно содержать ссылку на само себя.


Звучит логично и убедительно.

Добавление в корзину из лайтбокса - вопрос

4 августа 2011 в 18:45

Решил заменить стандарные уберкартовские атрибуты на решение, описанное в этом топике

Вкратце - каждому набору атрибутов создается своя нода-товар с cck-полями - атрибутами,
Ноды-товары объединяются нодой-заголовком товара через нодрефренс, на странице ноды-заголовка список товаров выводится прикрепленным вьюсом, табличный вид:
фото товара, его заголовок, цена, кнопка добавления в корзину
Во вьюсе сделаны expoised filters, с помощью которых можно отфильтровать ноды-товары по их cck-полям - атрибутам.
С помощью Filters Auto-submit фильтрация происходит без перезагрузки страницы.
C помощью Ajax Driven Cart добавление в корзину и обновление блока корзины также происходит без перезагрузки страницы.

С этим все понятно.

Теперь возникло желание воспризвести функционал стандартного каталога уберкарта - если у товара есть атрибуты, при нажатии на кнопку добавления в корзину, покупателя просят выбрать атрибуты для товара.
Для этого в представлении, выводящим список товаров (это представление прикреплено к странице товара-заголовка) делаю вид "Страница", путь - selectproduct/%, где % - nid ноды-заголовка товара

В представлении, формирующем страницу каталога, для нод-заголовков товара создаю поле с ссылкой вида <a href='selectproduct/[nid]/lightbox2' rel='lightframe' title='blabla'>Добавить в корзину</a>

Соответственно, по клику на эту ссылку лайтбокс выводит iframe с представлением-списком товаров

УРАЛСИБ. Я испытываю крайнюю степень удивления.

27 июля 2011 в 20:46

Довелось сегодня ставить уралсибовский клиент-банк.

Вот что он выдал в пятом огнелисе:

Quote:
Ваш браузер не поддерживается системой BS-Client (ДБО BS-Client)
Используйте Microsoft Internet Explorer версии 5.0 или выше.

т.е. пятый осёл им идеологически ближе, чем пятый огнелис

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

C Днем Победы!

9 мая 2011 в 10:12

Лейтенант Александр Чурин,
Командир артиллерийского взвода,
В пятнадцать тридцать семь
Девятнадцатого июля
Тысяча девятсот сорок второго года
Вспомнил о боге.
И попросил у него ящик снарядов
К единственной оставшейся у него
Сорокапятимиллиметровке
Бог вступил в дискуссию с лейтенантом,
Припомнил ему выступления на политзанятиях,
Насмешки над бабушкой Фросей,
Отказал в чуде,
Назвал аспидом краснопузым и бросил.
Тогда комсомолец Александр Чурин,
Ровно в пятнадцать сорок две,
Обратился к дьяволу с предложением
Обменять душу на ящик снарядов.
Дьявол в этот момент развлекался стрелком
В одном из трех танков,
Ползущих к чуринской пушке,
И, по понятным причинам,
Апеллируя к фэйр плэй и законам войны,
Отказал.
Впрочем, обещал в недалеком будущем
Похлопотать о Чурине у себя на работе.
Отступать было смешно и некуда.
Лейтенант приказал приготовить гранаты,
Но в этот момент в расположении взвода
Материализовался архангел.
С ящиком снарядов под мышкой.
Да еще починил вместе с рыжим Гришкой
Вторую пушку.
Помогал наводить.
Били, как перепелов над стерней.
Лейтенант утерся черной пятерней.
Спасибо, Боже - молился Чурин,
Что услышал меня,
Что простил идиота…
Подошло подкрепленье – стрелковая рота.
Архангел зашивал старшине живот,
Едва сдерживая рвоту.
Таращила глаза пыльная пехота.
Кто-то крестился,
Кто-то плевался, глазам не веря,
А седой ефрейтор смеялся,
И повторял –
Ну, дают! Ну, бля, артиллерия!

Автор

С праздником, друзья!

[решено] Список нод, прикрепленный к ноде, с теми же терминами

24 апреля 2011 в 14:45

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

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

политика
--внешняя
--внутренняя
экономика
культура
ну и.т.

нужно выводить после статьи список статей (их заголовки и м.б. анонсы) на ту же тематику.

Для усложнения задачи будем помнить, что:
- нода может быть привязана к нескольким словарям, некоторые из которых выполняют служебные функции, и по их терминам список строить не надо
- нода может быть привязана одновременно к нескольким терминам одного словаря (статья имеет тэги "политика" и "экономика")

Итак, создаем новое представление:
Представления > добавить ( /admin/build/views/add )
Имя представления - по вкусу, тип - Материал

Переходим на страницу редактирования представления

Взаимосвязи:
добавляем новую связь Таксономия: Связанные термины
(та, которая первая в списке, у нее описание "Relate nodes to taxonomy terms, specifiying which vocabulary or vocabularies to use...")
Включаем чекбокс "Эта связь обязательна", дальше идет список словарей, он в нашем случае не работает, чекбоксы можно не трогать

добавляем новую связь Таксономия: Материал
Выбираем Связь: термин (или какую метку вы указали первой связи)
Не использовать связь
Включаем чекбокс "Эта связь обязательна"

Аргументы:
добавляем Материал: Nid

[решено] Установка D7 с pgsql на FreeBSD 8 - трабл с БД

27 марта 2011 в 16:14

Приветствую.

Ставлю D7 с БД pgsql на vds под FreeBSD 8 - на шаге Set up database выдает ошибку:

Failed to connect to your database server. The server reports the following message: SQLSTATE[08006] [7] FATAL: no pg_hba.conf entry for host "::1", user "d7", database "d7", SSL off.

нагуглил, что в pg_hba.conf нужно добавить строку
host all all 127.0.0.1 trust (или md5)

добавил, ребутнул - новая ошибка:
Failed to connect to your database server. The server reports the following message: SQLSTATE[08006] [7] could not connect to server: Connection refused Is the server running on host "localhost" and accepting TCP/IP connections on port 5432? could not connect to server: Connection refused Is the server running on host "localhost" and accepting TCP/IP connections on port 5432?.

Вот содержимое pg_hba.conf до:

local template1 pgsql password
host template1 pgsql 0.0.0.0 0.0.0.0 password
local all pgsql password
local   d7      d7      password
local   pge2e4  pge2e4  password

и после:

local template1 pgsql password
host template1 pgsql 0.0.0.0 0.0.0.0 password
local all pgsql password
local   d7      d7      password
local   pge2e4  pge2e4  password
host all all 127.0.0.1 trust

чего ему не хватает?
(про баги в ДНК - в курсе, я действительно аццкий чайнег Smile

upd.
надо было прописать

host    имяБД  имяПользователя    ::1/128 password

Как спрашивать

27 февраля 2011 в 9:56

Мы почти всё время переводим с одного языка на другой. Это так, даже если мы умеем говорить только по-русски. А почему? Потому что одни и те же слова у разных людей ассоциированы с разными смыслами.

Для кого-то «менять шаровые» - это провести выходные в гараже. А для кого-то - заехать утром на СТО, весь день ездить на такси, а вечером получить свою машину. Для одних людей «решить квадратное уравнение» - это мгновенное действие, не подразумевающее напряжения, а для других - это звонок сыну коллеги, который как раз учится в университете, поэтому сможет справиться.

Когда перед человеком возникает задача, то он её сначала переводит с языка того, кто проблему ставит, на свой язык, чтобы понять её и выработать план решения. Поэтому лучше всего взаимодействие идёт между примерно равными людьми. Если же постановщик задачи и исполнитель очень далеки, то могут возникать неожиданные и сложные недопонимания (их даже бывает трудно обнаружить, так как люди совсем не понимают друг друга). По этой причине важно, чтобы тот, кто формулирует задачу, умел влезть в шкуру того, кто её будет выполнять. Мне кажется, что часто люди недовольны своим начальником именно из-за его неспособности или нежелания помочь с переводом задачи со своего языка на язык исполнителя. Орать на «идиотов вокруг» может каждый, а уметь внятно объяснить, чего надо делать - это обязательный навык для руководителя.

Клонировать тип материала product kit

28 декабря 2010 в 0:30

Удавался кому-нибудь сабж?

Нужно 2 типа материала - один для наборов товаров (стандартный функционал), на базе второго - создать товары, которые проходят по учету как 2 товара (например, колесо=шина+диск, условно)

Добавить в menu block функционал jquerymenu

27 декабря 2010 в 18:41

Привет.

Модуль jquerymenu позволяет сделать удобное меню для сайдбара - с разворачиванием подпунктов меню без перезагрузки страницы, но при этом у него есть один существенный недостаток - нельзя указать, с какого подпункта меню начинать вывод, и его глубину.

Этого недостатка лишен модуль menu block, но он лишен функционала jquery.

Итак, скрещиваем ужа с ежом.

В файле template.php своей темы добавляем функции:

function название-темы_menu_item__menu_block__номер-блока($link, $has_children, $menu = '', $in_active_trail = FALSE, $extra_class = NULL) {
  $class = ($menu && $in_active_trail ? 'parent open' : ($has_children ? 'parent closed' : 'leaf')); // Для того, чтобы
// menu_block выводил на страницу все подпункты меню, а не только верхнего уровня
// (а то разворачивать будет нечего), нужно либо в настройках меню, либо в настройках
// блока menu_block раскрыть все подпункты меню, но в таком случае оно будет изначально
// выводиться на страницу полностью раскрытым, что не есть хорошо. Здесь всем пунктам
// меню назначается класс closed, кроме тех, которые in_active_trail

//  if (!empty($extra_class)) {     Тут добавляются дополнительные классы,
//    $class .= ' '. $extra_class;  вроде lirst, last, menu-его номер
//  }                               мне они без надобности, поэтому отключаю

  if ($in_active_trail) {         // Добавляется класс active-trail
    $class .= ' active-trail';    // чтобы меню разворачивалось до
  }                               // активного пункта

Заменить CSS модулей своими

18 декабря 2010 в 13:55

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

Решения:
1. Править файлы css, которые лежат в папках с модулями - некошерно.

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

Решил заменить таблицы стилей модулей своими, используя решение с ДрупалКукБука:
в template.php своей темы в функции имя-темы_preprocess_page добавил:

  $path_to_theme = drupal_get_path('theme', 'имя-темы');
  foreach ( $vars['css']['all']['module'] as $css =>$val ){
        $vars['css']['all']['module'][$path_to_theme . '/css/' . basename($css)] = $val;
        unset($vars['css']['all']['module'][$css]);
  }
  $vars['styles'] = drupal_get_css($vars['css']);
  unset($path_to_theme);

Остается скопировать файлы CSS из папок с модулями в подпапку /css своей темы, и править их как угодно.

Недостатки - при добавлении модулей надо помнить о необходимости копирования его стилей в свою тему.
решено, вопрос - по нагрузке (я не ощутил) и кошерности кода (N лет назад кодил на vb6, php - со словарем)