<![CDATA[ Создание сниппетов с API - My Forums]]> https://forums.modx.com/thread/?thread=57062 <![CDATA[Re: &#1057;&#1086;&#1079;&#1076;&#1072;&#1085;&#1080;&#1077; &#1089;&#1085;&#1080;&#1087;&#1087;&#1077;&#1090;&#1086;&#1074; &#1089; API]]> https://forums.modx.com/thread/57062/api#dis-post-334641 Quote from: Tohin at Mar 06, 2009, 11:27 AM

Если я закомментирую "GROUP BY sc.id" ? (вроде так работает)
Это баг или фича? Или у меня кривые руки?
Если у Вас MySQL 5.0.51, то дело именно в баге данной версии сервера баз данных.
http://bugs.mysql.com/bug.php?id=35181 - смотрим сюда.
Если закомментируете, то в принципе не должно быть особых проблем (я однажды тоже так делал).
Но по большому счету лучше обновить MySQL.]]>
suhinin Mar 06, 2009, 06:06 AM https://forums.modx.com/thread/57062/api#dis-post-334641
<![CDATA[Re: &#1057;&#1086;&#1079;&#1076;&#1072;&#1085;&#1080;&#1077; &#1089;&#1085;&#1080;&#1087;&#1087;&#1077;&#1090;&#1086;&#1074; &#1089; API]]> https://forums.modx.com/thread/57062/api#dis-post-334640
Нашел саму функцию:
 function getDocumentChildren($parentid= 0, $published= 1, $deleted= 0, $fields= "*", $where= '', $sort= "menuindex", $dir= "ASC", $limit= "") {
        $limit= ($limit != "") ? "LIMIT $limit" : "";
        $tblsc= $this->getFullTableName("site_content");
        $tbldg= $this->getFullTableName("document_groups");
        // modify field names to use sc. table reference
        $fields= 'sc.' . implode(',sc.', preg_replace("/^\s/i", "", explode(',', $fields)));
        $sort= ($sort == "") ? "" : 'sc.' . implode(',sc.', preg_replace("/^\s/i", "", explode(',', $sort)));
        if ($where != '')
            $where= 'AND ' . $where;
        // get document groups for current user
        if ($docgrp= $this->getUserDocGroups())
            $docgrp= implode(",", $docgrp);
        // build query
        $access= ($this->isFrontend() ? "sc.privateweb=0" : "1='" . $_SESSION['mgrRole'] . "' OR sc.privatemgr=0") .
         (!$docgrp ? "" : " OR dg.document_group IN ($docgrp)");
        $sql= "SELECT DISTINCT $fields
              FROM $tblsc sc
              LEFT JOIN $tbldg dg on dg.document = sc.id
              WHERE sc.parent = '$parentid' AND sc.published=$published AND sc.deleted=$deleted $where
              AND ($access)
              GROUP BY sc.id " .
         ($sort ? " ORDER BY $sort $dir " : "") . " $limit ";
        $result= $this->dbQuery($sql);
        $resourceArray= array ();
        for ($i= 0; $i < @ $this->recordCount($result); $i++) {
            array_push($resourceArray, @ $this->fetchRow($result));
        }
        return $resourceArray;
    }


Если я закомментирую "GROUP BY sc.id" ? (вроде так работает)
Это баг или фича? Или у меня кривые руки?]]>
Tohin Mar 06, 2009, 05:27 AM https://forums.modx.com/thread/57062/api#dis-post-334640
<![CDATA[Re: &#1057;&#1086;&#1079;&#1076;&#1072;&#1085;&#1080;&#1077; &#1089;&#1085;&#1080;&#1087;&#1087;&#1077;&#1090;&#1086;&#1074; &#1089; API]]> https://forums.modx.com/thread/57062/api#dis-post-334639 Пишу.
$results = $modx->getDocumentChildren(
$id = $startid,
$active = 1,
$deleted = 0,
'id, pagetitle, published, menuindex, deleted, hidemenu, menutitle',
$where = 'hidemenu = 0',
$sort='menuindex');

print_r($results);


получаю массив по id...

[0] => Array
(
[id] => 1
[pagetitle] => Главная
[published] => 1
[menuindex] => 100
[deleted] => 0
[hidemenu] => 0
[menutitle] => Главная
)

[1] => Array
(
[id] => 47
[pagetitle] => О нас
[published] => 1
[menuindex] => 5
[deleted] => 0
[hidemenu] => 0
[menutitle] => О нас
)
)

Перехватил sql:
SELECT DISTINCT sc.id, sc.pagetitle, sc.published, sc.menuindex, sc.deleted, sc.hidemenu, sc.menutitle
FROM `modx`.`modx_site_content` sc
LEFT JOIN `modx`.`modx_document_groups` dg ON dg.document = sc.id
WHERE sc.parent = '52'
AND sc.published =1
AND sc.deleted =0
AND hidemenu =0
AND (
sc.privateweb =0
)
GROUP BY sc.id
ORDER BY sc.menuindex ASC 
LIMIT 0 , 30 

Проблема в "GROUP BY sc.id", однако в описании API я не нашел как отключить этот параметр...]]>
Tohin Mar 05, 2009, 07:45 AM https://forums.modx.com/thread/57062/api#dis-post-334639
<![CDATA[Re: &#1057;&#1086;&#1079;&#1076;&#1072;&#1085;&#1080;&#1077; &#1089;&#1085;&#1080;&#1087;&#1087;&#1077;&#1090;&#1086;&#1074; &#1089; API]]> https://forums.modx.com/thread/57062/api#dis-post-334638
Офтоп: При использовании тега [ code ] внутри русские буковки не отображаются.... embarrassed Хотя наверно и так это известно...]]>
Tohin Feb 23, 2009, 02:33 PM https://forums.modx.com/thread/57062/api#dis-post-334638
<![CDATA[Re: &#1057;&#1086;&#1079;&#1076;&#1072;&#1085;&#1080;&#1077; &#1089;&#1085;&#1080;&#1087;&#1087;&#1077;&#1090;&#1086;&#1074; &#1089; API]]> https://forums.modx.com/thread/57062/api#dis-post-334637 Quote from: Tohin at Feb 23, 2009, 05:17 PM

Я так понял, что внутри опрееляемой мной функции я не мог использовать API?
global $modx; - внутри своей функции.]]>
suhinin Feb 23, 2009, 01:26 PM https://forums.modx.com/thread/57062/api#dis-post-334637
<![CDATA[&#1057;&#1086;&#1079;&#1076;&#1072;&#1085;&#1080;&#1077; &#1089;&#1085;&#1080;&#1087;&#1087;&#1077;&#1090;&#1086;&#1074; &#1089; API]]> https://forums.modx.com/thread/57062/api#dis-post-334636 Заморочился с созданием меню, Wayfinder не хотел бы использовать ввиду его громоздкости и ненужного функционала.

Итак пишу код :

<?php
//определяем функцию

function  CreateMenu ($res)  {
// идет скучное форматирование вывода хтмл для каждого документа. роли не играет поэтому приводить не буду.
//Дальше я проверяю существует ли для данного документа дочерние,
//и пытаюсь рекурсивно вызвать функцию построение ХТМЛ

if ($results = $modx->getDocumentChildren($value["id"])) { //если есть дочерние документы обрабатываем их.
CreateMenu ($results);
}
}



$results = $modx->getDocumentChildren(0);
$output = "<!-- Start Menu Out -->";
$output.= CreateMenu ($results);
$output.= "<!-- End Menu Out -->";
// Возвращаем результат работы сниппета
return $output;
?>


И в итоге получаю грабли:
Fatal error: Call to a member function getDocumentChildren() on a non-object in www\manager\includes\document.parser.class.inc.php(769) : eval()’d code on line 29

Я так понял, что внутри опрееляемой мной функции я не мог использовать API?
Как обойти эти грабли?]]>
Tohin Feb 23, 2009, 11:17 AM https://forums.modx.com/thread/57062/api#dis-post-334636