Seite 1 von 1

Innerhalb von webEdition einen "Objekt editieren"-Link erstellen

Verfasst: Mo 27. Mai 2019, 14:38
von Revilo
Guten Tag we-Experten,
ich möchte per Listview eine Liste mit Objekten im Backend ausgeben.
Der Redakteur gelangt dann durch einen einfachen Klick zum "Bearbeiten"-Fenster des jeweiligen Objekts innerhalb von webEdition.

Das ganze erreiche ich durch folgenden Link:

Code: Alles auswählen

<a href="javascript:WE().layout.weEditorFrameController.openDocument(WE().consts.tables.FILES_TABLE,<we:field type="text" name="we_id" />,WE().consts.contentTypes.FILE);"><we:field type="text" name="we_path" /></a>
Nun funktioniert das ganze aber leider nur im "Bearbeiten"-Fenster des Listview-Dokuments.
Ich hätte es aber gerne im "Vorschau"-Fenster, jedoch wird das Javascript dort nicht verarbeitet, wodurch der Link nicht mehr funktioniert.

Hat jemand eine Lösungsidee dazu?

Mit freundlichen Grüßen
Oliver

Re: Innerhalb von webEdition einen "Objekt editieren"-Link erstellen

Verfasst: Mo 27. Mai 2019, 16:18
von Finn
Verstehe ich das richtig, dass du im Prinzip Objekte über Frontend-Editing Redaktionell pflegbar machen möchtest?

Ich habe so etwas mal für die Pflege einer Preisliste gemacht.

Wichtig, es braucht einen Kundenlogin. Über ein Listview gebe ich die Objekte in einer Tabelle aus, da gibt es einen Button zum bearbeiten.
Dieser öffnet ein iFrame in einer Fancybox, dort können die Änderungen gemacht werden.

Hier der Listview:

Code: Alles auswählen

<we:listview type="object" name="objekt-pflege" workspaceID="5" classid="2" order="we_filename">
	<div class="padding-top">
		<table style="padding-left: 30px;">
			<thead>
				<th>Obst</th>
				<th>Name</th>
				<th>Bild</th>
				<th>Preis</th>
				<th>Gebinde</th>
				<th>Verfügbar</th>
				<th>Bearbeiten</th>
			</thead>
			<tbody>
				<we:repeat>
					<we:field type="text" name="we_category" to="global" nameto="var_cat" />
					<we:field nameto="var_verfuegbarkeit" to="global" type="checkbox" name="Verfuegbarkeit" />
					<tr>
						<td><we:category  id="$var_cat"/></td>
						<td><we:field type="text" name="Title" /> <we:field type="text" name="Sorte" /></td>
						<td><we:field type="img" name="Bild" thumbnailid="5" /></td>
						<td>
							<we:ifField type="checkbox" name="custom_preis" match="1">
								<we:field name="custom_preis_value" type="text" />
								<we:else />
								<we:listview type="multiobject" name="preis">
									<we:repeat>
										<we:field type="text" name="preis_1kg" />
									</we:repeat>
								</we:listview>
							</we:ifField>
						</td>
						<td>
							<we:ifField type="checkbox" name="custom_preis" match="1">
								<we:field name="Gebinde" type="text" />
								<we:else />
								Basispreis für 1kg
							</we:ifField>
						</td>
						<td><we:ifVar name="var_verfuegbarkeit" match="1" type="global"> <span style="color: red;">Nicht Verfügbar</span> <we:else /> <span style="color: green;">Verfügbar</span> </we:ifVar></td>
						<td><a class="fancybox" data-fancybox data-type="iframe" data-src="/pflege/objekt_edit.php?we_editObject_ID=<we:field type="int" name="we_id" />" href="javascript:;">
							Bearbeiten 
							</a></td>  
					</tr>
				</we:repeat>
			</tbody>
		</table>
	</div>
</we:listview>



<we:comment>Reload der Seite nach Schließen des Iframes</we:comment>
<script type="text/javascript">
	$(document).ready(function() {
		$(".fancybox").fancybox({
			afterClose  : function() { 
				window.location.reload();
			}
		});
	});
