id: 7 source: 1 name: pdoSitemap category: pdoTools properties: "a:24:{s:3:\"tpl\";a:7:{s:4:\"name\";s:3:\"tpl\";s:4:\"desc\";s:17:\"pdotools_prop_tpl\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:145:\"@INLINE \n\t[[+url]]\n\t[[+date]]\n\t[[+update]]\n\t[[+priority]]\n\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:10:\"tplWrapper\";a:7:{s:4:\"name\";s:10:\"tplWrapper\";s:4:\"desc\";s:24:\"pdotools_prop_tplWrapper\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:110:\"@INLINE \n\n[[+output]]\n\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:9:\"templates\";a:7:{s:4:\"name\";s:9:\"templates\";s:4:\"desc\";s:23:\"pdotools_prop_templates\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:0:\"\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:7:\"context\";a:7:{s:4:\"name\";s:7:\"context\";s:4:\"desc\";s:21:\"pdotools_prop_context\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:0:\"\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:5:\"depth\";a:7:{s:4:\"name\";s:5:\"depth\";s:4:\"desc\";s:19:\"pdotools_prop_depth\";s:4:\"type\";s:11:\"numberfield\";s:7:\"options\";a:0:{}s:5:\"value\";i:10;s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:11:\"showDeleted\";a:7:{s:4:\"name\";s:11:\"showDeleted\";s:4:\"desc\";s:25:\"pdotools_prop_showDeleted\";s:4:\"type\";s:13:\"combo-boolean\";s:7:\"options\";a:0:{}s:5:\"value\";b:0;s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:10:\"showHidden\";a:7:{s:4:\"name\";s:10:\"showHidden\";s:4:\"desc\";s:24:\"pdotools_prop_showHidden\";s:4:\"type\";s:13:\"combo-boolean\";s:7:\"options\";a:0:{}s:5:\"value\";b:0;s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:13:\"sitemapSchema\";a:7:{s:4:\"name\";s:13:\"sitemapSchema\";s:4:\"desc\";s:27:\"pdotools_prop_sitemapSchema\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:43:\"http://www.sitemaps.org/schemas/sitemap/0.9\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:15:\"showUnpublished\";a:7:{s:4:\"name\";s:15:\"showUnpublished\";s:4:\"desc\";s:29:\"pdotools_prop_showUnpublished\";s:4:\"type\";s:13:\"combo-boolean\";s:7:\"options\";a:0:{}s:5:\"value\";b:0;s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:16:\"hideUnsearchable\";a:7:{s:4:\"name\";s:16:\"hideUnsearchable\";s:4:\"desc\";s:30:\"pdotools_prop_hideUnsearchable\";s:4:\"type\";s:13:\"combo-boolean\";s:7:\"options\";a:0:{}s:5:\"value\";b:1;s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:9:\"resources\";a:7:{s:4:\"name\";s:9:\"resources\";s:4:\"desc\";s:23:\"pdotools_prop_resources\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:0:\"\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:7:\"parents\";a:7:{s:4:\"name\";s:7:\"parents\";s:4:\"desc\";s:21:\"pdotools_prop_parents\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:0:\"\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:6:\"sortby\";a:7:{s:4:\"name\";s:6:\"sortby\";s:4:\"desc\";s:20:\"pdotools_prop_sortby\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:9:\"menuindex\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:7:\"sortdir\";a:7:{s:4:\"name\";s:7:\"sortdir\";s:4:\"desc\";s:21:\"pdotools_prop_sortdir\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:3:\"asc\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:5:\"where\";a:7:{s:4:\"name\";s:5:\"where\";s:4:\"desc\";s:19:\"pdotools_prop_where\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:0:\"\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:10:\"includeTVs\";a:7:{s:4:\"name\";s:10:\"includeTVs\";s:4:\"desc\";s:24:\"pdotools_prop_includeTVs\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:0:\"\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:10:\"prepareTVs\";a:7:{s:4:\"name\";s:10:\"prepareTVs\";s:4:\"desc\";s:24:\"pdotools_prop_prepareTVs\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:1:\"1\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:10:\"processTVs\";a:7:{s:4:\"name\";s:10:\"processTVs\";s:4:\"desc\";s:24:\"pdotools_prop_processTVs\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:0:\"\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:15:\"outputSeparator\";a:7:{s:4:\"name\";s:15:\"outputSeparator\";s:4:\"desc\";s:29:\"pdotools_prop_outputSeparator\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:1:\"\n\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:8:\"forceXML\";a:7:{s:4:\"name\";s:8:\"forceXML\";s:4:\"desc\";s:22:\"pdotools_prop_forceXML\";s:4:\"type\";s:13:\"combo-boolean\";s:7:\"options\";a:0:{}s:5:\"value\";b:1;s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:13:\"useWeblinkUrl\";a:7:{s:4:\"name\";s:13:\"useWeblinkUrl\";s:4:\"desc\";s:27:\"pdotools_prop_useWeblinkUrl\";s:4:\"type\";s:13:\"combo-boolean\";s:7:\"options\";a:0:{}s:5:\"value\";b:1;s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:5:\"cache\";a:7:{s:4:\"name\";s:5:\"cache\";s:4:\"desc\";s:19:\"pdotools_prop_cache\";s:4:\"type\";s:13:\"combo-boolean\";s:7:\"options\";a:0:{}s:5:\"value\";b:1;s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:8:\"cacheKey\";a:7:{s:4:\"name\";s:8:\"cacheKey\";s:4:\"desc\";s:22:\"pdotools_prop_cacheKey\";s:4:\"type\";s:9:\"textfield\";s:7:\"options\";a:0:{}s:5:\"value\";s:0:\"\";s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}s:9:\"cacheTime\";a:7:{s:4:\"name\";s:9:\"cacheTime\";s:4:\"desc\";s:23:\"pdotools_prop_cacheTime\";s:4:\"type\";s:11:\"numberfield\";s:7:\"options\";a:0:{}s:5:\"value\";i:600;s:7:\"lexicon\";s:19:\"pdotools:properties\";s:4:\"area\";s:0:\"\";}}" static_file: core/components/pdotools/elements/snippets/snippet.pdositemap.php ----- /** @var array $scriptProperties */ /** @var pdoFetch $pdoFetch */ $fqn = $modx->getOption('pdoFetch.class', null, 'pdotools.pdofetch', true); $path = $modx->getOption('pdofetch_class_path', null, MODX_CORE_PATH . 'components/pdotools/model/', true); if ($pdoClass = $modx->loadClass($fqn, $path, false, true)) { $pdoFetch = new $pdoClass($modx, $scriptProperties); } else { return false; } $pdoFetch->addTime('pdoTools loaded'); // Default variables if (empty($tpl)) { $tpl = "@INLINE \n\n\t[[+url]]\n\t[[+date]]\n\t[[+update]]\n\t[[+priority]]\n"; } if (empty($tplWrapper)) { $tplWrapper = "@INLINE \n\n[[+output]]\n"; } if (empty($sitemapSchema)) { $sitemapSchema = 'http://www.sitemaps.org/schemas/sitemap/0.9'; } if (empty($outputSeparator)) { $outputSeparator = "\n"; } if (empty($cacheKey)) { $scriptProperties['cacheKey'] = 'sitemap/' . substr(md5(json_encode($scriptProperties)), 0, 6); } // Convert parameters from GoogleSiteMap if exists if (!empty($itemTpl)) { $tpl = $itemTpl; } if (!empty($containerTpl)) { $tplWrapper = $containerTpl; } if (!empty($allowedtemplates)) { $scriptProperties['templates'] = $allowedtemplates; } if (!empty($maxDepth)) { $scriptProperties['depth'] = $maxDepth; } if (isset($hideDeleted)) { $scriptProperties['showDeleted'] = !$hideDeleted; } if (isset($published)) { $scriptProperties['showUnpublished'] = !$published; } if (isset($searchable)) { $scriptProperties['showUnsearchable'] = !$searchable; } if (!empty($googleSchema)) { $sitemapSchema = $googleSchema; } if (!empty($excludeResources)) { $tmp = array_map('trim', explode(',', $excludeResources)); foreach ($tmp as $v) { if (!empty($scriptProperties['resources'])) { $scriptProperties['resources'] .= ',-' . $v; } else { $scriptProperties['resources'] = '-' . $v; } } } if (!empty($excludeChildrenOf)) { $tmp = array_map('trim', explode(',', $excludeChildrenOf)); foreach ($tmp as $v) { if (!empty($scriptProperties['parents'])) { $scriptProperties['parents'] .= ',-' . $v; } else { $scriptProperties['parents'] = '-' . $v; } } } if (!empty($startId)) { if (!empty($scriptProperties['parents'])) { $scriptProperties['parents'] .= ',' . $startId; } else { $scriptProperties['parents'] = $startId; } } if (!empty($sortBy)) { $scriptProperties['sortby'] = $sortBy; } if (!empty($sortDir)) { $scriptProperties['sortdir'] = $sortDir; } if (!empty($priorityTV)) { if (!empty($scriptProperties['includeTVs'])) { $scriptProperties['includeTVs'] .= ',' . $priorityTV; } else { $scriptProperties['includeTVs'] = $priorityTV; } } if (!empty($itemSeparator)) { $outputSeparator = $itemSeparator; } //--- $class = 'modResource'; $where = []; if (empty($showHidden)) { $where[] = [ $class . '.hidemenu' => 0, 'OR:' . $class . '.class_key:IN' => ['Ticket', 'Article'], ]; } if (empty($context)) { $scriptProperties['context'] = $modx->context->key; } $select = [$class => 'id,editedon,createdon,context_key,class_key,uri']; if (!empty($useWeblinkUrl)) { $select[$class] .= ',content'; } // Add custom parameters foreach (['where', 'select'] as $v) { if (!empty($scriptProperties[$v])) { $tmp = $scriptProperties[$v]; if (!is_array($tmp)) { $tmp = json_decode($tmp, true); } if (is_array($tmp)) { $$v = array_merge($$v, $tmp); } } unset($scriptProperties[$v]); } $pdoFetch->addTime('Conditions prepared'); // Default parameters $default = [ 'class' => $class, 'where' => json_encode($where), 'select' => json_encode($select), 'sortby' => "{$class}.parent ASC, {$class}.menuindex", 'sortdir' => 'ASC', 'return' => 'data', 'scheme' => 'full', 'limit' => 0, ]; // Merge all properties and run! $pdoFetch->addTime('Query parameters ready'); $pdoFetch->setConfig(array_merge($default, $scriptProperties), false); if (!empty($cache)) { $data = $pdoFetch->getCache($scriptProperties); } if (!isset($return)) { $return = 'chunks'; } if (empty($data)) { $now = time(); $data = $urls = []; $rows = $pdoFetch->run(); foreach ($rows as $row) { if (!empty($useWeblinkUrl) && $row['class_key'] == 'modWebLink') { $row['url'] = is_numeric(trim($row['content'], '[]~ ')) ? $pdoFetch->makeUrl((int)trim($row['content'], '[]~ '), $row) : $row['content']; } else { $row['url'] = $pdoFetch->makeUrl($row['id'], $row); } unset($row['content']); $time = !empty($row['editedon']) ? $row['editedon'] : $row['createdon']; $row['date'] = date('c', $time); $datediff = floor(($now - $time) / 86400); if ($datediff <= 1) { $row['priority'] = '1.0'; $row['update'] = 'daily'; } elseif (($datediff > 1) && ($datediff <= 7)) { $row['priority'] = '0.75'; $row['update'] = 'weekly'; } elseif (($datediff > 7) && ($datediff <= 30)) { $row['priority'] = '0.50'; $row['update'] = 'weekly'; } else { $row['priority'] = '0.25'; $row['update'] = 'monthly'; } if (!empty($priorityTV) && !empty($row[$priorityTV])) { $row['priority'] = $row[$priorityTV]; } // Fix possible duplicates made by modWebLink if (!empty($urls[$row['url']])) { if ($urls[$row['url']] > $row['date']) { continue; } } $urls[$row['url']] = $row['date']; // Add item to output if ($return === 'data') { $data[$row['url']] = $row; } else { $data[$row['url']] = $pdoFetch->parseChunk($tpl, $row); if (strpos($data[$row['url']], '[[') !== false) { $modx->parser->processElementTags('', $data[$row['url']], true, true, '[[', ']]', array(), 10); } } } $pdoFetch->addTime('Rows processed'); if (!empty($cache)) { $pdoFetch->setCache($data, $scriptProperties); } } if ($return === 'data') { $output = $data; } else { $output = implode($outputSeparator, $data); $output = $pdoFetch->getChunk($tplWrapper, [ 'schema' => $sitemapSchema, 'output' => $output, 'items' => $output, ]); $pdoFetch->addTime('Rows wrapped'); if ($modx->user->hasSessionContext('mgr') && !empty($showLog)) { $output .= '
' . print_r($pdoFetch->getTime(), 1) . '
'; } } if (!empty($forceXML)) { header("Content-Type:text/xml"); @session_write_close(); exit($output); } else { return $output; }