Seite 1 von 1

Multi Objekt Suche

Verfasst: Mi 4. Sep 2019, 10:40
von christobal
Grüß Euch webEditioneers!

Steh wieder an! Und zwar hab ich eine Team-Klasse mit einem Multi Objekt Feld "Rechtsgebiete".
Den Team-Mitgliedern (Rechtsanwälte) werden Rechtsgebiete zugeordnet.
Jetzt will ich nach Team-Mitgliedern mit einem bestimmten Rechtsgebiet suchen.

Im Such-Formular generier ich mir aus den Rechtsgebiete-Objekten eine select und das Ganze schaut dann so aus:

Code: Alles auswählen

<we:form name="suchformular" type="object" id="self" class="form-horizontal">

<we:listview name="rechtsgebiete_listview" type="object" classid="16" order="Rechtstitel" desc="false">
<select name="rechtsgebieteselect" id="rechtsgebieteselect">
<option value="%">Auswahl</option>
<we:repeat><option value="<we:field type="text" name="Rechtstitel" />"><we:field type="text" name="Rechtstitel" /></option></we:repeat>
</select>
</we:listview>

<input type="submit" name="Submit" value="suchen" />

</we:form>
Condition:

Code: Alles auswählen

<we:setVar from="request" to="global" namefrom="rechtsgebieteselect" nameto="rechtsgebieteselect" />

<we:condition name="condition">
<we:conditionAdd field="Rechtstitel" var="rechtsgebieteselect" compare="like"/>
</we:condition> 
Auflistung:

Code: Alles auswählen

<we:listview type="object" name="team_listview" order="Nachname" classid="3" condition="\$condition" >
<we:repeat><we:field name="Nachname" /></we:repeat>
</we:listview>
Geht das gar nicht?
Oder hab ich einen Denkfehler?

Wäre um jegliche Hilfe sehr dankbar!
Christoph

Re: Multi Objekt Suche

Verfasst: Mi 4. Sep 2019, 11:59
von mokraemer
also du brauchst in deinem Select auf jeden Fall mal die ID des Objektes als Wert. Der Name hilft dir nicht weiter.
<we:condition> kann noch nicht mit Multi-Objekten umgehen - da fehlt vermutlich ein FR.
Die Like-Abfrage liefert auf keinen Fall das richtige Ergebnis, du muß eine FIND_IN_SET(wert,feld) als Condition setzen - darauf achten, das wert unbedingt ein int ist:

Code: Alles auswählen

<we:setVar from="request" to="global" namefrom="rechtsgebieteselect" nameto="rechtsgebieteselect" varType="int"/>
Für alle String-Felder unbedingt prepareSQL="true" setzen, sonst baust du hier eine tolle SQL-Injection!

Re: Multi Objekt Suche

Verfasst: Mo 9. Sep 2019, 15:35
von christobal
Danke Mokramer für Deinen Hinweis!! Ganz schaff ichs aber noch nicht!

Das Formular mit der select schaut jetzt so aus:

Code: Alles auswählen

<we:form name="suchformular" type="object" id="self" class="form-horizontal">
<we:listview name="rechtsgebiete_listview" type="object" classid="16" order="Rechtstitel" desc="false">
<select name="rechtsgebieteselect" id="rechtsgebieteselect">
<option value="%">Auswahl</option>
<we:repeat><option value="<we:field type="text" name="we_id" />"><we:field type="text" name="Rechtstitel" /></option></we:repeat>
</select>
</we:listview>
<input type="submit" name="Submit" value="suchen" />
</we:form>
Die Variable schaut jetzt so aus:

Code: Alles auswählen

<we:setVar from="request" to="global" namefrom="rechtsgebieteselect" nameto="rechtsgebieteselect" varType="int" prepareSQL="true" />
aber wie ich jetzt die Condition baue, ist mir ein Rätsel!
Kannst Du mir da bitte unter die Arme greifen?!

Code: Alles auswählen

<we:condition name="condition">
<we:conditionAdd field="Rechtstitel" var="rechtsgebieteselect" compare="like"/>
</we:condition> 
Großes Danke aus dem Süden, Christoph

Re: Multi Objekt Suche

Verfasst: Do 12. Sep 2019, 11:56
von mokraemer
Sorry, hatte keine Zeit zu antworten. Also, ich hoffe die Anzahl Objekte in der Klasse 16 ist kurz, denn bei der Suche muß die DB alle Felder durchgehen. Da es aktuell noch keine Funktion in <we:condition> für diese Suche gibt, muß man es leider von Hand machen (FR?):

Code: Alles auswählen

<we:setVar from="request" to="global" namefrom="rechtsgebieteselect" nameto="rechtsgebieteselect" varType="int" prepareSQL="true" />
<?php
if($GLOBALS['rechtsgebieteselect']){
	$GLOBALS['condition']='FIND_IN_SET('.((int)$GLOBALS['rechtsgebieteselect']).',multiobject_Rechtstitel)';
}else{
	//keine Suche, wenn keine Auswahl
	$GLOBALS['condition']='FALSE';
}
Ich hab es jetzt nicht ausprobiert, könnte sein das man den Zusatz "multiobject_" weglassen kann/muß.