</script>
Hier das geladene iFrame, was die Objektänderung möglich macht:

Code: Alles auswählen

<we:write formname="obst-edit" type="object" publish="true" classid="2" forceedit="true" onduplicate="overwrite" onpredefinedname="overwrite" parentid="5" />

<we:ifWritten type="object" formname="obst-edit">

	<we:var type="post" name="we_editObject_ID" to="global" nameto="var_id" />
	<we:var type="post" name="preis" to="global" nameto="preis_id" />

	<?php
	$obj = new we_objectFile();
	$obj->initById($var_id);
	$obj->setElement('preis', $preis_id);
	$obj->we_save();
	$obj->we_publish();
	?>

	<we:comment>Nach erfolgreichem Schreiben wird das iFrame geschlossen</we:comment>
	<script>
		parent.$.fancybox.close();
	</script>

</we:ifWritten>

<we:comment>ID der Kategorie laden</we:comment>
<we:var type="get" name="we_editObject_ID" nameto="var_id" to="global" />

<div class="ym-wrapper" style="padding: 30px 0px;">

	<we:comment>Objektfelder laden</we:comment>
	<we:object classid="2" id="$var_id" >
		<we:field nameto="var_verfuegbarkeit" to="global" type="checkbox" name="Verfuegbarkeit" />
		<we:listview type="multiobject" name="preis">
			<we:repeat>
				<we:field type="text" name="we_id" to="global" nameto="var_preis" />
			</we:repeat>
		</we:listview>

		<we:comment>Obstname anzeigen</we:comment>
		<b><we:field type="text" name="Sorte" /></b>
		<br><br>
	</we:object>

	<we:form type="object" classid="2" name="obst-edit" nameid="obst-edit" method="post" id="self">
		<table>
			<we:object id="$var_id" classid="2">
				<we:ifField type="checkbox" name="custom_preis" match="1">
					<tr>
						<td>
							Preis:
						</td>
						<td>
							<we:userInput type="textinput" name="custom_preis_value" editable="true" />
						</td>
					</tr>
					<tr>
						<td>
							Preis:
						</td>
						<td>
							<we:userInput type="textinput" name="Gebinde" editable="true" />
						</td>
					</tr>
					<we:else />
					<tr>
						<td>
							Preis für 1kg: 
						</td>
						<td>
							<select name="preis">
								<we:listview type="object" classid="5" order="preis_1kg">
									<we:repeat>
										<we:ifField type="text" name="we_id" match="\$var_preis">
											<option selected value="<we:field type="text" name="we_id" />"><we:field name="preis_1kg" type="text" /></option>
											<we:else />
											<option value="<we:field type="text" name="we_id" />"><we:field name="preis_1kg" type="text" /></option>
										</we:ifField>
									</we:repeat>
								</we:listview>
							</select> 
						</td>
					</tr>

				</we:ifField>
				<tr>
					<td>
						NICHT Verfügbar:
					</td>
					<td>
						<we:userInput type="checkbox" name="Verfuegbarkeit" editable="true" />
					</td>
				</tr>
			</we:object>
		</table>
		<br>
		<br>
		<input type="submit" value="Speichern" /> | <input type="button" class="formbutton" value="Abbrechen" onClick="window.parent.jQuery.fancybox.close();" />
	</we:form>

</div>
Vielleicht hilft es weiter, wenn du Fragen hast oder mehr Details brauchst, gerne Fragen.

Gruß
Finn

Re: Innerhalb von webEdition einen "Objekt editieren"-Link erstellen

Verfasst: Mi 29. Mai 2019, 08:19
von Revilo
Hallo Finn,
leider ist das nicht die Lösung nach der ich gesucht habe.
Das ist trotzdem eine interessante Methode und danke für Deine Antwort!

Mit freundlichen Grüßen
Oliver

Re: Innerhalb von webEdition einen "Objekt editieren"-Link erstellen

