edogs software

edogs software
Рейтинг
775
Регистрация
15.12.2005
Должность
Программирование
alepavlenko:
edogs, Работает, спасибо!

Наверное будет коряво если elseif будет ещё штук 5 :)

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

Как крайне облегченный вариант этой идеи


$_a=array(12=>'/template/product/XXX.tpl',13=>'/template/product/zzz.tpl');
//храним шаблоны для ид категорий в массиве, хотя и не в базе
if(isset($_a[$this->data['layout_id']])) $this->template = $this->config->get('config_template').$_a[$this->data['layout_id']];
elseif (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/product/category.tpl')) {
$this->template = $this->config->get('config_template') . '/template/product/category.tpl';
} else $this->template = 'default/template/product/category.tpl';
alepavlenko:
Пытаюсь настроить OpenCart, нужно привязать каждой категории свой дизайн "category.tpl"

Для одной категории сделать получилось, делается вот так:

if ($this->data['layout_id'] == 12) {$this->template = $this->config->get('config_template') . '/template/product/XXX.tpl';

} elseif (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/product/category.tpl')) {
$this->template = $this->config->get('config_template') . '/template/product/category.tpl';
} else {
$this->template = 'default/template/product/category.tpl';
}


но как быть если теперь нужно условие, при layout_id'] == 13 должен грузится шаблон /template/product/ZZZ.tpl и так далее?

Заранее спасибо

Логично продолжая Вашу идею


if ($this->data['layout_id'] == 12) {$this->template = $this->config->get('config_template') . '/template/product/XXX.tpl'; }
elseif ($this->data['layout_id'] == 13) {$this->template = $this->config->get('config_template') . '/template/product/ZZZ.tpl'; }
elseif (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/product/category.tpl')) {
$this->template = $this->config->get('config_template') . '/template/product/category.tpl';
} else {
$this->template = 'default/template/product/category.tpl';
}
sema_87:
мой лучший друг вырос до главного по дизайну интерфейсов в одной из крупшнейших мировых бирж,
мой одноклассник работал у лебедева и потом основал свою компанию в европе, успешную
я по большей части на их мнение ориентируюсь

Вы правы для их ниши.

Но у ТС бюджет 35 тысяч, и не долларов.

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

Вы правы, отчасти, но все же это скорее юзабилити.

Но суть в другом - как Вы это формулировать в ТЗ собираетесь? "что бы вжух вжух и покупку сделал"? А оценивать как реализацию? Да никак:) В этом и проблема с дизайном, на него невозможно составить адекватное ТЗ, по которому можно было бы принимать работу и спрашивать.

Опять же, чекауты эти - это же не "вжух вжух и сделал потому что умный", а "нарисовал 20 вариантов, провел тестирование на целевой аудитории, нарисовал еще 20 вариаций лучшего, запустил на сайте разные варианты для оценки конверсии, выкинул лишние, подправил оставшуюся - выдал клиенту", т.е. опять же - никакого "изначального ТЗ по которому можно спрашивать".

sema_87:
у таких дизайнеров фотошоп и иллюстратор принудительно удалять надо. дизайнер - не художник. дизайн - не совсем то и творческая профессия.

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

Но мы вообще о том, что ТЗ на дизайн (в отличии от верстки и программинга) допускает максимально возможное количество толкований.

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

И даже портфолио не поможет, т.к. никогда не знаешь сколько заплачено за этот сайт в портфолио, сколько там было замечаний, насколько там было подробное ТЗ и как сильно деградировал изменил стиль дизайнер с тех пор.

При этом детальная разработка ТЗ (где указываются ргб цвета и попиксельные позиции элементов) чуть более чем бессмысленна, т.к. по сути работу дизайнера и будешь выполнять.

ZemAN:
А сколько реально должен стоить хороший лендинг? Не для Газпрома, но чтобы разработчик элементарные вещи понимал и мне неприходилось бы указывать на то, что строчки кривые и т.п.?

По нашему опыту, если нет хотя бы 500 долларов просто на дизайн (при этом с отдельным бюджетом на оплату всех замечаний вида "вот этот молочный цвет недостаточно молочный"), то больше смысла поискать платный шаблон (или тыкнуть в сайт конкурента:) ), набросать к нему замечаний "что надо доработать" и вот это как ТЗ спускать на фриланс - будет качественнее.

Договор или не договор в дизайне значения не имеет, т.к. дизайнер всегда имеет скажет "я так вижу" (и самое подлое - так и будет искренне думать), поэтому если что-то не указано четко в ТЗ (хочешь молочный - укажи ргб код), то никаких "подразумеваний" там не будет, нарисует как сочтет нужным.

Хорошая верстка это вопрос религиозный, т.к. всегда можно найти мобильный девайс на котором она будет кривая, а под весь зоопарк ее не сделаешь. Но для лендинга можно уложить хорошую верстку в 200-300 баксов, хотя "мультяшные персонажи" настораживают, если там винни-пух должен был за пчелами летать, то это уже другое дело.

p.s.: Дизайн и сложную верстку всегда заказываем, так что цены не от балды.

dma84:
Ещё один. Вы знаете, для чего это нужно? Специально для вас

Еще двое.

Знаем.

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

Объясним что мы в данном случае (во фразе про молоток и шурупы) имеем ввиду.

Сначала по поводу "шурупов".

ТС выбирает `browser`,`stream_id`,`source_id`,`service_id`,`user_id` , ему нужны представители строчки с уникальным browser и агрегатных функций он не использует.

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

distinct и group by часто дают одинаковый результат, но не всегда, поэтому когда работа с группами не нужна - нужен distinct, а не group by.

Теперь по поводу "молотка."

Дело в том, что distinct (в отличии от group by) сортировки по умолчанию не включает, поэтому order by null ему не нужен.

