Не работат Sections в Tickets.Расследование
Собственно, проблема массовая, и затрагивает не только меня и вот этого товарища, который написал вот этот пост:
modx.pro/help/384/#comment-4101
Возможно еще кого-нибудь.
Впереди ждет очень много букв, можно в прицнипе прочесть с конца…
— Расскажу о своем случае ну и о том что я сделал в целях диагностики.
Имеем VMWare на локалхосте с Ubuntu 12 server настроенной по статье Васи.
Управляется все под NGinx+php frm+mysql соответственно.
Сайты и гранты добавляю скриптами, но правда чуть видоизмененными.
Но суть в том что все работает исправно.
— Не много предисловия…
С ModX знаком не давно, буквально пару недель — из разных вариантов на кандидата в CMS для сайтов подошел именно он, в силу своей гибкости, ну и отсутствия извращенных шаблонизаторов серии джумлы и пр. Ну и много еще почему.
Сам являюсь WEB разработчиком на Java2EE, из СУБД работаю с Oracle 11g под него и кодю.
С MySql и PHP разумеется знаком, но серьезные проекты делал давно, когда еще PHP был не объектным, ухх…
— Так вот, сутки борюсь с проблемой что пакет Tickets из коробки, на локалхосте работает не верно — а именно не отрабатывает вызов [[+sections]] и возвращает Null, вне зависимости от данных в tickets_threads (они там есть)
Соответственно, первым делом проверил на modx-test --там все работает.
Потом почесал репу, предположил что возможно что-то не доставилось на локалхосте в силу например канала интернета (большие потери до репозитория), или наличия грантов.
Взял и полностью залил архив в modx-test себе на хост. Сначала только файлы, а базу указал свою, которая была ранее (и где были произведены настройки и была та же проблема) — результата не дало, форма есть, а [[+sections]] в Null.
Затем взял и залил дамп базы в ModX-test и подключился туда.
И каково же было мое удивление, что и там не заработало…
В итоге я решил попытаться понять на уровне чего идет сбой, и включил лог MySql запросов в my.cnf:
Ну и перезапустив Mysql и удалив кэш, запустил страничку с выводом [[!TicketForm?]]…
В итоге как и было, все по старому, но теперь я могу посмотреть в логе запрос, который сгенерила ОРМ.
Всего на эту операцию по обновлению странички xPDO загенерило 31 запрос в MySql.А именно:
Согласитесь, не плохо… Но теперь нужно найти те, которые работают для показа в снипете и отвечают за Sections.
А это в общем -то 8 и 9 запросы:
Ну вот… Корень зла вроде -бы найден, подумал я… Но-прогнав их наживую, в базе, я получил выборки без каких-либо ошибок — первый вернул 2 — количество созданных в админке ресурсов под тикеты, а второй вернул нормальную выборку, подходящую под запрос.
В итоге как я понимаю, этого вполне хватит для вывода селектед-списка на странице.
Но что-то мешает… И что не понятно.
В исходниках класс, который отвечает за построение этого списка называется getlist.class.php
ну и собственно запрос он делает такой:
Понятное дело, что проблема судя по вышестоящему описанию не в хард-коде, не в базе, а в ПО сервера.
И кстати, на Denwer эта котовасия работает!!((
Вот что стоит у меня на моей Ubuntu где проблема:
Есть идеи? Прошу прощения за длинные тред, не нашел опции спойлера под плохочитабельные части..(
modx.pro/help/384/#comment-4101
Возможно еще кого-нибудь.
Впереди ждет очень много букв, можно в прицнипе прочесть с конца…
— Расскажу о своем случае ну и о том что я сделал в целях диагностики.
Имеем VMWare на локалхосте с Ubuntu 12 server настроенной по статье Васи.
Управляется все под NGinx+php frm+mysql соответственно.
Сайты и гранты добавляю скриптами, но правда чуть видоизмененными.
Но суть в том что все работает исправно.
— Не много предисловия…
С ModX знаком не давно, буквально пару недель — из разных вариантов на кандидата в CMS для сайтов подошел именно он, в силу своей гибкости, ну и отсутствия извращенных шаблонизаторов серии джумлы и пр. Ну и много еще почему.
Сам являюсь WEB разработчиком на Java2EE, из СУБД работаю с Oracle 11g под него и кодю.
С MySql и PHP разумеется знаком, но серьезные проекты делал давно, когда еще PHP был не объектным, ухх…
— Так вот, сутки борюсь с проблемой что пакет Tickets из коробки, на локалхосте работает не верно — а именно не отрабатывает вызов [[+sections]] и возвращает Null, вне зависимости от данных в tickets_threads (они там есть)
Соответственно, первым делом проверил на modx-test --там все работает.
Потом почесал репу, предположил что возможно что-то не доставилось на локалхосте в силу например канала интернета (большие потери до репозитория), или наличия грантов.
Взял и полностью залил архив в modx-test себе на хост. Сначала только файлы, а базу указал свою, которая была ранее (и где были произведены настройки и была та же проблема) — результата не дало, форма есть, а [[+sections]] в Null.
Затем взял и залил дамп базы в ModX-test и подключился туда.
И каково же было мое удивление, что и там не заработало…
В итоге я решил попытаться понять на уровне чего идет сбой, и включил лог MySql запросов в my.cnf:
general_log_file = /var/log/mysql/mysql.log
general_log = 1
Ну и перезапустив Mysql и удалив кэш, запустил страничку с выводом [[!TicketForm?]]…
В итоге как и было, все по старому, но теперь я могу посмотреть в логе запрос, который сгенерила ОРМ.
Всего на эту операцию по обновлению странички xPDO загенерило 31 запрос в MySql.А именно:
SELECT `modSession`.`id` AS `modSession_id`, `modSession`.`access` AS `modSession_access`, `modSession`.`data` AS `modSession_data` FROM `modx_session` AS `modSession` WHERE `modSession`.`id` = 'auiniaopmpm8ut2l810tqh96s4'
SELECT `modUser`.`id` AS `modUser_id`, `modUser`.`username` AS `modUser_username`, `modUser`.`password` AS `modUser_password`, `modUser`.`cachepwd` AS `modUser_cachepwd`, `modUser`.`class_key` AS `modUser_class_key`, `modUser`.`active` AS `modUser_active`, `modUser`.`remote_key` AS `modUser_remote_key`, `modUser`.`remote_data` AS `modUser_remote_data`, `modUser`.`hash_class` AS `modUser_hash_class`, `modUser`.`salt` AS `modUser_salt`, `modUser`.`primary_group` AS `modUser_primary_group`, `modUser`.`session_stale` AS `modUser_session_stale`, `modUser`.`sudo` AS `modUser_sudo` FROM `modx_users` AS `modUser` WHERE `modUser`.`id` = 3;
SELECT `modUserSetting`.`user` AS `modUserSetting_user`, `modUserSetting`.`key` AS `modUserSetting_key`, `modUserSetting`.`value` AS `modUserSetting_value`, `modUserSetting`.`xtype` AS `modUserSetting_xtype`, `modUserSetting`.`namespace` AS `modUserSetting_namespace`, `modUserSetting`.`area` AS `modUserSetting_area`, `modUserSetting`.`editedon` AS `modUserSetting_editedon` FROM `modx_user_settings` AS `modUserSetting` WHERE `modUserSetting`.`user` = 3;
SELECT `modUserProfile`.`id` AS `modUserProfile_id`, `modUserProfile`.`internalKey` AS `modUserProfile_internalKey`, `modUserProfile`.`fullname` AS `modUserProfile_fullname`, `modUserProfile`.`email` AS `modUserProfile_email`, `modUserProfile`.`phone` AS `modUserProfile_phone`, `modUserProfile`.`mobilephone` AS `modUserProfile_mobilephone`, `modUserProfile`.`blocked` AS `modUserProfile_blocked`, `modUserProfile`.`blockeduntil` AS `modUserProfile_blockeduntil`, `modUserProfile`.`blockedafter` AS `modUserProfile_blockedafter`, `modUserProfile`.`logincount` AS `modUserProfile_logincount`, `modUserProfile`.`lastlogin` AS `modUserProfile_lastlogin`, `modUserProfile`.`thislogin` AS `modUserProfile_thislogin`, `modUserProfile`.`failedlogincount` AS `modUserProfile_failedlogincount`, `modUserProfile`.`sessionid` AS `modUserProfile_sessionid`, `modUserProfile`.`dob` AS `modUserProfile_dob`, `modUserProfile`.`gender` AS `modUserProfile_gender`, `modUserProfile`.`address` AS `modUserProfile_address`, `modUserProfile`.`country` AS `modUserProfile_country`, `modUserProfile`.`city` AS `modUserProfile_city`, `modUserProfile`.`state` AS `modUserProfile_state`, `modUserProfile`.`zip` AS `modUserProfile_zip`, `modUserProfile`.`fax` AS `modUserProfile_fax`, `modUserProfile`.`photo` AS `modUserProfile_photo`, `modUserProfile`.`comment` AS `modUserProfile_comment`, `modUserProfile`.`website` AS `modUserProfile_website`, `modUserProfile`.`extended` AS `modUserProfile_extended` FROM `modx_user_attributes` AS `modUserProfile` WHERE `modUserProfile`.`internalKey` = 3;
SELECT modAccessContext.id, modAccessContext.target, modAccessContext.principal, modAccessContext.authority, modAccessContext.policy, Policy.data FROM `modx_access_context` AS `modAccessContext` LEFT JOIN `modx_access_policies` `Policy` ON `modAccessContext`.`policy` = `Policy`.`id` WHERE ( `modAccessContext`.`principal_class` = 'modUserGroup' AND `modAccessContext`.`target` = 'web' ) ORDER BY modAccessContext.target,modAccessContext.principal,modAccessContext.authority,modAccessContext.policy ASC;
SELECT `modContext`.`key` AS `modContext_key`, `modContext`.`description` AS `modContext_description`, `modContext`.`rank` AS `modContext_rank` FROM `modx_context` AS `modContext` WHERE `modContext`.`key` = 'web';
SELECT modAccessContext.id, modAccessContext.target, modAccessContext.principal, modAccessContext.authority, modAccessContext.policy, Policy.data FROM `modx_access_context` AS `modAccessContext` LEFT JOIN `modx_access_policies` `Policy` ON `modAccessContext`.`policy` = `Policy`.`id` WHERE ( `modAccessContext`.`principal_class` = 'modUserGroup' AND `modAccessContext`.`target` = 'web' ) ORDER BY modAccessContext.target,modAccessContext.principal,modAccessContext.authority,modAccessContext.policy ASC;
SELECT COUNT(DISTINCT `TicketsSection`.`id`) FROM `modx_site_content` AS `TicketsSection` WHERE ( `TicketsSection`.`class_key` = 'TicketsSection' AND `TicketsSection`.`published` = 1 AND `TicketsSection`.`deleted` = 0 );
SELECT `TicketsSection`.`id` AS `TicketsSection_id`, `TicketsSection`.`type` AS `TicketsSection_type`, `TicketsSection`.`contentType` AS `TicketsSection_contentType`, `TicketsSection`.`pagetitle` AS `TicketsSection_pagetitle`, `TicketsSection`.`longtitle` AS `TicketsSection_longtitle`, `TicketsSection`.`description` AS `TicketsSection_description`, `TicketsSection`.`alias` AS `TicketsSection_alias`, `TicketsSection`.`link_attributes` AS `TicketsSection_link_attributes`, `TicketsSection`.`published` AS `TicketsSection_published`, `TicketsSection`.`pub_date` AS `TicketsSection_pub_date`, `TicketsSection`.`unpub_date` AS `TicketsSection_unpub_date`, `TicketsSection`.`parent` AS `TicketsSection_parent`, `TicketsSection`.`isfolder` AS `TicketsSection_isfolder`, `TicketsSection`.`introtext` AS `TicketsSection_introtext`, `TicketsSection`.`content` AS `TicketsSection_content`, `TicketsSection`.`richtext` AS `TicketsSection_richtext`, `TicketsSection`.`template` AS `TicketsSection_template`, `TicketsSection`.`menuindex` AS `TicketsSection_menuindex`, `TicketsSection`.`searchable` AS `TicketsSection_searchable`, `TicketsSection`.`cacheable` AS `TicketsSection_cacheable`, `TicketsSection`.`createdby` AS `TicketsSection_createdby`, `TicketsSection`.`createdon` AS `TicketsSection_createdon`, `TicketsSection`.`editedby` AS `TicketsSection_editedby`, `TicketsSection`.`editedon` AS `TicketsSection_editedon`, `TicketsSection`.`deleted` AS `TicketsSection_deleted`, `TicketsSection`.`deletedon` AS `TicketsSection_deletedon`, `TicketsSection`.`deletedby` AS `TicketsSection_deletedby`, `TicketsSection`.`publishedon` AS `TicketsSection_publishedon`, `TicketsSection`.`publishedby` AS `TicketsSection_publishedby`, `TicketsSection`.`menutitle` AS `TicketsSection_menutitle`, `TicketsSection`.`donthit` AS `TicketsSection_donthit`, `TicketsSection`.`privateweb` AS `TicketsSection_privateweb`, `TicketsSection`.`privatemgr` AS `TicketsSection_privatemgr`, `TicketsSection`.`content_dispo` AS `TicketsSection_content_dispo`, `TicketsSection`.`hidemenu` AS `TicketsSection_hidemenu`, `TicketsSection`.`class_key` AS `TicketsSection_class_key`, `TicketsSection`.`context_key` AS `TicketsSection_context_key`, `TicketsSection`.`content_type` AS `TicketsSection_content_type`, `TicketsSection`.`uri` AS `TicketsSection_uri`, `TicketsSection`.`uri_override` AS `TicketsSection_uri_override`, `TicketsSection`.`hide_children_in_tree` AS `TicketsSection_hide_children_in_tree`, `TicketsSection`.`show_in_tree` AS `TicketsSection_show_in_tree`, `TicketsSection`.`properties` AS `TicketsSection_properties` FROM `modx_site_content` AS `TicketsSection` WHERE ( `TicketsSection`.`class_key` = 'TicketsSection' AND `TicketsSection`.`published` = 1 AND `TicketsSection`.`deleted` = 0 ) ORDER BY `TicketsSection`.`pagetitle` ASC LIMIT 20;
SELECT Acl.target, Acl.principal, Acl.authority, Acl.policy, Policy.data FROM `modx_access_resource_groups` Acl LEFT JOIN `modx_access_policies` Policy ON Policy.id = Acl.policy JOIN `modx_document_groups` ResourceGroup ON Acl.principal_class = 'modUserGroup' AND (Acl.context_key = 'web' OR Acl.context_key IS NULL OR Acl.context_key = '') AND ResourceGroup.document = '2' AND ResourceGroup.document_group = Acl.target GROUP BY Acl.target, Acl.principal, Acl.authority, Acl.policy;
SELECT Acl.target, Acl.principal, Acl.authority, Acl.policy, Policy.data FROM `modx_access_resource_groups` Acl LEFT JOIN `modx_access_policies` Policy ON Policy.id = Acl.policy JOIN `modx_document_groups` ResourceGroup ON Acl.principal_class = 'modUserGroup' AND (Acl.context_key = 'web' OR Acl.context_key IS NULL OR Acl.context_key = '') AND ResourceGroup.document = '4' AND ResourceGroup.document_group = Acl.target GROUP BY Acl.target, Acl.principal, Acl.authority, Acl.policy;
SELECT COUNT(`TicketComment`.`id`) as `comments` FROM `modx_site_content` AS `Ticket` LEFT JOIN `modx_tickets_threads` `TicketThread` ON `TicketThread`.`resource` = `Ticket`.`id` LEFT JOIN `modx_tickets_comments` `TicketComment` ON `TicketThread`.`id` = `TicketComment`.`thread` WHERE ( `Ticket`.`parent` = 2 AND `Ticket`.`published` = 1 AND `Ticket`.`deleted` = 0 );
SELECT COUNT(`TicketView`.`parent`) as `views` FROM `modx_site_content` AS `Ticket` LEFT JOIN `modx_tickets_views` `TicketView` ON `TicketView`.`parent` = `Ticket`.`id` WHERE ( `Ticket`.`parent` = 2 AND `Ticket`.`published` = 1 AND `Ticket`.`deleted` = 0 );
SELECT SUM(`TicketVote`.`value`) as `votes` FROM `modx_site_content` AS `Ticket` LEFT JOIN `modx_tickets_votes` `TicketVote` ON `TicketVote`.`parent` = `Ticket`.`id` AND `TicketVote`.`class` = 'Ticket' WHERE ( `Ticket`.`parent` = 2 AND `Ticket`.`published` = 1 AND `Ticket`.`deleted` = 0 );
SELECT COUNT(DISTINCT `Ticket`.`id`) FROM `modx_site_content` AS `Ticket` WHERE ( `Ticket`.`parent` = 2 AND `Ticket`.`published` = 1 AND `Ticket`.`deleted` = 0 );
SELECT COUNT(`TicketComment`.`id`) as `comments` FROM `modx_site_content` AS `Ticket` LEFT JOIN `modx_tickets_threads` `TicketThread` ON `TicketThread`.`resource` = `Ticket`.`id` LEFT JOIN `modx_tickets_comments` `TicketComment` ON `TicketThread`.`id` = `TicketComment`.`thread` WHERE ( `Ticket`.`parent` = 2 AND `Ticket`.`published` = 1 AND `Ticket`.`deleted` = 0 );
SELECT COUNT(`TicketView`.`parent`) as `views` FROM `modx_site_content` AS `Ticket` LEFT JOIN `modx_tickets_views` `TicketView` ON `TicketView`.`parent` = `Ticket`.`id` WHERE ( `Ticket`.`parent` = 2 AND `Ticket`.`published` = 1 AND `Ticket`.`deleted` = 0 );
SELECT SUM(`TicketVote`.`value`) as `votes` FROM `modx_site_content` AS `Ticket` LEFT JOIN `modx_tickets_votes` `TicketVote` ON `TicketVote`.`parent` = `Ticket`.`id` AND `TicketVote`.`class` = 'Ticket' WHERE ( `Ticket`.`parent` = 2 AND `Ticket`.`published` = 1 AND `Ticket`.`deleted` = 0 );
SELECT COUNT(DISTINCT `Ticket`.`id`) FROM `modx_site_content` AS `Ticket` WHERE ( `Ticket`.`parent` = 2 AND `Ticket`.`published` = 1 AND `Ticket`.`deleted` = 0 );
SELECT COUNT(`TicketComment`.`id`) as `comments` FROM `modx_site_content` AS `Ticket` LEFT JOIN `modx_tickets_threads` `TicketThread` ON `TicketThread`.`resource` = `Ticket`.`id` LEFT JOIN `modx_tickets_comments` `TicketComment` ON `TicketThread`.`id` = `TicketComment`.`thread` WHERE ( `Ticket`.`parent` = 4 AND `Ticket`.`published` = 1 AND `Ticket`.`deleted` = 0 );
SELECT COUNT(`TicketView`.`parent`) as `views` FROM `modx_site_content` AS `Ticket` LEFT JOIN `modx_tickets_views` `TicketView` ON `TicketView`.`parent` = `Ticket`.`id` WHERE ( `Ticket`.`parent` = 4 AND `Ticket`.`published` = 1 AND `Ticket`.`deleted` = 0 );
SELECT SUM(`TicketVote`.`value`) as `votes` FROM `modx_site_content` AS `Ticket` LEFT JOIN `modx_tickets_votes` `TicketVote` ON `TicketVote`.`parent` = `Ticket`.`id` AND `TicketVote`.`class` = 'Ticket' WHERE ( `Ticket`.`parent` = 4 AND `Ticket`.`published` = 1 AND `Ticket`.`deleted` = 0 );
SELECT COUNT(DISTINCT `Ticket`.`id`) FROM `modx_site_content` AS `Ticket` WHERE ( `Ticket`.`parent` = 4 AND `Ticket`.`published` = 1 AND `Ticket`.`deleted` = 0 );
SELECT COUNT(`TicketComment`.`id`) as `comments` FROM `modx_site_content` AS `Ticket` LEFT JOIN `modx_tickets_threads` `TicketThread` ON `TicketThread`.`resource` = `Ticket`.`id` LEFT JOIN `modx_tickets_comments` `TicketComment` ON `TicketThread`.`id` = `TicketComment`.`thread` WHERE ( `Ticket`.`parent` = 4 AND `Ticket`.`published` = 1 AND `Ticket`.`deleted` = 0 );
SELECT COUNT(`TicketView`.`parent`) as `views` FROM `modx_site_content` AS `Ticket` LEFT JOIN `modx_tickets_views` `TicketView` ON `TicketView`.`parent` = `Ticket`.`id` WHERE ( `Ticket`.`parent` = 4 AND `Ticket`.`published` = 1 AND `Ticket`.`deleted` = 0 );
SELECT SUM(`TicketVote`.`value`) as `votes` FROM `modx_site_content` AS `Ticket` LEFT JOIN `modx_tickets_votes` `TicketVote` ON `TicketVote`.`parent` = `Ticket`.`id` AND `TicketVote`.`class` = 'Ticket' WHERE ( `Ticket`.`parent` = 4 AND `Ticket`.`published` = 1 AND `Ticket`.`deleted` = 0 );
SELECT COUNT(DISTINCT `Ticket`.`id`) FROM `modx_site_content` AS `Ticket` WHERE ( `Ticket`.`parent` = 4 AND `Ticket`.`published` = 1 AND `Ticket`.`deleted` = 0 );
SELECT `TicketThread`.`id` AS `TicketThread_id`, `TicketThread`.`resource` AS `TicketThread_resource`, `TicketThread`.`name` AS `TicketThread_name`, `TicketThread`.`subscribers` AS `TicketThread_subscribers`, `TicketThread`.`createdon` AS `TicketThread_createdon`, `TicketThread`.`createdby` AS `TicketThread_createdby`, `TicketThread`.`deleted` AS `TicketThread_deleted`, `TicketThread`.`deletedon` AS `TicketThread_deletedon`, `TicketThread`.`deletedby` AS `TicketThread_deletedby`, `TicketThread`.`comment_last` AS `TicketThread_comment_last`, `TicketThread`.`comment_time` AS `TicketThread_comment_time` FROM `modx_tickets_threads` AS `TicketThread` WHERE `TicketThread`.`name` = 'resource-1';
SELECT `TicketComment`.`id`, `TicketComment`.`thread`, `TicketComment`.`parent`, `TicketComment`.`text`, `TicketComment`.`raw`, `TicketComment`.`name`, `TicketComment`.`email`, `TicketComment`.`ip`, `TicketComment`.`createdon`, `TicketComment`.`createdby`, `TicketComment`.`editedon`, `TicketComment`.`editedby`, `TicketComment`.`deleted`, `TicketComment`.`deletedon`, `TicketComment`.`deletedby`, `modUserProfile`.`internalKey`, `modUserProfile`.`fullname`, `modUserProfile`.`email`, `modUserProfile`.`phone`, `modUserProfile`.`mobilephone`, `modUserProfile`.`blocked`, `modUserProfile`.`blockeduntil`, `modUserProfile`.`blockedafter`, `modUserProfile`.`logincount`, `modUserProfile`.`lastlogin`, `modUserProfile`.`thislogin`, `modUserProfile`.`failedlogincount`, `modUserProfile`.`sessionid`, `modUserProfile`.`dob`, `modUserProfile`.`gender`, `modUserProfile`.`address`, `modUserProfile`.`country`, `modUserProfile`.`city`, `modUserProfile`.`state`, `modUserProfile`.`zip`, `modUserProfile`.`fax`, `modUserProfile`.`photo`, `modUserProfile`.`comment`, `modUserProfile`.`website`, `modUserProfile`.`extended`, `TicketThread`.`resource`, `modUser`.`username` FROM `modx_tickets_comments` AS `TicketComment` LEFT JOIN `modx_users` `modUser` ON `TicketComment`.`createdby` = `modUser`.`id` LEFT JOIN `modx_user_attributes` `modUserProfile` ON `TicketComment`.`createdby` = `modUserProfile`.`internalKey` LEFT JOIN `modx_tickets_threads` `TicketThread` ON `TicketThread`.`id` = `TicketComment`.`thread` WHERE `TicketComment`.`thread` = 1 ORDER BY id ASC;
SELECT `modMediaSource`.`id` AS `modMediaSource_id`, `modMediaSource`.`name` AS `modMediaSource_name`, `modMediaSource`.`description` AS `modMediaSource_description`, `modMediaSource`.`class_key` AS `modMediaSource_class_key`, `modMediaSource`.`properties` AS `modMediaSource_properties`, `modMediaSource`.`is_stream` AS `modMediaSource_is_stream` FROM `modx_media_sources` AS `modMediaSource` WHERE `modMediaSource`.`id` = 1;
SELECT `modSession`.`id` AS `modSession_id`, `modSession`.`access` AS `modSession_access`, `modSession`.`data` AS `modSession_data` FROM `modx_session` AS `modSession` WHERE `modSession`.`id` = 'auiniaopmpm8ut2l810tqh96s4';
Согласитесь, не плохо… Но теперь нужно найти те, которые работают для показа в снипете и отвечают за Sections.
А это в общем -то 8 и 9 запросы:
SELECT COUNT(DISTINCT `TicketsSection`.`id`)
FROM `modx_site_content` AS `TicketsSection`
WHERE ( `TicketsSection`.`class_key` = 'TicketsSection'
AND `TicketsSection`.`published` = 1
AND `TicketsSection`.`deleted` = 0);
SELECT `TicketsSection`.`id` AS `TicketsSection_id`,
`TicketsSection`.`type` AS `TicketsSection_type`,
`TicketsSection`.`contentType` AS `TicketsSection_contentType`,
`TicketsSection`.`pagetitle` AS `TicketsSection_pagetitle`,
`TicketsSection`.`longtitle` AS `TicketsSection_longtitle`,
`TicketsSection`.`description` AS `TicketsSection_description`,
`TicketsSection`.`alias` AS `TicketsSection_alias`,
`TicketsSection`.`link_attributes` AS `TicketsSection_link_attributes`,
`TicketsSection`.`published` AS `TicketsSection_published`,
`TicketsSection`.`pub_date` AS `TicketsSection_pub_date`,
`TicketsSection`.`unpub_date` AS `TicketsSection_unpub_date`,
`TicketsSection`.`parent` AS `TicketsSection_parent`,
`TicketsSection`.`isfolder` AS `TicketsSection_isfolder`,
`TicketsSection`.`introtext` AS `TicketsSection_introtext`,
`TicketsSection`.`content` AS `TicketsSection_content`,
`TicketsSection`.`richtext` AS `TicketsSection_richtext`,
`TicketsSection`.`template` AS `TicketsSection_template`,
`TicketsSection`.`menuindex` AS `TicketsSection_menuindex`,
`TicketsSection`.`searchable` AS `TicketsSection_searchable`,
`TicketsSection`.`cacheable` AS `TicketsSection_cacheable`,
`TicketsSection`.`createdby` AS `TicketsSection_createdby`,
`TicketsSection`.`createdon` AS `TicketsSection_createdon`,
`TicketsSection`.`editedby` AS `TicketsSection_editedby`,
`TicketsSection`.`editedon` AS `TicketsSection_editedon`,
`TicketsSection`.`deleted` AS `TicketsSection_deleted`,
`TicketsSection`.`deletedon` AS `TicketsSection_deletedon`,
`TicketsSection`.`deletedby` AS `TicketsSection_deletedby`,
`TicketsSection`.`publishedon` AS `TicketsSection_publishedon`,
`TicketsSection`.`publishedby` AS `TicketsSection_publishedby`,
`TicketsSection`.`menutitle` AS `TicketsSection_menutitle`,
`TicketsSection`.`donthit` AS `TicketsSection_donthit`,
`TicketsSection`.`privateweb` AS `TicketsSection_privateweb`,
`TicketsSection`.`privatemgr` AS `TicketsSection_privatemgr`,
`TicketsSection`.`content_dispo` AS `TicketsSection_content_dispo`,
`TicketsSection`.`hidemenu` AS `TicketsSection_hidemenu`,
`TicketsSection`.`class_key` AS `TicketsSection_class_key`,
`TicketsSection`.`context_key` AS `TicketsSection_context_key`,
`TicketsSection`.`content_type` AS `TicketsSection_content_type`,
`TicketsSection`.`uri` AS `TicketsSection_uri`,
`TicketsSection`.`uri_override` AS `TicketsSection_uri_override`,
`TicketsSection`.`hide_children_in_tree`
AS `TicketsSection_hide_children_in_tree`,
`TicketsSection`.`show_in_tree` AS `TicketsSection_show_in_tree`,
`TicketsSection`.`properties` AS `TicketsSection_properties`
FROM `modx_site_content` AS `TicketsSection`
WHERE ( `TicketsSection`.`class_key` = 'TicketsSection'
AND `TicketsSection`.`published` = 1
AND `TicketsSection`.`deleted` = 0)
ORDER BY `TicketsSection`.`pagetitle` ASC
LIMIT 20;
Ну вот… Корень зла вроде -бы найден, подумал я… Но-прогнав их наживую, в базе, я получил выборки без каких-либо ошибок — первый вернул 2 — количество созданных в админке ресурсов под тикеты, а второй вернул нормальную выборку, подходящую под запрос.
В итоге как я понимаю, этого вполне хватит для вывода селектед-списка на странице.
Но что-то мешает… И что не понятно.
В исходниках класс, который отвечает за построение этого списка называется getlist.class.php
ну и собственно запрос он делает такой:
public function prepareQueryBeforeCount(xPDOQuery $c) {
if ($parents = $this->getProperty('parents')) {
if (!is_array($parents)) {
$parents = explode(',', $parents);
}
$c->where(array('parent:IN' => $parents));
}
$c->where(array(
'class_key' => 'Ticket'
,'published' => 1
,'deleted' => 0
));
return $c;
Голову сломал… Но почему там Null?Понятное дело, что проблема судя по вышестоящему описанию не в хард-коде, не в базе, а в ПО сервера.
И кстати, на Denwer эта котовасия работает!!((
Вот что стоит у меня на моей Ubuntu где проблема:
root@ubuntu:~# nginx -v
nginx version: nginx/1.2.1
root@ubuntu:~# php5 -v
PHP 5.4.6-1ubuntu1.1 (cli) (built: Nov 15 2012 01:23:47)
Copyright © 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright © 1998-2012 Zend Technologies
mysql> select version();
+-----------------------------+
| version() |
+-----------------------------+
| 5.5.28-0ubuntu0.12.10.2-log |
+-----------------------------+
1 row in set (0.00 sec)
Есть идеи? Прошу прощения за длинные тред, не нашел опции спойлера под плохочитабельные части..(
Комментарии: 7
У меня на php 5.4 тоже не работает.
При работе с процессорами, $response->isError() возвращает true, при отсутствии ошибок. Разбирался полдня, так и не понял, почему. Стоит сменить версию на 5.3 — сразу всё хорошо.
Видимо, надо построить отдельный сервер с 5.4 и вдумчиво точить под него.
P.S. Спойлер есть, просто не вынесен в редактор.
При работе с процессорами, $response->isError() возвращает true, при отсутствии ошибок. Разбирался полдня, так и не понял, почему. Стоит сменить версию на 5.3 — сразу всё хорошо.
Видимо, надо построить отдельный сервер с 5.4 и вдумчиво точить под него.
P.S. Спойлер есть, просто не вынесен в редактор.
Раскопал, в чём дело — modx.pro/development/589/
Молодец! Я тоже пришел в выводу в итоге, что проблема именно в PHP=))
Ну, посмотрим чем помогут товарищи с modx.com =)
Ждем хот фикса =)
Ну, посмотрим чем помогут товарищи с modx.com =)
Ждем хот фикса =)
Скорее всего, они ответят, что не надо проверять результат для getList процессоров. Я и сам не знаю, зачем я его проверяю? Что там может быть, какая ошибка?
Но, с другой стороны, конечно, всё-равно это не правильное поведение функции.
Но, с другой стороны, конечно, всё-равно это не правильное поведение функции.
Как по мне- все правильно сделал, что обрабатываешь потенциальные эксепшены, это правильная практика, и ее обязательно нужно использовать при построении любых систем, как самых маленьких, так и Enterprise уровня.
Только здесь стоило еще мне кажется писать в лог- тогда бы не пришлось так долго расследовать случай.
Скажем в рамках своей работы на Java, у меня есть один из серьезных проектов бизнес-критикал уровня, который внедрен в Альфа Банке — и если бы каждый динамический кусок кода не приводился бы к виду
Только здесь стоило еще мне кажется писать в лог- тогда бы не пришлось так долго расследовать случай.
Скажем в рамках своей работы на Java, у меня есть один из серьезных проектов бизнес-критикал уровня, который внедрен в Альфа Банке — и если бы каждый динамический кусок кода не приводился бы к виду
($response->isError()) {
$modx->log(modX::LOG_LEVEL_ERROR, 'Message: '.$response->getMessage());
то было бы очень сложно искать узкие места…
Согласен, но в данном конкретном случае $response->getMessage() пуст, иначе мы увидели бы его на странице.
То есть, ошибки нет, сообщения о ней — тем более, а функция проверки ложно сигнализирует, что есть трабл.
В общем, хорошо, что ты меня подопнул разобраться с этим вопросом. Хоть я и потратил на него всё воскресенье, зато теперь у нас есть новая версия Tickets =)
То есть, ошибки нет, сообщения о ней — тем более, а функция проверки ложно сигнализирует, что есть трабл.
В общем, хорошо, что ты меня подопнул разобраться с этим вопросом. Хоть я и потратил на него всё воскресенье, зато теперь у нас есть новая версия Tickets =)
Рад стараться, сам потихонечку начинаю вливаться в ModX и PHP кодинг, все не привычно, но надеюсь натаскаюсь, по возможности буду помогать =)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.