Алексей Карташов

Алексей Карташов

С нами с 04 февраля 2013; Место в рейтинге пользователей: #58
Алексей Карташов
18 сентября 2013, 22:02
0
Да! Хабрапак очень классный)
Продолжайте в том же духе!

p.s. эх, их бы чуть побольше (буквально раза в 2)), шоп ретина, все дела… да svg… мечты-мечты =)
Алексей Карташов
18 сентября 2013, 18:35
0
Понял, спасибо)

p.s. я как в доки экста захожу — у меня глаза округляются — ни хрена не понимаю с какого боку к нему подойти xD
Поэтому, если что-то с экстом делаю, то только по аналогии с уже написанным в самом modx. Дальше не хожу)
Алексей Карташов
18 сентября 2013, 11:11
0
Круто-круто! Спасибо огромное!

А вот это:
/*
	Ext.apply(this, {
		activeTab: 0
		,stateful: true
		,stateId: \'modx-user-tabs\'
		,stateEvents: [\'tabchange\']
		,getState: function() {
			return {
				activeTab:this.items.indexOf(this.getActiveTab())
			};
		}
	});
*/
, на сколько я понимаю, для того, чтобы активную вкладку запоминать? И где-то есть метод. который в это куку записывает?

p.s. интересный способ вывода скриптов через массив и implode) Возьму на заметку))
Алексей Карташов
16 сентября 2013, 07:26
0
А, ёлки! Вот этого сразу не увидел)

Тогда буду по твоему примеру делать — разбираться с кэшем ниахота =)

Спасибо!
Алексей Карташов
16 сентября 2013, 07:06
0
Что-то я не пойму — там же вызывается родительский beforeSet, который вызывает setFieldDefaults, который всё-равно устанавливает эти поля.
Если сбрасывался кэш из-за установки этих полей… Но поля-то эти всё-равно в родительском процессоре устанавливаются… Как это так?)
Алексей Карташов
05 сентября 2013, 22:49
1
0
Интересно, а массовая рассылка чего-либо (новости, акции) СВОИМ подписчикам (не из какой-нибудь купленной базы) считается спамом? Ну т.е. обратят ли почтовики повышенное внимание к почтовой активности нашего сервера?
Алексей Карташов
05 сентября 2013, 22:32
0
Тогда я рад :-)
Алексей Карташов
05 сентября 2013, 22:26
0
А я вот всё-таки сделал такой пакетик. Работающий правильно и не требующих никаких танцев с бубнами.
Решил его сделать платным (но не дорогим), потому что только истинные оптимизаторы понимают ценность такой вещи.
Написал в SimpleDream с предложением добавить его в репозиторий, но они ничего не ответили…
Алексей Карташов
03 сентября 2013, 18:13
0
Да, про это слышал. Кастомный селект — значит только PDO :-)

Спасибо ещё раз!
Алексей Карташов
03 сентября 2013, 17:59
0
1. Конечно, нет)

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

Какие мысли приходят мне:
1. Создать свою политику.
2. Создать настройку, в которой указать список необходимых полей.
3. Назначить политику нужной группе.
4. В 'list'-процессоре проверять эту политику и отдавать либо все данные, либо только указанные в настройке.
5. Ну и проверку этой политики во всех остальных нужных процессорах.

Может есть какие-то best practice по такому вопросу?
Алексей Карташов
03 сентября 2013, 16:55
0
1. А если всё-таки дублировать классы, то у них и названия классов должны быть разными?
Надо проверить.

По остальным пунктам — спасибо большое!
Алексей Карташов
29 августа 2013, 12:03
0
Всё-таки такую работу должен делать дизайнер.
Ситуация в идеале:
1. именно дизайнер должен нарисовать мокапы (это та картинка, ссылку на которую вы привели).
2. затем дизайнер уже с разработчиком (как я понимаю — с вами) должен обговорить структуру будущего сайта, возможно ли сделать то, что он (дизайнер) задумал с технической точки зрения и возможностей выбранной cms (modx в данном случае).
3. с учётом ваших правок дизайнер рисует (хм..) дизайн из полученных мокапов.
4. дальше вы знаете.

