Inhalte aufrufen

Profilbild
- - - - -

HTTP GET / HTTP Includes einbinden


  • Bitte melden Sie sich an, um eine Antwort zu verfassen.
9 Antworten zu diesem Thema

#1 damadi

damadi

    Advanced Member

  • Members
  • PunktPunktPunkt
  • 99 Beiträge

Geschrieben: 25 November 2016 - 12:54

Hallo,

 

ich hätte mal eine evtl. etwas exotische Frage :)

 

In z.B. ColdFusion gibt es die Möglichkeit mit "cfhttp method="get"" den Inhalt einer externen URL auszulesen und in einer Variable zu speichern. Diese lässt sich dann innerhalb einer anderen Webseiten als Inhalt mit anzeigen.

Man hat so recht elegant die Möglichkeit 2 Webseiten mit einander zu "verbinden".

D.h. Man kann Content der auf einer anderen Seite dynamisch mit z.B. PHP oder eben Coldfusion erzeugt wird, als statischen Content innerhalb einer anderen Seite mit einbinden. (Hilfreich für z.B. ein Gästebuch, welches eigentlich auf einer anderen Seite gepflegt wird)

 

Gibt es in smartstore/Razor diese Möglichkeit auch? Ein snippet wäre sexy :)

 

Danke vorab,

 

Gruß,

 

Markus

 

 

 



#2 Marcus Gesing

Marcus Gesing

    SmartStore AG

  • Administrators
  • 3801 Beiträge

Geschrieben: 25 November 2016 - 14:13

Wieso nicht per iframe?


Marcus Gesing

Smartstore AG


#3 damadi

damadi

    Advanced Member

  • Members
  • PunktPunktPunkt
  • 99 Beiträge

Geschrieben: 27 November 2016 - 07:54

- Bei HTTP GET wird der Inhalt der externen Seite als Content direkt eingebunden.
- Auch für Google erscheint der Inhalt als wäre er Bestandteil der Seite
- Die Shopseite verlängert sich, man scrollt auf der gesamten Seite


