XF2.1 Membermap per MapQuest

Dieses Thema im Forum "Vorschläge für Add-ons" wurde erstellt von McAtze, 9. März 2020.

  1. otto

    otto Bekanntes Mitglied Lizenzinhaber

    XF Version:
    2.2.10 PL1
    XF Instanz:
    Hosting
    PHP-Version:
    8.2.x
    MySQL/MariaDB:
    10.3.x
    Provider/Hoster:
    Strato/Hetzner
    Also ich hab nun von 2 gehört, das sie bis 100 mit ziehen würden, wenn sie das Addon dann für beliebig viele EIGENE Projekte nutzen dürfen.

    Wenn Themehouse günstiger und womöglich besser ist, solls mir nur Recht sein.

    Defakto brauch die die Membermap location field basierend und DSGVO konform möglichst zeitnah. Ein Traum wäre später noch eine Umkreissuche wie sie bei Crispin zu haben war - aber das ist dann schon die Sahne auf der Torte. ;)

    Also - so wie ich das sehe stehen aktuell bis zu 300 €/$ im Topf als private founding von 3 Personen zur Verfügung, wenn noch ein paar wenige mit machen, dann sollte sich ne Membermap doch machen lassen. :)

    Ich kenne den Coder nicht weiter, und mir wäre einer lieber, der nicht so weit weg ist. Also - finden wir ne Lösung?
     
    mph gefällt das.
  2. McAtze

    McAtze Administrator Lizenzinhaber

    XF Version:
    2.2.9
    XF Instanz:
    Hosting
    PHP-Version:
    8.0.x
    Provider/Hoster:
    NetCup
    Die Lösung ist nicht weit weg. Ich würde dies am liebsten als Gemeinschaftsprojekt (innerhalb der EU) lassen. Eventuell dann per Github öffentliche machen.

    Wie gesagt ich benötige nur ein paar Hilfestellungen wie ich am besten die vorhandenen Daten aus dem Location field des Users abrufen kann. Die "Umwandlung" der Adresse per Geocoding und anschließendes speichern in einer zusätzlichen Spalte der Tabelle user als location_data (BLOB) und schon haben wir die lang/long Daten für die Map. Ich kann derzeit nur nicht den Code umsetzen.
     
    mph gefällt das.
  3. mph

    mph Bekanntes Mitglied Lizenzinhaber

    XF Version:
    2.2.10 PL1
    XF Instanz:
    Hosting
    Provider/Hoster:
    1&1 Ionos
    Bisher habe ich mich noch nicht damit beschäftigt, wie ein Addon für XenForo aufgebaut wird, außer für ein kleines Datenbank-Backup-Skript, das ich bei mir bei den zeitgesteuerten Aufgaben eingebaut habe. Aber das ist nicht mit einem kompletten Addon vergleichbar, das für die User ist. Ich glaube, es wird Zeit, das mal anzufangen.

    Ich frage mich gerade, muss man die Adresse wirklich so genau auflösen oder reicht dazu einfach der Ortsname selbst, um etwas in eine Map einzutragen? Die Orte selbst müssten ja in den verschiedenen Map-Systemen bereits eingetragen sein.
     
  4. McAtze

    McAtze Administrator Lizenzinhaber

    XF Version:
    2.2.9
    XF Instanz:
    Hosting
    PHP-Version:
    8.0.x
    Provider/Hoster:
    NetCup
    Das Problem hierbei ist, dass die Maps (egal welche) mit Longitude & Latitude (Längen- & Breitengraden). Man kann per Google Maps die Ortsangaben in die Lat/Long umwandeln und dann asl Array in der Karte anzeigen lassen.
    Das heißt, ich muss erst das Locationfeld in Lat/Long umwandeln und als BLOB in einem extra Feld der Datenbank speichern. Hier würde ich in der User Tabelle direkt nach der location row ein location_data row einfügen. Dort werden dann als BLOB die Lat/Long Daten gespeichert. Nun kann ich dann diese beim Aufruf der Map abrufen und alle Daten als Array anzeigen lassen. Per OptIn wird dann nachgefragt welcher User seine Daten anzeigen lassen will. Theoretisch ganz einfach, praktisch habe ich noch keine Ahnung wie ich das machen soll.
     
  5. McAtze

    McAtze Administrator Lizenzinhaber

    XF Version:
    2.2.9
    XF Instanz:
    Hosting
    PHP-Version:
    8.0.x
    Provider/Hoster:
    NetCup
    Ich habe jetzt mal ein paar Anfragen gestartet bei Entwicklern denen ich persönlich vertraue und warte mal auf Antworten.
    Bei ThemeHouse hatte ich bisher immer gute Erfahrungen und musste letztens erst feststellen das ich dort schon seit 10 Jahren Kunde bin.
     
    otto gefällt das.
  6. otto

    otto Bekanntes Mitglied Lizenzinhaber

    XF Version:
    2.2.10 PL1
    XF Instanz:
    Hosting
    PHP-Version:
    8.2.x
    MySQL/MariaDB:
    10.3.x
    Provider/Hoster:
    Strato/Hetzner
    Ja, wie gesagt - ich würde einer Lösung von hier den Vorzug geben.
    Also, gib Gas - auf geraden Strecken kann man rennen... :D ;)
     
  7. Hoffi

    Hoffi !important Lizenzinhaber

    XF Version:
    2.2.10 PL1
    XF Instanz:
    Hosting
    PHP-Version:
    8.0.8
    MySQL/MariaDB:
    MariaDB 10.3.8
    Provider/Hoster:
    AWS
    Dann frag mal...

    Ich hab ja aktuell die existierende auch nur Semi in Betrieb... das mit dem Profil Feld wie ich esmal gebaut habe gefällt mir auch nicht wirklich.
     
    otto gefällt das.
  8. otto

    otto Bekanntes Mitglied Lizenzinhaber

    XF Version:
    2.2.10 PL1
    XF Instanz:
    Hosting
    PHP-Version:
    8.2.x
    MySQL/MariaDB:
    10.3.x
    Provider/Hoster:
    Strato/Hetzner
    Ich hab mich leider erst seit gestern ernsthaft mit XF 2 beschäftigt, und mangels Zeit wirds wohl auch keine so innige Vertiefung wie bei XF 1 geben als bald.

    Wie hat es denn die MopedMap gemacht? Ich mein man muss ja nicht kopieren, aber mal drauf schauen und draus lernen sollte erlaubt sein. :)
     
  9. McAtze

    McAtze Administrator Lizenzinhaber

    XF Version:
    2.2.9
    XF Instanz:
    Hosting
    PHP-Version:
    8.0.x
    Provider/Hoster:
    NetCup
    Ich habe Codeschnipsel wie ich das Adressfeld per Google Maps Geocoding in Lat/Long bekomme. Ich habe aber keine Ahnung wie das Konstrukt Finder/Repository/Entity etc. funktioniert. Das Prinzip MVC ist mir grob bekannt.

    1. Wie bekomme ich die XF Core Funktionen abgerufen? Wie kann ich die Klassen extenden?
    2. Wie schreibe ich dann die neuen Daten in die DB?
    3. Wie bekomme ich dann die Daten abgerufen und in das Template? Thema: view_params[]

    Ich will aber auch nicht unnötig viel DB Abfragen machen.
     
    otto gefällt das.
  10. McAtze

    McAtze Administrator Lizenzinhaber

    XF Version:
    2.2.9
    XF Instanz:
    Hosting
    PHP-Version:
    8.0.x
    Provider/Hoster:
    NetCup
    Hatte ich auch schon probiert, ist aber ein komplett anderes System.
     
    otto gefällt das.
  11. Hoffi

    Hoffi !important Lizenzinhaber

    XF Version:
    2.2.10 PL1
    XF Instanz:
    Hosting
    PHP-Version:
    8.0.8
    MySQL/MariaDB:
    MariaDB 10.3.8
    Provider/Hoster:
    AWS
    Guter Ansatz. ;)
    Wichtig: Eigene DB Felder in XF Tabellen immer mit einem eigenen Präfix verwenden. Gehört zu den Coding Rules von XF.
    Den ersten Teil verstehe ich nicht.
    Wenn du ein eigenes Feld in einer Tabelle hinzufügst, musst du auch die Entity erweitern. (Doku bei XF.com)
    Location gehört in die Entity UserProfile. Ein Listener sähe dann ungefähr so aus.
    PHP:
    <?php

    namespace McAtze\Map;

    use XF\Mvc\Entity\Entity;

    class Listener
    {
        public static function userProfileEntityStructure(\XF\Mvc\Entity\Manager $em, \XF\Mvc\Entity\Structure &$structure)
        {
            $structure->columns['mca_location_data'] = ['type' => Entity::str, 'default' => null];
        }
    }
    Damit sind die Daten immer im $UserProfile Objekt vorhanden.

    Das ist einfach. Einfach die Entity UserData benutzen. Den Wert setzen und speichern.
    PHP:
    $UserProfile->mca_location_data = "Daten!";
    $UserProfile->save();
    Ganz vereinfach ausgedrückt.

    Das ist noch einfacher in diesem Fall, denn der User hat eine Relation, wenn du den User hast, hast du auch sein Profil.

    Einen User zu einer UserId lädst du recht einfach.

    PHP:
    $user = $this->finder('XF:User')->whereId($userId)->with('Profile')->fetchOne();
    Das with('Profile') sorgt dafür das die Profildaten mitgeladen werden.

    Wenn du alle User mit gefülltem Location Field haben willst, müsste das so gehen (ungetestet)

    PHP:
    $user = $this->finder('XF:User')->with('Profile')->where('mca_location_data','<>',null)->fetch();
    Um die LocationData zu schreiben, würde ich auch das UserProfile Entity erweitern und eine _preSave() Funktion schreiben.

    Klasse erweitern: /admin.php?class-extensions/
    upload_2021-3-14_19-51-1.png
    Nicht von der Überschrift verwirren lassen... hatte nur eben eine eigene Klassenerweiterung aufgemacht.

    PHP:
    <?php

    namespace McAtze\Map\XF\Entity;

    class UserProfile extends XFCP_UserProfile
    {
        protected function _preSave()
        {
          $this->location  // Enthält den Wert von Location
          $this->mca_location_data // Das ist dein Feld
         }
    }
    Wenn noch Fragen offen sind, frag. Ich kann da auch gerne ein wenig Code beisteuern wenn du nicht weiterkommst.
     
    McAtze und otto gefällt das.
  12. otto

    otto Bekanntes Mitglied Lizenzinhaber

    XF Version:
    2.2.10 PL1
    XF Instanz:
    Hosting
    PHP-Version:
    8.2.x
    MySQL/MariaDB:
    10.3.x
    Provider/Hoster:
    Strato/Hetzner
    Ich wollt es schon vorschlagen - macht das doch als gemeinsames Projekt.

    OK, ich bin befangen, ich gebs zu... :D ;)
     
  13. mph

    mph Bekanntes Mitglied Lizenzinhaber

    XF Version:
    2.2.10 PL1
    XF Instanz:
    Hosting
    Provider/Hoster:
    1&1 Ionos
    McAtze hat doch ein Testforum. Da kann man sich im Zweifelsfall mit mehreren Leuten austoben.
     
  14. otto

    otto Bekanntes Mitglied Lizenzinhaber

    XF Version:
    2.2.10 PL1
    XF Instanz:
    Hosting
    PHP-Version:
    8.2.x
    MySQL/MariaDB:
    10.3.x
    Provider/Hoster:
    Strato/Hetzner
    Zur Info - die 500$ beziehen sich auf eine private founding Lösung, sprich die landet später nicht im Verkauf.
    Hatte eben mit ihm noch mal Kontakt per WhatsApp...
     
  15. McAtze

    McAtze Administrator Lizenzinhaber

    XF Version:
    2.2.9
    XF Instanz:
    Hosting
    PHP-Version:
    8.0.x
    Provider/Hoster:
    NetCup
    Wenn ich das AddOn hinbekommen sollte, wird dies auf GitHub veröffentlicht und bleibt kostenfrei.
    Wer sich erkenntlich zeigen möchte kann dies aber gerne tun.
     
    Hoib3rgA, Hoffi und otto gefällt das.
  16. otto

    otto Bekanntes Mitglied Lizenzinhaber

    XF Version:
    2.2.10 PL1
    XF Instanz:
    Hosting
    PHP-Version:
    8.2.x
    MySQL/MariaDB:
    10.3.x
    Provider/Hoster:
    Strato/Hetzner
    Ok, dann solltest du nicht - sondern wirst es hinbekommen (müssen) :D ;)

    Die Frage wegen privat founding oder nicht kam ja auf, daher nur noch die Antwort heute wo ich sie hatte. Ist nicht böse gemeint. :)
     
  17. McAtze

    McAtze Administrator Lizenzinhaber

    XF Version:
    2.2.9
    XF Instanz:
    Hosting
    PHP-Version:
    8.0.x
    Provider/Hoster:
    NetCup
    Grossen Dank an @Hoffi wir kommen dem Ziel näher... :smoke:

    Bildschirmfoto 2021-03-16 um 20.54.13.png
     
    otto, Hoffi, mph und einer weiteren Person gefällt das.
  18. Hoffi

    Hoffi !important Lizenzinhaber

    XF Version:
    2.2.10 PL1
    XF Instanz:
    Hosting
    PHP-Version:
    8.0.8
    MySQL/MariaDB:
    MariaDB 10.3.8
    Provider/Hoster:
    AWS
    Gerne. Ist ja auch Eigennutz. :)
     
  19. otto

    otto Bekanntes Mitglied Lizenzinhaber

    XF Version:
    2.2.10 PL1
    XF Instanz:
    Hosting
    PHP-Version:
    8.2.x
    MySQL/MariaDB:
    10.3.x
    Provider/Hoster:
    Strato/Hetzner
    Na dat läuft doch... :D

    Luxusfrage - wird man die Marker Icons austauschen können? :D ;)
     
  20. McAtze

    McAtze Administrator Lizenzinhaber

    XF Version:
    2.2.9
    XF Instanz:
    Hosting
    PHP-Version:
    8.0.x
    Provider/Hoster:
    NetCup
    Maybe.. :D
     
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden