本文整理汇总了PHP中ApiPageSet::setRedirectMergePolicy方法的典型用法代码示例。如果您正苦于以下问题:PHP ApiPageSet::setRedirectMergePolicy方法的具体用法?PHP ApiPageSet::setRedirectMergePolicy怎么用?PHP ApiPageSet::setRedirectMergePolicy使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ApiPageSet
的用法示例。
在下文中一共展示了ApiPageSet::setRedirectMergePolicy方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: run
/**
* @param ApiPageSet $resultPageSet
*/
private function run($resultPageSet = null)
{
$params = $this->extractRequestParams();
$search = $params['search'];
$limit = $params['limit'];
$namespaces = $params['namespace'];
$offset = $params['offset'];
$searchEngine = MediaWikiServices::getInstance()->newSearchEngine();
$searchEngine->setLimitOffset($limit + 1, $offset);
$searchEngine->setNamespaces($namespaces);
$titles = $searchEngine->extractTitles($searchEngine->completionSearchWithVariants($search));
if ($resultPageSet) {
$resultPageSet->setRedirectMergePolicy(function (array $current, array $new) {
if (!isset($current['index']) || $new['index'] < $current['index']) {
$current['index'] = $new['index'];
}
return $current;
});
if (count($titles) > $limit) {
$this->setContinueEnumParameter('offset', $offset + $params['limit']);
array_pop($titles);
}
$resultPageSet->populateFromTitles($titles);
foreach ($titles as $index => $title) {
$resultPageSet->setGeneratorData($title, ['index' => $index + $offset + 1]);
}
} else {
$result = $this->getResult();
$count = 0;
foreach ($titles as $title) {
if (++$count > $limit) {
$this->setContinueEnumParameter('offset', $offset + $params['limit']);
break;
}
$vals = ['ns' => intval($title->getNamespace()), 'title' => $title->getPrefixedText()];
if ($title->isSpecialPage()) {
$vals['special'] = true;
} else {
$vals['pageid'] = intval($title->getArticleID());
}
$fit = $result->addValue(['query', $this->getModuleName()], null, $vals);
if (!$fit) {
$this->setContinueEnumParameter('offset', $offset + $count - 1);
break;
}
}
$result->addIndexedTagName(['query', $this->getModuleName()], $this->getModulePrefix());
}
}
示例2: run
//.........这里部分代码省略.........
ApiQueryBase::addTitleInfo($vals, $title);
if (isset($prop['snippet'])) {
$vals['snippet'] = $result->getTextSnippet($terms);
}
if (isset($prop['size'])) {
$vals['size'] = $result->getByteSize();
}
if (isset($prop['wordcount'])) {
$vals['wordcount'] = $result->getWordCount();
}
if (isset($prop['timestamp'])) {
$vals['timestamp'] = wfTimestamp(TS_ISO_8601, $result->getTimestamp());
}
if (isset($prop['titlesnippet'])) {
$vals['titlesnippet'] = $result->getTitleSnippet();
}
if (isset($prop['categorysnippet'])) {
$vals['categorysnippet'] = $result->getCategorySnippet();
}
if (!is_null($result->getRedirectTitle())) {
if (isset($prop['redirecttitle'])) {
$vals['redirecttitle'] = $result->getRedirectTitle()->getPrefixedText();
}
if (isset($prop['redirectsnippet'])) {
$vals['redirectsnippet'] = $result->getRedirectSnippet();
}
}
if (!is_null($result->getSectionTitle())) {
if (isset($prop['sectiontitle'])) {
$vals['sectiontitle'] = $result->getSectionTitle()->getFragment();
}
if (isset($prop['sectionsnippet'])) {
$vals['sectionsnippet'] = $result->getSectionSnippet();
}
}
if (isset($prop['isfilematch'])) {
$vals['isfilematch'] = $result->isFileMatch();
}
// Add item to results and see whether it fits
$fit = $apiResult->addValue(array('query', $this->getModuleName()), null, $vals);
if (!$fit) {
$this->setContinueEnumParameter('offset', $params['offset'] + $count - 1);
break;
}
} else {
$titles[] = $title;
}
$result = $matches->next();
}
$hasInterwikiResults = false;
$totalhits = null;
if ($interwiki && $resultPageSet === null && $matches->hasInterwikiResults()) {
foreach ($matches->getInterwikiResults() as $matches) {
$matches = $matches->getInterwikiResults();
$hasInterwikiResults = true;
// Include number of results if requested
if ($resultPageSet === null && isset($searchInfo['totalhits'])) {
$totalhits += $matches->getTotalHits();
}
$result = $matches->next();
while ($result) {
$title = $result->getTitle();
if ($resultPageSet === null) {
$vals = array('namespace' => $result->getInterwikiNamespaceText(), 'title' => $title->getText(), 'url' => $title->getFullUrl());
// Add item to results and see whether it fits
$fit = $apiResult->addValue(array('query', 'interwiki' . $this->getModuleName(), $result->getInterwikiPrefix()), null, $vals);
if (!$fit) {
// We hit the limit. We can't really provide any meaningful
// pagination info so just bail out
break;
}
} else {
$titles[] = $title;
}
$result = $matches->next();
}
}
if ($totalhits !== null) {
$apiResult->addValue(array('query', 'interwikisearchinfo'), 'totalhits', $totalhits);
}
}
if ($resultPageSet === null) {
$apiResult->addIndexedTagName(array('query', $this->getModuleName()), 'p');
if ($hasInterwikiResults) {
$apiResult->addIndexedTagName(array('query', 'interwiki' . $this->getModuleName()), 'p');
}
} else {
$resultPageSet->setRedirectMergePolicy(function ($current, $new) {
if (!isset($current['index']) || $new['index'] < $current['index']) {
$current['index'] = $new['index'];
}
return $current;
});
$resultPageSet->populateFromTitles($titles);
$offset = $params['offset'] + 1;
foreach ($titles as $index => $title) {
$resultPageSet->setGeneratorData($title, array('index' => $index + $offset));
}
}
}