Ankündigung

Einklappen
Keine Ankündigung bisher.

Ergebnisse der Umkreissuche sortieren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Ergebnisse der Umkreissuche sortieren

    Hallo liebste Freunde der gepflegten Datensätze,

    Kunde hätte gerne, dass die Ergebnisliste einer Umkreissuche sinnvollerweise auch so sortiert ist, dass der Treffer mit der geringsten Distanz zu den gesuchten Koordinaten ganz oben steht. Soweit ich das im Forum jetzt rausfinden konnte, existiert seit CC 2.13.0 dafür die findDistanceByCoords Methode.

    Wie genau arbeitet man denn damit?

  • #2
    So haben wir es gelöst:

    PHP-Code:
    <?php
    $arrOptions
    ['apikey'] = 'apiXXX';
    $boolUseCache true// Cache für Google API Requests nutzen

    $standort sprintf('%s Deutschland', \Input::get('umkreissuche_address'));
    if(!empty(
    $standort)):
    $result = [];

    foreach(
    $this->entries as $entry):
    // Geo Berechnung
    $objGeoAttr = new \PCT\CustomElements\Attributes\Geolocation();

    $zip $entry->field('address_zipcode')->value();
    $city $entry->field('address_city')->value();

    if(!empty(
    $zip) && !empty($city)):
    $objectaddress sprintf('%s %s Deutschland'$zip$city);
    $objDistBetween $objGeoAttr->findDistance($standort$objectaddress$arrOptions$boolUseCache);
    if(!
    $objDistBetween->hasError):
    $distance $objDistBetween->distance['value'];
    if(!empty(
    $distance)):
    $result[$distance] = $entry;
    endif;
    endif;
    endif;
    endforeach;

    // Aufsteigende Sortierung des neuen Arrays
    if(count($result) > 0):
    ksort($result);
    $this->entries $result;
    endif;
    endif; 
    ?>

    Kommentar


    • #3
      Standardmäßig ist das Rückgabeergebnis der Umkreissuche die gefundenen IDs aufsteigend sortiert (keine Standardsortierung angeben!). Die kann man abgreifen und damit eine neue CC Instanz für die Liste sortieren lassen (auch geflippt (reverse)).

      SQL order by FIELD erlaubt das.

      mod_customcatalog (ab 4.3.8)

      Code:
      <?php
      // aktuelle Ids holen
      $arrIds = $this->CustomCatalog->prepare()->fetchEach('id');
      // neue CC Instanz aus Modul erstellen
      $objCC = \Contao\CustomCatalog::findByModule($this);
      // ASC, DESC
      #$arrIds = array_reverse($arrIds);
      // nach ID Feld sortieren:
      $objCC->addSorting('FIELD(id,'.implode(',',$arrIds).')' );
      ?>
      <?= $objCC->render(); ?>
      Zuletzt geändert von Tim; 11.10.2021, 13:02.
      http://www.premium-contao-themes.com

      Kommentar

      Lädt...
      X