XF2.1 Membermap per MapQuest

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?
 
  • Like
Reaktionen: mph
Also - finden wir ne Lösung?
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.
 
  • Like
Reaktionen: mph
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.
 
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?
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.
 
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.
 
Ja, wie gesagt - ich würde einer Lösung von hier den Vorzug geben.
Also, gib Gas - auf geraden Strecken kann man rennen... :D ;)
 
Wenn mir einer der erfahrenen Coder (@Hoffi oder

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.
 
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. :)
 
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.
 
Ich mein man muss ja nicht kopieren, aber mal drauf schauen und draus lernen sollte erlaubt sein. :)
Hatte ich auch schon probiert, ist aber ein komplett anderes System.
 
Ich will aber auch nicht unnötig viel DB Abfragen machen.
Guter Ansatz. ;)
Wichtig: Eigene DB Felder in XF Tabellen immer mit einem eigenen Präfix verwenden. Gehört zu den Coding Rules von XF.
1. Wie bekomme ich die XF Core Funktionen abgerufen? Wie kann ich die Klassen extenden?
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.

2. Wie schreibe ich dann die neuen Daten in die DB?

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.

3. Wie bekomme ich dann die Daten abgerufen und in das Template? Thema: view_params[]

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.
 
Ich kann da auch gerne ein wenig Code beisteuern wenn du nicht weiterkommst.
Ich wollt es schon vorschlagen - macht das doch als gemeinsames Projekt.

OK, ich bin befangen, ich gebs zu... :D ;)
 
McAtze hat doch ein Testforum. Da kann man sich im Zweifelsfall mit mehreren Leuten austoben.
 
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...
 
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.
 
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. :)
 
Grossen Dank an @Hoffi wir kommen dem Ziel näher... :smoke:

Bildschirmfoto 2021-03-16 um 20.54.13.png
 
Na dat läuft doch... :D

Luxusfrage - wird man die Marker Icons austauschen können? :D ;)
 
Maybe.. :D
 
Zurück
Oben