Если у вас нету опыта в продумывании структуры, каких-то функциональных элементов — лучше не беритесь. Отдайте это всё сразу дизайнеру.
К тому же, если вашу работу потом будет проверять заказчик, который, как я понимаю, даже сам ещё не знает чего он хочет, ибо структуру и содержание будущего сайта он доверил продумывать вам, отдельно, без своего участия. Если это так, то, по опыту говорю, 90% вероятности, что проект затянется надолго. А потом он ещё и ещё несколько раз скажет вам, что надо «ещё чуть-чуть вот здесь изменить» и всё это может продлиться очень долго.

Так что — лучше не мучайтесь и отдайте это всё дизайнеру. Сразу.
Алексей Карташов
25 августа 2013, 19:11
0
Класс! Спасибо огромное!
Алексей Карташов
25 августа 2013, 17:55
0
В принципе, именно это и видно в конечном html.
Алексей Карташов
25 августа 2013, 17:51
0
А в системном журнале на эту тему пусто
Алексей Карташов
25 августа 2013, 17:50
0
Не-не-не! Я пользуюсь, ток в этот раз у меня из-за вёрстки лог уехал, я его сразу не увидел… Ну протупил в общем.

Вот лог, который выдаёт pdoResource:
0.0090439: xPDO query object created
0.0002632: leftJoined msProductData as Data
0.0002358: leftJoined msVendor as Vendor
0.0012491: leftJoined msProductFile as x220
0.0000131: Grouped by msProduct.id
0.0000689: Added selection of msProduct: SQL_CALC_FOUND_ROWS `msProduct`.`id`, `msProduct`.`type`, `msProduct`.`contentType`, `msProduct`.`pagetitle`, `msProduct`.`longtitle`, `msProduct`.`description`, `msProduct`.`alias`, `msProduct`.`link_attributes`, `msProduct`.`published`, `msProduct`.`pub_date`, `msProduct`.`unpub_date`, `msProduct`.`parent`, `msProduct`.`isfolder`, `msProduct`.`introtext`, `msProduct`.`content`, `msProduct`.`richtext`, `msProduct`.`template`, `msProduct`.`menuindex`, `msProduct`.`searchable`, `msProduct`.`cacheable`, `msProduct`.`createdby`, `msProduct`.`createdon`, `msProduct`.`editedby`, `msProduct`.`editedon`, `msProduct`.`deleted`, `msProduct`.`deletedon`, `msProduct`.`deletedby`, `msProduct`.`publishedon`, `msProduct`.`publishedby`, `msProduct`.`menutitle`, `msProduct`.`donthit`, `msProduct`.`privateweb`, `msProduct`.`privatemgr`, `msProduct`.`content_dispo`, `msProduct`.`hidemenu`, `msProduct`.`class_key`, `msProduct`.`context_key`, `msProduct`.`content_type`, `msProduct`.`uri`, `msProduct`.`uri_override`, `msProduct`.`hide_children_in_tree`, `msProduct`.`show_in_tree`, `msProduct`.`properties`
0.0000310: Added selection of Data: `Data`.`article`, `Data`.`price`, `Data`.`old_price`, `Data`.`weight`, `Data`.`image`, `Data`.`thumb`, `Data`.`vendor`, `Data`.`made_in`, `Data`.`new`, `Data`.`popular`, `Data`.`favorite`, `Data`.`tags`, `Data`.`color`, `Data`.`size`, `Data`.`source`
0.0000250: Added selection of Vendor: `Vendor`.`name` AS `vendor.name`, `Vendor`.`resource` AS `vendor.resource`, `Vendor`.`country` AS `vendor.country`, `Vendor`.`logo` AS `vendor.logo`, `Vendor`.`address` AS `vendor.address`, `Vendor`.`phone` AS `vendor.phone`, `Vendor`.`fax` AS `vendor.fax`, `Vendor`.`email` AS `vendor.email`, `Vendor`.`description` AS `vendor.description`, `Vendor`.`properties` AS `vendor.properties`
0.0000191: Added selection of x220: `x220`.`url` as `x220`
0.0002918: Added where condition: class_key=msProduct, published=1, hidemenu=0, deleted=0, parent:IN(65,66,67,68,69,70,71,72,73,121,122,123)
0.0000160: Sorted by RAND(), ASC.
0.0000081: Limited to 1, offset 0.
0.0005081: SQL prepared "SELECT SQL_CALC_FOUND_ROWS `msProduct`.`id`, `msProduct`.`type`, `msProduct`.`contentType`, `msProduct`.`pagetitle`, `msProduct`.`longtitle`, `msProduct`.`description`, `msProduct`.`alias`, `msProduct`.`link_attributes`, `msProduct`.`published`, `msProduct`.`pub_date`, `msProduct`.`unpub_date`, `msProduct`.`parent`, `msProduct`.`isfolder`, `msProduct`.`introtext`, `msProduct`.`content`, `msProduct`.`richtext`, `msProduct`.`template`, `msProduct`.`menuindex`, `msProduct`.`searchable`, `msProduct`.`cacheable`, `msProduct`.`createdby`, `msProduct`.`createdon`, `msProduct`.`editedby`, `msProduct`.`editedon`, `msProduct`.`deleted`, `msProduct`.`deletedon`, `msProduct`.`deletedby`, `msProduct`.`publishedon`, `msProduct`.`publishedby`, `msProduct`.`menutitle`, `msProduct`.`donthit`, `msProduct`.`privateweb`, `msProduct`.`privatemgr`, `msProduct`.`content_dispo`, `msProduct`.`hidemenu`, `msProduct`.`class_key`, `msProduct`.`context_key`, `msProduct`.`content_type`, `msProduct`.`uri`, `msProduct`.`uri_override`, `msProduct`.`hide_children_in_tree`, `msProduct`.`show_in_tree`, `msProduct`.`properties`, `Data`.`article`, `Data`.`price`, `Data`.`old_price`, `Data`.`weight`, `Data`.`image`, `Data`.`thumb`, `Data`.`vendor`, `Data`.`made_in`, `Data`.`new`, `Data`.`popular`, `Data`.`favorite`, `Data`.`tags`, `Data`.`color`, `Data`.`size`, `Data`.`source`, `Vendor`.`name` AS `vendor.name`, `Vendor`.`resource` AS `vendor.resource`, `Vendor`.`country` AS `vendor.country`, `Vendor`.`logo` AS `vendor.logo`, `Vendor`.`address` AS `vendor.address`, `Vendor`.`phone` AS `vendor.phone`, `Vendor`.`fax` AS `vendor.fax`, `Vendor`.`email` AS `vendor.email`, `Vendor`.`description` AS `vendor.description`, `Vendor`.`properties` AS `vendor.properties`, `x220`.`url` as `x220` FROM `modx_site_content` AS `msProduct` LEFT JOIN `modx_ms2_products` `Data` ON `msProduct`.`id`=`Data`.`id` LEFT JOIN `modx_ms2_vendors` `Vendor` ON `Data`.`vendor`=`Vendor`.`id` LEFT JOIN `modx_bunny_lovems2_product_files` `x220` ON `x220`.`product_id` = `msProduct`.`id` AND `x220`.`parent` != 0 AND `x220`.`path` LIKE '%/x220/' WHERE  ( `msProduct`.`class_key` = 'msProduct' AND `msProduct`.`published` = 1 AND `msProduct`.`hidemenu` = 0 AND `msProduct`.`deleted` = 0 AND `msProduct`.`parent` IN (65,66,67,68,69,70,71,72,73,121,122,123) )  GROUP BY msProduct.id ORDER BY RAND() ASC LIMIT 1 "
0.0013440: SQL executed
0.0000958: Total rows: 3
0.0000262: Rows fetched
0.0000079: Returning raw data
0.0028591: Returning processed chunks
0.0059109: Returning processed chunks
0.0220170: Total time
15 728 640: Memory usage
А вот лог, который отдаёт msProduct:
0.0090680: xPDO query object created
0.0002520: leftJoined msProductData as Data
0.0002151: leftJoined msVendor as Vendor
0.0012698: leftJoined msProductFile as x220
0.0000222: Grouped by msProduct.id
0.0000679: Added selection of msProduct: SQL_CALC_FOUND_ROWS `msProduct`.`id`, `msProduct`.`type`, `msProduct`.`contentType`, `msProduct`.`pagetitle`, `msProduct`.`longtitle`, `msProduct`.`description`, `msProduct`.`alias`, `msProduct`.`link_attributes`, `msProduct`.`published`, `msProduct`.`pub_date`, `msProduct`.`unpub_date`, `msProduct`.`parent`, `msProduct`.`isfolder`, `msProduct`.`introtext`, `msProduct`.`content`, `msProduct`.`richtext`, `msProduct`.`template`, `msProduct`.`menuindex`, `msProduct`.`searchable`, `msProduct`.`cacheable`, `msProduct`.`createdby`, `msProduct`.`createdon`, `msProduct`.`editedby`, `msProduct`.`editedon`, `msProduct`.`deleted`, `msProduct`.`deletedon`, `msProduct`.`deletedby`, `msProduct`.`publishedon`, `msProduct`.`publishedby`, `msProduct`.`menutitle`, `msProduct`.`donthit`, `msProduct`.`privateweb`, `msProduct`.`privatemgr`, `msProduct`.`content_dispo`, `msProduct`.`hidemenu`, `msProduct`.`class_key`, `msProduct`.`context_key`, `msProduct`.`content_type`, `msProduct`.`uri`, `msProduct`.`uri_override`, `msProduct`.`hide_children_in_tree`, `msProduct`.`show_in_tree`, `msProduct`.`properties`
0.0000300: Added selection of Data: `Data`.`article`, `Data`.`price`, `Data`.`old_price`, `Data`.`weight`, `Data`.`image`, `Data`.`thumb`, `Data`.`vendor`, `Data`.`made_in`, `Data`.`new`, `Data`.`popular`, `Data`.`favorite`, `Data`.`tags`, `Data`.`color`, `Data`.`size`, `Data`.`source`
0.0000250: Added selection of Vendor: `Vendor`.`name` AS `vendor.name`, `Vendor`.`resource` AS `vendor.resource`, `Vendor`.`country` AS `vendor.country`, `Vendor`.`logo` AS `vendor.logo`, `Vendor`.`address` AS `vendor.address`, `Vendor`.`phone` AS `vendor.phone`, `Vendor`.`fax` AS `vendor.fax`, `Vendor`.`email` AS `vendor.email`, `Vendor`.`description` AS `vendor.description`, `Vendor`.`properties` AS `vendor.properties`
0.0000188: Added selection of x220: `x220`.`url` as `x220`
0.0002890: Added where condition: class_key=msProduct, published=1, hidemenu=0, deleted=0, parent:IN(65,66,67,68,69,70,71,72,73,121,122,123)
0.0000150: Sorted by RAND(), ASC.
0.0000081: Limited to 1, offset 0.
0.0004871: SQL prepared "SELECT SQL_CALC_FOUND_ROWS `msProduct`.`id`, `msProduct`.`type`, `msProduct`.`contentType`, `msProduct`.`pagetitle`, `msProduct`.`longtitle`, `msProduct`.`description`, `msProduct`.`alias`, `msProduct`.`link_attributes`, `msProduct`.`published`, `msProduct`.`pub_date`, `msProduct`.`unpub_date`, `msProduct`.`parent`, `msProduct`.`isfolder`, `msProduct`.`introtext`, `msProduct`.`content`, `msProduct`.`richtext`, `msProduct`.`template`, `msProduct`.`menuindex`, `msProduct`.`searchable`, `msProduct`.`cacheable`, `msProduct`.`createdby`, `msProduct`.`createdon`, `msProduct`.`editedby`, `msProduct`.`editedon`, `msProduct`.`deleted`, `msProduct`.`deletedon`, `msProduct`.`deletedby`, `msProduct`.`publishedon`, `msProduct`.`publishedby`, `msProduct`.`menutitle`, `msProduct`.`donthit`, `msProduct`.`privateweb`, `msProduct`.`privatemgr`, `msProduct`.`content_dispo`, `msProduct`.`hidemenu`, `msProduct`.`class_key`, `msProduct`.`context_key`, `msProduct`.`content_type`, `msProduct`.`uri`, `msProduct`.`uri_override`, `msProduct`.`hide_children_in_tree`, `msProduct`.`show_in_tree`, `msProduct`.`properties`, `Data`.`article`, `Data`.`price`, `Data`.`old_price`, `Data`.`weight`, `Data`.`image`, `Data`.`thumb`, `Data`.`vendor`, `Data`.`made_in`, `Data`.`new`, `Data`.`popular`, `Data`.`favorite`, `Data`.`tags`, `Data`.`color`, `Data`.`size`, `Data`.`source`, `Vendor`.`name` AS `vendor.name`, `Vendor`.`resource` AS `vendor.resource`, `Vendor`.`country` AS `vendor.country`, `Vendor`.`logo` AS `vendor.logo`, `Vendor`.`address` AS `vendor.address`, `Vendor`.`phone` AS `vendor.phone`, `Vendor`.`fax` AS `vendor.fax`, `Vendor`.`email` AS `vendor.email`, `Vendor`.`description` AS `vendor.description`, `Vendor`.`properties` AS `vendor.properties`, `x220`.`url` as `x220` FROM `modx_bunny_lovesite_content` AS `msProduct` LEFT JOIN `modx_ms2_products` `Data` ON `msProduct`.`id`=`Data`.`id` LEFT JOIN `modx_ms2_vendors` `Vendor` ON `Data`.`vendor`=`Vendor`.`id` LEFT JOIN `modx_ms2_product_files` `x220` ON `x220`.`product_id` = `msProduct`.`id` AND `x220`.`parent` != 0 AND `x220`.`path` LIKE '%/x220/' WHERE  ( `msProduct`.`class_key` = 'msProduct' AND `msProduct`.`published` = 1 AND `msProduct`.`hidemenu` = 0 AND `msProduct`.`deleted` = 0 AND `msProduct`.`parent` IN (65,66,67,68,69,70,71,72,73,121,122,123) )  GROUP BY msProduct.id ORDER BY RAND() ASC LIMIT 1 "
0.0022249: SQL executed
0.0009580: Total rows: 3
0.0000651: Rows fetched
0.0000088: Returning raw data
0.0029361: Returning processed chunks
0.0179609: Total time
15 728 640: Memory usage

Т.е. в итоге pdoResource формирует запрос, который должен формировать msProduct!
Логи я включал по отдельности, так что это на самом деле так.
Алексей Карташов
24 августа 2013, 17:51
0
Точно, забыл, что скобки в этом случае надо писать самостоятельно :-)

Спасибо!
Алексей Карташов
24 августа 2013, 17:50
0
Всё, отбой! Заработало!

В яваскрипте ж нету значения NULL, есть только null.
Написал вот так:
&where=`[{«TVshow_in_main.value:!=»: «1», «OR:TVshow_in_main.value:IS»: null]}`
и всё ок — и вложенность соблюдается и условие IS NULL прописывается правильно.

Только если просто писать название заинклюденного tv-параметра, то в конечном запросе получается modResource.show_in_main. Поэтому TVshow_in_main.value.
Алексей Карташов
24 августа 2013, 17:43
0
Ту статью до этого не видел, но да, проверка на NULL нужна именно из-за того, что там написано.

Попробовал написать так, как ты предложил — ничего не вышло, но заработал вот такой вариант:
&where=`["TVshow_in_main.value != 1 OR TVshow_in_main.value IS NULL"]`
Т.е. теперь условие формируется верно, но опять «но» — xpdo не соблюдает вложенность при таком варианте. Получается вот так:
<...> AND TVshow_in_main.value != 1 OR TVshow_in_main.value IS NULL <...>
хотя должны были быть скобки:
<...> AND (TVshow_in_main.value != 1 OR TVshow_in_main.value IS NULL) <...>
Попробовал в &where=`` сделать вложенный массив:
&where=`[["TVshow_in_main.value != 1 OR TVshow_in_main.value IS NULL"]]`
Результата не принесло — условия снова без скобок. Даже и не знаю…

p.s. в статье была ошибка — json-условия были написаны без массива, т.е. без '[]'. А тестировал я как положено. Статью поправил.