bundles/dieschittigs/iconic/src/Resources/contao/elements/ContentIconicDirectory.php line 14

Open in your IDE?
  1. <?php
  2. namespace Contao;
  3. use DieSchittigs\IconicWorld\Controller\IconicApiController;
  4. use Symfony\Component\HttpFoundation\Request;
  5. class ContentIconicDirectory extends PrerenderableContentElement
  6. {
  7. protected $strTemplate = 'ce_iconic_directory';
  8. protected $templateMarkerName = 'iconic_directory_';
  9. public function compile()
  10. {
  11. if (TL_MODE == 'BE')
  12. {
  13. $this->strTemplate = 'be_wildcard';
  14. $this->Template = new \BackendTemplate($this->strTemplate);
  15. $this->Template->title = 'Iconic World: Directory';
  16. return;
  17. }
  18. $this->setupTemplate();
  19. // Pre-populate some data
  20. $controller = System::getContainer()->get(IconicApiController::class);
  21. $request = Request::create('/api/directory');
  22. if ($this->isCrawler()) {
  23. $request->request->set('take', PHP_INT_MAX);
  24. }
  25. $locale = $GLOBALS['TL_LANGUAGE'];
  26. $request->request->set('locale', $locale);
  27. $this->Template->categoryToUrl = function ($a) {
  28. $a = strtolower($a);
  29. $a = preg_replace('/ä/', 'ae', $a);
  30. $a = preg_replace('/ö/', 'oe', $a);
  31. $a = preg_replace('/ü/', 'ue', $a);
  32. $a = preg_replace('/ß/', 'ss', $a);
  33. $a = preg_replace('/,/', '', $a);
  34. $a = preg_replace('/ /', '-', $a);
  35. return $a;
  36. };
  37. $request = System::getContainer()->get('request_stack')->getCurrentRequest();
  38. $filters = explode('/', $request->get('filters') ?? '');
  39. $alias = null;
  40. foreach ($filters as $filter) {
  41. $list = explode('-', $filter);
  42. if ($list[0] === 'category') {
  43. $alias = $this->Template->categoryToUrl($list[1]);
  44. break;
  45. }
  46. }
  47. $lang = $GLOBALS['TL_LANGUAGE'];
  48. if ($alias) {
  49. foreach (DirectoryCategoryModel::findAll() as $category) {
  50. if ($this->Template->categoryToUrl($category->$locale) == $alias) {
  51. $this->Template->filteredCategory = $category;
  52. }
  53. }
  54. }
  55. $this->Template->language = $locale;
  56. $this->Template->filters = $controller->filters();
  57. $request->request->set('locale', $lang);
  58. $unpaginatedEntries = $controller->getDirectoryEntries($request);
  59. $this->Template->entries = $controller->paginated($request, $unpaginatedEntries);
  60. }
  61. }