Bei iframe bin ich an eine vorher definierte Ausschnittsgröße gebunden (innerhalb derer man scollt) - da ist nichts dynamisch :(

Gerade bei einem Gästebuch wie hier ist das nicht praktikabel:

http://www.thalbach.de/feedback/






#4 damadi

damadi

    Advanced Member

  • Members
  • PunktPunktPunkt
  • 99 Beiträge

Geschrieben: 02 December 2016 - 13:15

Hallo Support-Team,

 

gibt es keine Möglichkeit das "live" via HTTP-Abfrage zu machen?

 

Ich habe natürlich auch Google bemüht - das hier klingt recht interessant und geht in die richtige Richtung:

 

http://stackoverflow...nclude-to-razor

 

Alternativ gäbe es noch den Workaround, das ich die statischen HTMLs per Scheduler anderweitig erzeuge und diese in \Views\Shared ablege.

 

Diese könnte man dann mit @{Html.RenderPartial("Test");} einbinden. Dummerweise ist es so, das selbiger Code nur ausgeführt wird, wenn Ich ihn z.B. in die _columnsthree.csmtl schreibe (Dann habe ich Ihn allerdings in wirklich jeder Seite :( )

 

Wenn ich den Code in den Inhalt einer einzelnen mit CMS erstellten Seite schreibe, wird er nicht asugeführt sondern nur angezeigt.

 

siehe:

https://shop.thalbach.de/t/test

 

Wäre dankbar für eine gute Idee ...

 

Liebe Grüße,

 

Markus



#5 damadi

damadi

    Advanced Member

  • Members
  • PunktPunktPunkt
  • 99 Beiträge

Geschrieben: 13 December 2016 - 15:42

Es gäbe ja noch eine Variante - evtl. habe ich damit mehr Glück?

 

Wie bekomme ich in Smartstore am einfachsten eine "leere Seite" mit den Includes aussen rum, ähnlich als wenn ich mir im Punkt "CMS" eine anlege? Nur müsste ich hier Code ausführen können:

 

@{
    var db = Database.Open("testdbconnection");
    var selectQueryString = "select * from feedback order by entrydate desc ";
}

 

@foreach(var row in db.Query(selectQueryString)){
            <tr>
               <td>@row.Name</td>
               <td>@row.feedbacktext</td>

            </tr>

 

Mit einer Dummy-cshtml-Seite funktioniert das - nur müsste das Resultat jetzt im Shop angezeigt werden.

Durch die anschliessenden Feinheiten kann ich mich dann wieder selbst frickeln :)

 

Danke,

 

Markus



#6 Marcus Gesing

Marcus Gesing

    SmartStore AG

  • Administrators
  • 3801 Beiträge

Geschrieben: 13 December 2016 - 16:29

Das widerspricht dem MVC-Pattern. Die durch die View benötigten Daten sind übers View-Model zu übergeben. 
Externe Daten können per Plugin abgerufen und per Action-Filter übergeben oder per Widget gerendert werden.
Daten können z.B. über das CustomProperties-Objekt von ModelBase an jedes View-Model weitergeben werden.

Marcus Gesing

Smartstore AG


#7 damadi

damadi

    Advanced Member

  • Members
  • PunktPunktPunkt
  • 99 Beiträge

Geschrieben: 13 December 2016 - 16:55

Das erklärt nur grob warum es angeblich nicht geht - bringt mich aber im Vorhaben selbst kein Stück weiter.

 

Stelle ich die Frage eben anders:

 

Was macht man, wenn man im Shop - damit das als einheitliches Ganzes rüberkommt - z.B. ein Gästebuch haben möchte, das sich den Inhalt aus einer separaten Tabelle zieht?

 

Mit viele jetzt nur noch ein, eine Dummy-Seite im CMS anzulegen, und dieser Seite die Inhalte von extern direkt in die DB zu injizieren.

 

Langsam gehen mir dann aber auch die Ideen aus...

 

Gruß

 

Markus



#8 Murat Cakir

Murat Cakir

    SmartStore AG

  • Administrators
  • 1118 Beiträge

Geschrieben: 13 December 2016 - 18:07

Mit dem CMS-Modul von SmartStore.NET wirst du so nicht weit kommen, weil der Content nicht verarbeitet, sondern direkt ausgegeben wird. Du könntest natürlich per AJAX ran: z.B. könntest du ein leeres HTML-Tag erzeugen mit einer bestimmten CSS-Klasse und mit ein oder mehreren data-* Attributen versehen. Nach dem Laden der Seite spürst du das Element auf, ermittelst benötigte Parameter (data-* Attribute) und rufst damit eine Action-Methode per AJAX auf. Diese Methode würde ein PartialViewResult oder ContentResult zurückgeben. Dieses Ergebnis renderst du dann in das besagte HTML-Tag.

 

Ansonsten gibt es viele andere Wege, die auch zum Ziel führen. Die haben aber alle nichts mit SmartStore.NET zu tun, sondern mit ASP.NET (MVC). Der von dir verlinke StackOverflow-Beitrag ist auch möglich. Wichtig ist nur: die Datenbeschaffung sollte in einer Action-Methode passieren, nicht in einer View. Und von dynamisch erzeugten View-Dateien würde ich definitiv die Finger lassen: fühlt sich nicht richtig an und bringt das MVC-View-Caching im Release-Mode ordentlich durcheinander.


Murat Cakir
SmartStore AG


#9 damadi

damadi

    Advanced Member

  • Members
  • PunktPunktPunkt
  • 99 Beiträge

Geschrieben: 15 December 2016 - 13:49

Hallo Murat,

 

vielen Dank für die ausführliche Antwort - das hat mich in die richtige Richtung denken lassen. Ich habe mir das alles noch mal durch den Kopf gehen lassen. Das Caching ist sicher ein Punkt, aber letztendlich geht es mir hier ja nicht um eine astreine Vorzeige-Lösung, sondern lediglich um einen funktionierenden Quick-and-Dirty-Migrations-Workaround.

 

Ich habe das nun folgendermaßene gelöst:

 

- Leere Seite im CMS angelegt.

- columssthreee.cshtml geändert:

 

<div id="content-center" class="span@(spanWidths[1])">
    @Html.Widget("main_column_before")
    @RenderBody()

@* -------------- GEÄNDERT --------------------- *@

 

@if (@Request.Url.GetLeftPart(UriPartial.Path) == "http://shop.thalbach.de/t/test") {

 

@RenderPage("~/includes/test.cshtml")

 

}

    @Html.Widget("main_column_after")
</div>

 

Das ist zwar programmierttechnischer Pfusch - aber funktioniert wunderbar. Siehe

 

http://shop.thalbach.de/t/test

 

Vielen Dank,

 

Markus


  • MediArt gefällt das

#10 Murat Cakir

Murat Cakir

    SmartStore AG

  • Administrators
  • 1118 Beiträge

Geschrieben: 15 December 2016 - 18:53

OK, cool. Wichtig ist, dass man selbst damit glücklich ist  :8ball:


Murat Cakir
SmartStore AG