Verfasst: Mi 29. Mai 2019, 10:14
von Finn
Moin Oliver,

das Problem, ist ja folgendes. Das Vorschau Fenster Simuliert das Frontend, heißt: Backend Funktionen funktionieren in der Vorschau nicht.

Die Lösung die ich oben Skizziert habe, funktioniert auch im Backend.

Du möchtest ja direkt in das Objekt springen, dass wird soweit ich weiß nicht aus dem Vorschau Fenster funktionieren.

Vielleicht ja mit der kommenden API? Wer weiß :) Bis dahin wirst du, wenn über das "Frontend" editieren möchtest, nicht um eine Lösung ähnlich meiner vorgeschlagenen drum herum kommen. Da gibts ja ein paar Möglichkeiten, ob in einem iFrame in einer Fancybox oder direkt in der Seite oder über die PHP Funktion (http://documentation.webedition.org/wik ... t-with-php).

Vielleicht hilft dir das irgendwie weiter :)

Gruß
Finn

Re: Innerhalb von webEdition einen "Objekt editieren"-Link erstellen

Verfasst: Fr 26. Mär 2021, 14:48
von sman
Hallo,

bei mir geht nicht mal das Editieren eines Objektes innerhalb von webEdition - das wäre nämlich genau das, was ich brauchen würde.

Code: Alles auswählen

<we:listview type="object" name="Testobjekt" classid="2">
  <we:ifFound>
    <we:repeat>
     <we:field name="WE_ID" to="global" nameto="id" />
     <?php $id = $GLOBALS["id"]; ?>
      <we:field name="Name" /> - <we:a edit="object" type="listview" id="\$id">Bearbeiten</we:a>
    </we:repeat>
  </we:ifFound>
</we:listview>
Die Objektliste in webEdition scheint ok, aber wenn ich auf 'Bearbeiten' klicke, öffnet sich das Bearbeitenfenster eines Dokumentes mit derselben ID, nicht das Objekt?!

Siehe Bilder:
screen1.png
screen1.png (18.46 KiB) 2037 mal betrachtet
Ausgabe, hier Klick auf Bearbeiten
screen2.png
screen2.png (97.77 KiB) 2037 mal betrachtet
dann öffnet sich die Dokument ID 60 statt Objekt ID 60

Die IDs der Objekte sind 60 & 61 - und es gibt auch Dokumente mit genau diesen IDs, und die werden geöffnet statt dem Objektedit Fenster. Was mache ich falsch?

Ich benutze wE 8.1.5.

Re: Innerhalb von webEdition einen "Objekt editieren"-Link erstellen

Verfasst: Fr 26. Mär 2021, 14:51
von sman
PS: Es geht übrigens auch nicht, wenn ich die ID 60 hardcoded benutze - die IDs an sich stimmen in der listview

Re: Innerhalb von webEdition einen "Objekt editieren"-Link erstellen

Verfasst: Mo 29. Mär 2021, 23:10
von NilSole
Hallo Sman,

we:a edit="object" ist für die Frontend-Bearbeitung. Du könntest auch etwas JS an deinen Link anhängen, etwa so

Code: Alles auswählen

<a href='javascript:WE().layout.weEditorFrameController.openDocument(WE().consts.tables.OBJECT_FILES_TABLE,*HIER DEINE OBJECT ID*)'>Test</a>
@Oliver
Ich könnte mir vorstellen, dass mit etwas Trickserei auch ein funktionierender Link in der Vorschau entstehen könnte. Aber das müsste man sich anschauen, ob es die Arbeit überhaupt wert ist.

Re: Innerhalb von webEdition einen "Objekt editieren"-Link erstellen

Verfasst: Di 30. Mär 2021, 09:35
von sman
Hallo NilSole,

vielen Dank für den Tipp, probier ich nachher gleich aus :-)

Liebe Grüße

Re: Innerhalb von webEdition einen "Objekt editieren"-Link erstellen

Verfasst: Di 30. Mär 2021, 09:38
von sman
Super :D klappt...vielen Dank!!!!!