Обратите внимание что тот кусочек мануала что Вы привели - относится именно к group by, но никак не касается distinct, посмотрите мануал по distinct - убедитесь.

dma84:
И ещё, запрос без лимитов на таком количестве данных - слабоумие и отвага?

Лимиты в виде limit x,y тут не решат вопрос совсем.

Объясним. ТС очевидно нужные все данные.

В отсутствии сортировки по основному полю (browser) порядок выборки данных будет непредсказуем. А значит бить один большой запрос на лимиты нельзя - данные могут дублироваться или пропускаться.

В присутствии сортировки надо помнить о том как работает лимит и что для выполнения limit 10000,1000 мускул пролистает все 11000 записей, поэтому нет никакого смысла выбирать по тысяче предыдущие 10 тысяч, все они и так будут в последнем запросе.

dma84:
FROM `clients_log` AS `l`
JOIN `browsers` AS `b` ON (`b`.`id` = `l`.`browser_id`)
WHERE

join в данном случае так себе идея.

Лучше сначала выбрать browser_id, потом отдельным запросом browser по этим id.

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

А вообще еесли вопрос не решится заменой выносом user_agent в отдельную табличку со ссылкой на нее через browser_id, то с точки зрения производительности больше смысла будет в том, что бы сделать отдельную таблицу `browser`,`stream_id`,`source_id`,`service_id`,`user_id` сделать там browser уникальным и складывать в нее только значения с user_id<>0. Скорее всего она будет крошечная (юзеров обычно меньше анонимов), выборка как следствие будет реактивная (таблица меньше + дублирования строк с браузерами не будет), а накладные расходы на вставку в нее значений ничтожными (в меру ее размера хотя бы).

---------- Добавлено 08.08.2017 в 02:14 ----------

Aisamiery:
А я бы прежде чем начать гадать по гуще, попробовал бы запустить с explain
Несколько миллионов записей (допустим 5), varchar(50) + 4 поля инт - допустим 64 байта всего = 300 мегабайт база минимум. При этом индекс только на user_id, а группировка по текстовому полю нефиксированной длины. Тут никакого explain не надо запускать, что бы понять что "все вообще не так".

ZemAN,

freelance.ru как и free-lance.ru (и некоторые другие) это рассадник посредников и менеджеров.

Это обусловлено в первую очередь их ценовой политикой, конечному исполнителю держать живой рабочий аккаунт там экономически невыгодно, вот тупо экономически невыгодно, от слова вообще.

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

По той же причине (посредники и менеджеры) реакция на замечания будет по принципу "испорченного телефона", пока 1-2-3 звена ее переврут и перешлют - смысл потеряется.

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

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

Мы скорее это к тому, что именно на этих сайтах если хочется найти что-то приличное, то надо среднерыночный ценник конечного исполнителя умножать на 2-4 и только тогда можно иметь надежду на качество.

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

Евген:
платить можно раз в год, но в начале года - тогда каждый квартал вычитать.

Чревато:( В прошлом году так платили (лень было 4 раза в год заморачиваться), в результате потом отмахивались от налоговой утверждавшей (разумеется безграмотно и незаконно и свою позицию мы отстояли, но нервы и время) нечто вроде "вычитать из 2,3,4 квартала можно только то что уплачено во 2,3,4 квартале, а то что вы уплатили в 1 квартале вперед, так это Ваша проблема"© Так что лучше поквартально, им привычнее и понятнее.

Евген:
если заплатить 1 раз в конце года то и вычесть можно только из последнего квартала, ибо до этого не из чего вычитать.

Вроде можно перенести на след. год, нет? Не знаем точно.

elitedesign:
Всем привет. Возможно переработал, мозг не находит готового решения сходу.

SELECT `browser`,`stream_id`,`source_id`,`service_id`,`user_id`
FROM clients_log
WHERE `user_id`!='0'
GROUP BY `browser`
ORDER BY NULL

В таблице несколько миллионов записей. Результат выдает за 200 с чем то секунд.
- поле user_id - int(10)
- поле browser - VARCHAR(50),
- сделан индекс по полю user_id

Как максимально возможно это ускорить?

Заранее спасибо за Ваше время.

1) Попробуйте запрос вида

SELECT distinct(`browser`),`stream_id`,`source_id`,`service_id`,`user_id`

FROM clients_log

WHERE `user_id`!='0'

2) В любом случае уберите order by null

3) Убедитесь что mysql хотя бы 5.6 версии, а в идеале 5.7. В 5.6 пофиксили много багов с оптимизацией запросов, в 5.7 еще дочистили.

4) Добавьте индекс на browser, user_id или user_id, browser

5) Подумайте о перестройке структуры БД.

При нескольких миллионах записей хранить browser varchar(50) несколько бессмысленно, тем более varchar(50) может обрезать юзер-агента при такой короткой длине. Вынесите browser в отдельную таблицу, оставьте референс в виде browser_id int.

пысы: мы бы начали с пункта 5.

qilly:
Так даже в рублях упала. Номинально осталась на том же уровне, а фактически снизилась за счет инфляции.

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

Было у Вас 4млн - могли купить квартиру, сейчас есть 4млн - можете купить квартиру. Снижение это когда Вы можете за те же деньги купить больше квартир.

Не снижаются цены "за счет инфляции" - это последний аргумент, когда уже ну вообще не за что зацепится в аргументации и он негоден.Попробуйте подумать с другой стороны, никто же не говорит что "цена квартиры выросла за счет сдачи в аренду - прибавилось еще 200к за год"? Когда это те же 4млн.

Евген:
но в общем и целом - почему квартира должна расти?

В среднем - потому что товар, а товары растут в цене на инфляцию.

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

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

Всего: 12159