Re: Multi Objekt Suche

Verfasst: Mo 16. Sep 2019, 12:37
von christobal
Danke Dir mokramer! Das funzt super!

Ein kleines Problem hab ich noch: Kannst Du mir bitte noch sagen, wie ich das mit der vorhandenen Condition kombinieren kann?

Code: Alles auswählen

<we:condition name="condition">
<we:conditionAdd field="Nachname" var="nachnameselect" compare="like"/>
<we:conditionAnd />
<we:conditionAdd field="Kanzlei" var="kanzleiselect" compare="like"/>
<we:conditionAnd />
<we:conditionAdd field="Ort" var="ortselect" compare="like"/>
<we:conditionAnd />
<we:conditionAdd field="Nation" var="nationselect" compare="like"/>
<we:conditionAnd />
<?php
if($GLOBALS['rechtsgebieteselect']){
	$GLOBALS['condition']='FIND_IN_SET('.((int)$GLOBALS['rechtsgebieteselect']).',multiobject_Rechtsgebietewahl)';
}else{
	//keine Suche, wenn keine Auswahl
	$GLOBALS['condition']='FALSE';
}
?>
</we:condition> 
Liebe Grüße aus dem sonnigen Tirol!

Re: Multi Objekt Suche

Verfasst: Mo 23. Sep 2019, 14:55
von christobal
Darf ich das Thema nochmals anstubsen?!

Könnt Ihr mir bitte noch sagen, wie ich das mit einer vorhandenen webEdition-Condition kombinieren kann?

Re: Multi Objekt Suche

Verfasst: Mo 23. Sep 2019, 15:40
von WBTMagnum
Hallo Christoph,

So sollte es eigentlich klappen:

Code: Alles auswählen

<we:condition name="condition">
<we:conditionAdd field="Nachname" var="nachnameselect" compare="like"/>
<we:conditionAnd />
<we:conditionAdd field="Kanzlei" var="kanzleiselect" compare="like"/>
<we:conditionAnd />
<we:conditionAdd field="Ort" var="ortselect" compare="like"/>
<we:conditionAnd />
<we:conditionAdd field="Nation" var="nationselect" compare="like"/>
<?php
if($GLOBALS['rechtsgebieteselect']){
	$GLOBALS['condition'] .= ' AND FIND_IN_SET('.((int)$GLOBALS['rechtsgebieteselect']).',multiobject_Rechtsgebietewahl) ';
}
?>
</we:condition> 

HTH,
Sascha

Re: Multi Objekt Suche

Verfasst: Mo 23. Sep 2019, 17:17
von christobal
Klappt perfekt! Wow! Danke Sascha!

Ich hab ja eine Klasse Rechtsanwälte denen per Multi Objekt Rechtsgebiete aus der Klasse Rechtsgebiete zugeordnet werden. Wenn ich auf der Rechtsgebiete-Detailseite bin, kann ich da mit diesem PHP-Code auflisten lassen, welche Rechtsanwälte dieses Leistung erbringen?

Das wäre noch der Hit!
Christoph

Re: Multi Objekt Suche

Verfasst: Mo 23. Sep 2019, 20:57
von WBTMagnum
Hallo Christoph,

Klar. Anstatt dem "$GLOBALS['rechtsgebieteselect']" einfach die ID des aktuell angezeigten Rechtsgebiets verwenden.


HTH,
Sascha

Re: Multi Objekt Suche

Verfasst: Di 24. Sep 2019, 14:51
von christobal
Ah, ooh, daaaanke!!
Klapt supergut

Code: Alles auswählen

<?php $condition ="FIND_IN_SET(" . $GLOBALS['we_doc']->OF_ID .", multiobject_Rechtsgebietewahl)"; ?>
<we:listview type="object" name="team_listview" order="Nachname" classid="3" condition="\$condition" >
<we:repeat>...</we:repeat></we:listview>
Noch einen schönen Tag!!

Re: Multi Objekt Suche

Verfasst: Fr 4. Okt 2019, 11:04
von christobal
Hoi aus Tirol,

jetzt hab ich noch eine Frage:

Ich hab auf dieser Website einen Internen Bereich, wo die "Kunden" ihre Daten verwalten können. Klappt soweit alles gut! Nur für die Multi Objekte, die eigtl. sehr praktisch sind, gibt es leider keinen <we:userInput ...>.

Gibt es da evtl. einen Workaround mit PHP?
Evtl. mit Checkboxes?

Ich arbeite mit wE 8.1, bei den Multi Objekten wird auf eine Klasse mit 142 Objekten zugegriffen...

Grüße aus Tirol mit sportl. 7°C
Christoph

Re: Multi Objekt Suche

Verfasst: Mi 9. Okt 2019, 15:09
von christobal
Darf ich meinen Beitrag anstubsen?
Vielleicht hat wer eine Idee?

Re: Multi Objekt Suche

Verfasst: Mi 9. Okt 2019, 22:31
von WBTMagnum
Hallo Christoph,

Dafür gibt es denke ich keine fertige Lösung. Kannst man über Checkboxen und einen entsprechenden Hook aber sicherlich bauen.

Liebe Grüße,
Sascha