facetapi.tokens.inc 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. <?php
  2. /**
  3. * @file
  4. * Builds placeholder replacement tokens for searches.
  5. */
  6. /**
  7. * Implements hook_token_info().
  8. */
  9. function facetapi_token_info() {
  10. $types = $results = $active = $facet = array();
  11. // The types of tokens.
  12. $types['facetapi_results'] = array(
  13. 'name' => t('Search results'),
  14. 'description' => t('Tokens related to the search query and response.'),
  15. 'needs-data' => 'facetapi_adapter',
  16. );
  17. $types['facetapi_active'] = array(
  18. 'name' => t('Active facet items'),
  19. 'description' => t('Tokens related to active facet items.'),
  20. 'needs-data' => 'facetapi_active_item',
  21. );
  22. $types['facetapi_facet'] = array(
  23. 'name' => t('Facet field'),
  24. 'description' => t('Tokens related to a facet field.'),
  25. 'needs-data' => 'facetapi_facet',
  26. );
  27. // Tokens related to search results and response.
  28. $results['keys'] = array(
  29. 'name' => t('Search keywords'),
  30. 'description' => t('The search keywords entered by the user.'),
  31. );
  32. $results['page-number'] = array(
  33. 'name' => t('Page number'),
  34. 'description' => t('The page number of the result set.'),
  35. );
  36. $results['page-limit'] = array(
  37. 'name' => t('Page limit'),
  38. 'description' => t('The number of results displayed per page.'),
  39. );
  40. $results['page-total'] = array(
  41. 'name' => t('Page total'),
  42. 'description' => t('The total number of pages in the result set.'),
  43. );
  44. $results['offset'] = array(
  45. 'name' => t('Offset'),
  46. 'description' => t('The zero-based offset of the first element on the search page.'),
  47. );
  48. $results['start-count'] = array(
  49. 'name' => t('Start count'),
  50. 'description' => t('The number of the first item on the page.'),
  51. );
  52. $results['end-count'] = array(
  53. 'name' => t('End count'),
  54. 'description' => t('The number of the last item on the page.'),
  55. );
  56. $results['result-count'] = array(
  57. 'name' => t('Result count'),
  58. 'description' => t('The total number of results matched by the search query.'),
  59. );
  60. $results['search-path'] = array(
  61. 'name' => t('Search path'),
  62. 'description' => t('Path to the current page without any filter'),
  63. );
  64. // Tokens related to active facet items.
  65. $active['active-value'] = array(
  66. 'name' => t('Mapped value'),
  67. 'description' => t('The mapped value of the active item.'),
  68. );
  69. $active['active-value-raw'] = array(
  70. 'name' => t('Raw value'),
  71. 'description' => t('The raw value of the active item as stored in the index.'),
  72. );
  73. $active['active-pos'] = array(
  74. 'name' => t('Position'),
  75. 'description' => t('The zero-based position of the active item.'),
  76. );
  77. $active['facet-label'] = array(
  78. 'name' => t('Facet label'),
  79. 'description' => t('The human readable label of the active item\'s facet.'),
  80. );
  81. $active['facet-name'] = array(
  82. 'name' => t('Facet name'),
  83. 'description' => t('The machine readable name of the active item\'s facet.'),
  84. );
  85. // Tokens related to a facet.
  86. $facet['facet-label'] = array(
  87. 'name' => t('Facet label'),
  88. 'description' => t('The human readable label of the active item\'s facet.'),
  89. );
  90. $facet['facet-name'] = array(
  91. 'name' => t('Facet name'),
  92. 'description' => t('The machine readable name of the active item\'s facet.'),
  93. );
  94. return array(
  95. 'types' => $types,
  96. 'tokens' => array(
  97. 'facetapi_results' => $results,
  98. 'facetapi_active' => $active,
  99. 'facetapi_facet' => $facet,
  100. ),
  101. );
  102. }
  103. /**
  104. * Implements hook_tokens().
  105. */
  106. function facetapi_tokens($type, $tokens, array $data = array(), array $options = array()) {
  107. $replacements = array();
  108. if ('facetapi_results' == $type && !empty($data['facetapi_results']['facetapi_adapter'])) {
  109. $adapter = $data['facetapi_results']['facetapi_adapter'];
  110. foreach ($tokens as $name => $original) {
  111. switch ($name) {
  112. case 'keys':
  113. $replacements[$original] = check_plain($adapter->getSearchKeys());
  114. break;
  115. case 'result-count':
  116. $replacements[$original] = (int) $adapter->getResultCount();
  117. break;
  118. case 'page-number':
  119. $replacements[$original] = (int) $adapter->getPageNumber();
  120. break;
  121. case 'page-limit':
  122. $replacements[$original] = (int) $adapter->getPageLimit();
  123. break;
  124. case 'page-total':
  125. $replacements[$original] = (int) $adapter->getPageTotal();
  126. break;
  127. case 'offset':
  128. $offset = ($adapter->getPageNumber() - 1) * $adapter->getPageLimit();
  129. $replacements[$original] = $offset;
  130. break;
  131. case 'start-count':
  132. $offset = (($adapter->getPageNumber() - 1) * $adapter->getPageLimit()) + 1;
  133. $total_max = (int) $adapter->getResultCount();
  134. $replacements[$original] = min($offset, $total_max);
  135. break;
  136. case 'end-count':
  137. $page_max = $adapter->getPageNumber() * $adapter->getPageLimit();
  138. $total_max = (int) $adapter->getResultCount();
  139. $replacements[$original] = min($page_max, $total_max);
  140. break;
  141. case 'search-path':
  142. $replacements[$original] = $adapter->getSearchPath();
  143. break;
  144. }
  145. }
  146. }
  147. elseif ('facetapi_active' == $type && !empty($data['facetapi_active_item'])) {
  148. $item = $data['facetapi_active_item'];
  149. $adapter = $item['adapter'];
  150. foreach ($tokens as $name => $original) {
  151. switch ($name) {
  152. case 'active-value':
  153. $markup = $adapter->getMappedValue($item['facets'][0], $item['value']);
  154. $text = empty($markup['#html']) ? check_plain($markup['#markup']) : $markup['#markup'];
  155. $replacements[$original] = $text;
  156. break;
  157. case 'active-value-raw':
  158. $replacements[$original] = check_plain($item['value']);
  159. break;
  160. case 'active-pos':
  161. $replacements[$original] = $item['pos'];
  162. break;
  163. case 'facet-label':
  164. if ($facet = facetapi_facet_load($item['facets'][0], $adapter->getSearcher())) {
  165. $replacements[$original] = check_plain($facet['label']);
  166. }
  167. break;
  168. case 'facet-name':
  169. $replacements[$original] = check_plain($item['facets'][0]);
  170. break;
  171. }
  172. }
  173. }
  174. elseif ('facetapi_facet' == $type && !empty($data['facetapi_facet'])) {
  175. $facet = $data['facetapi_facet'];
  176. foreach ($tokens as $name => $original) {
  177. switch ($name) {
  178. case 'facet-label':
  179. $replacements[$original] = check_plain($facet['label']);
  180. break;
  181. case 'facet-name':
  182. $replacements[$original] = check_plain($facet['name']);
  183. break;
  184. }
  185. }
  186. }
  187. return $replacements;
  188. }