Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 11. Mai 2011 10:58

jeff1980
Server-Pate
Ort: Dortmund
Registriert: 26. November 2010
Beiträge: 630

[Alles gelöst] Mobile Seite über Subdomain

Hallo,

habe mich schon ein wenig umgeschaut, aber nicht wirklich was gefunden.
Für das Projekt www.festtagsgedichte.de möchte ich eine Mobile Präsenz aufbauen.
Auf dem iPad kann man die Seite noch ganz gut anschauen, aber auf dem iPhone oder anderen Smartphones ist es schon nicht mehr so schön, da wir mit einem Dropdown-Menü arbeiten und durch die Fülle der Information die Links sehr nah beieinander liegen.
Ich stelle mir das Ganze in etwa so vor:
http://m.soundandrecording.de
Anstelle der News sollen natürlich die Übergeordneten Kategorien auftauchen. Wenn man eine anklickt, gelangt man zur nächsten Kategorie bis man letztendlich den Text sieht.
Eine Suche will ich natürlich auch integrieren.
Eine Subdomain anzulegen ist kein Problem. Aber wie kann ich CMSms am geschicktesten beibringen, dass es bei Eingabe von http://m.festtagsgedichte.de das entsprechende Template anzeigen soll, ohne dass das Haupttemplate berührt wird?

Bin wie immer über jeden Tipp dankbar...

Jan

Beitrag geändert von jeff1980 (18. Mai 2011 08:13)

Offline

#2 11. Mai 2011 11:34

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: [Alles gelöst] Mobile Seite über Subdomain

Ganz ums ändern des Templates kommst du nicht rum. Du könntest eine Weiche einbauen mit welcher die Domain abgefragt wird. Entsprechend gibt es im Template sozusagen 2 Templates. So im Sinne von:

{ ... header ... }
{ assign der Contentelemente }

{if domain == "m.domain.com}

... hier das Mobile Template ....

{else}

... hier das normale Template ....

{/if}

Es braucht noch eine kleine Anpassung in der config.php damit die Domains erhalten bleiben, aber so könnte es funktionieren.


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#3 11. Mai 2011 12:07

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: [Alles gelöst] Mobile Seite über Subdomain

nockenfell schrieb:

{if domain == "m.domain.com}

Du meinst doch sicherlich

{if $smarty.server.SERVER_NAME == "m.domain.com}

smile

Und die config.php ändern, wie hier beschrieben

http://www.cmsmadesimple.de/forum/viewt … 5543#p5543

Die Weiterleitung auf die mobile Domain kannst du ja via htaccess machen

http://blog.marit.ag/2010/01/07/mobile- … rewriting/

Offline

#4 11. Mai 2011 12:34

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: [Alles gelöst] Mobile Seite über Subdomain

cyberman schrieb:
nockenfell schrieb:

{if domain == "m.domain.com}

Du meinst doch sicherlich

{if $smarty.server.SERVER_NAME == "m.domain.com}

Genau. War zu faul die genaue Bezeichnung des Parameters rauszusuchen. Die weiss ich nicht auswendig.

Die Weiterleitung auf die mobile Domain kannst du ja via htaccess machen

http://blog.marit.ag/2010/01/07/mobile- … rewriting/

Damit wäre ich vorsichtig. Es gibt auch Leute die eine Seite im normalen Layout sehen wollen. (bei mir ist das z.B. doodle.com). Diese Logik würde ich im Template einbauen zusammen mit dem Link dass die Seite auch normal geöffnet werden kann.


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#5 11. Mai 2011 12:40

jeff1980
Server-Pate
Ort: Dortmund
Registriert: 26. November 2010
Beiträge: 630

Re: [Alles gelöst] Mobile Seite über Subdomain

Das mit der config.php habe ich mir schon fast gedacht. Was wird dann aber aus den canonical urls? Die sind doch eigentlich dazu da, dass sie immer gleich bleiben. Das wäre aber bei dieser Änderung ja nicht mehr der Fall.
Mit htaccess habe ich grad einen thread von nhaak gefunden:
http://forum.cmsmadesimple.org/viewtopi … 25&t=33539   3. Post
Könnte das auch noch hinhauen?

Offline

#6 14. Mai 2011 16:04

jeff1980
Server-Pate
Ort: Dortmund
Registriert: 26. November 2010
Beiträge: 630

Re: [Alles gelöst] Mobile Seite über Subdomain

Hallo noch mal,

die von nhaak genannte Version funktioniert bei mir nicht mehr. Aber ich habe jetzt ein anderes Brett vorm Kopf:
Mein Plan ist es ja, eine von der Bedienung an m.soundandrecording.de angelegte Navigation zu bauen.
In unserem Falle würde das z.B. so aussehen:

1. Bildschirm:
Festtage >
Besondere Anlässe >
Jahreszeitliches >
Weihnachten >
Liebe >
Kurz & knapp >
Sonstiges >
Shop >
Projekte >
International >
Sitemap >
Kontakt >

2. Bildschirm (man hat auf "Kurz & Knapp" geklickt)
Aphorismen >
Zungenbrecher >
Lateinische Sprichwörter  >

Nach einem weiteren Klick folgen nun entweder noch weitere Kategorien oder schon direkt der Text.
Allerdings bekomme ich es auf einer Testseite, bei denen ich mehere Seiten mit entsprechenden Unterkategorien angelegt habe, nicht hin, dass immer nur eine gezielte Ebene im Menü angezeigt wird.
Auf der Startseite ist es noch recht simpel. Dort kann ich ja mit

{menu template='mobile' start_level='1' number_of_levels='1'}

noch recht simpel nur die erste Ebene anzeigen.
Aber wie gehe ich jetzt für die nächste Ebene vor? Ich dachte, ich könnte Variablen aus dem Menü-Manager verwenden, z.B. depth:

{if $node->depth == 1}
{menu template='mobile' start_level='2' number_of_levels='2'}
{elseif $node->depth == 2}
usw...
{/if}

Aber "depth" scheint immer nur "1" zu sein (Bug?). Gibt es eine Variable, die mir die Ebene in einer prüfbaren Zahl ausgibt? Habe in den template_vars und auch mit {$nodelist|print_r} nicht wirklich was brauchbares finden können.
Im Prinzip müssten ja immer die Seiten angezeigt werden, die unter der gerade aktiven Seite liegen. Klingt ganz einfach, ist es sicher auch - komme da grad nur nicht weiter und sehe den Wald vor lauter Bäumen nicht mehr... neutral

PS: Aufgrund noch nicht geklärter Performance-Probleme läuft die Seite noch mit 1.8.2 ...

Beitrag geändert von jeff1980 (14. Mai 2011 16:08)

Offline

#7 15. Mai 2011 06:38

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: [Alles gelöst] Mobile Seite über Subdomain

Wie sieht denn dein MenuManager-Template aus?

Offline

#8 15. Mai 2011 07:18

jeff1980
Server-Pate
Ort: Dortmund
Registriert: 26. November 2010
Beiträge: 630

Re: [Alles gelöst] Mobile Seite über Subdomain

Ist im Moment noch das Standard-Template (Sample-Navigation). Hab's nur schon in die Datenbank importiert und umbenannt.

Offline

#9 17. Mai 2011 08:14

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: [Alles gelöst] Mobile Seite über Subdomain

jeff1980 schrieb:

Aber "depth" scheint immer nur "1" zu sein (Bug?).

Hab gerade keine 1.8.2 zu testen, aber mit

[== Smarty ==]
<pre>{$nodelist|print_r}</pre>

sollten dir die jeweiligen "Tiefen" der Menü-Eintrage angezeigt werden (hier mit der 1.9.4.1 getestet).

Kann aber (logischerweise) nicht mit dem Parameter number_of_levels='1' funktionieren, da du damit ja gerade ausgeschlossen hast, tiefere Ebenen anzeigen zu lassen

Offline

#10 17. Mai 2011 08:31

jeff1980
Server-Pate
Ort: Dortmund
Registriert: 26. November 2010
Beiträge: 630

Re: [Alles gelöst] Mobile Seite über Subdomain

Danke, dass Du Dich da so mit reinhängst ...

Damit hab ich schon geschaut (auch gerade mal mit der 1.9.4.1 verglichen).
Dabei ist mir aufgefallen, dass depth sehr wohl funktioniert. Aber anscheinend nur, wenn man alle Ebenen des Menüs anzeigen lässt (eben ohne "number_of_levels"). Dann nämlich zeigt er für jeden Menüpunkt den entsprechenden depth-Wert an. Wenn aber nur eine Ebene zu sehen ist (egal wie tief), ist depth "1".
Weitere Variablen scheinen uninteressant zu sein, da sie imho nicht dazu taugen, dynamisch die gesamte Tiefe anzugeben.
Es müsste doch eine Möglichkeit geben, die jeweilige Menütiefe bzw. die Ebene, auf der man sich befindet, abfragen zu können und diese als eindeutige Zahl auszugeben, sodass man sie für Abfragen benutzen kann.

Stehe echt auf dem Schlauch und habe nur noch Wirrwarr im Kopf  big_smile .

Offline

#11 17. Mai 2011 10:38

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: [Alles gelöst] Mobile Seite über Subdomain

jeff1980 schrieb:

Es müsste doch eine Möglichkeit geben, die jeweilige Menütiefe bzw. die Ebene, auf der man sich befindet, abfragen zu können und diese als eindeutige Zahl auszugeben, sodass man sie für Abfragen benutzen kann.

Klar gibts die devil ... hab da mal einen UDT vorbereitet (Wiki sei Dank)

[== PHP ==]
global $gCms;
$manager =& $gCms->GetHierarchyManager();

$result = "";
$thisPage = $gCms->variables['content_id'];
$currentNode = &$manager->sureGetNodeById($thisPage);
$result = $currentNode->getLevel();

$smarty->assign('ebene', $result);

Der UDT selbst erzeugt keinen Output. Die Smarty-Variable {$ebene} enthält dann die aktuelle Ebene.

Offline

#12 17. Mai 2011 13:58

jeff1980
Server-Pate
Ort: Dortmund
Registriert: 26. November 2010
Beiträge: 630

Re: [Alles gelöst] Mobile Seite über Subdomain

Coole Sache - funktioniert  smile
Habe noch eine Kleinigkeit geändert, damit es "realistischer" ist und bei Ebene "1" anfängt (+1 im Ergebnis):

global $gCms;
$manager =& $gCms->GetHierarchyManager();

$result = "";
$thisPage = $gCms->variables['content_id'];
$currentNode = &$manager->sureGetNodeById($thisPage);
$result = $currentNode->getLevel() + 1;

$smarty->assign('ebene', $result);

Das Template sieht nun, was das Menü angeht, so aus:

{ebene}
{if $page_alias == 'startseite'}
    {menu template='menu_mobile' start_level='1' number_of_levels='1'}
{else}
    {if $ebene == 1}
        {menu template='menu_mobile' start_level='2' number_of_levels='2'}
    {elseif $ebene == 2}
        {menu template='menu_mobile' start_level='3' number_of_levels='3'}
    {elseif $ebene == 3}
        {menu template='menu_mobile' start_level='4' number_of_levels='4'}
    {elseif $ebene == 4}
        {menu template='menu_mobile' start_level='5' number_of_levels='5'}
    {/if}
{/if}

Das Ding kommt sofort in mein neues Programm "Snippets" (leider MAC-only).
Das gibt es im Moment in einem Designer-Bundle: www.bundlehunt.com
Imho sehr cool und vielleicht für den einen oder anderen interessant?

Beitrag geändert von jeff1980 (17. Mai 2011 14:07)

Offline

#13 18. Mai 2011 07:30

jeff1980
Server-Pate
Ort: Dortmund
Registriert: 26. November 2010
Beiträge: 630

Re: [Alles gelöst] Mobile Seite über Subdomain

So, dank der Hilfe hat es nun (fast) alles geklappt.
Das Template steht und muss nun noch auf verschiedenen Endgeräten getestet werden (habe nur das iPhone zur Hand).

Das Ergebnis kann hier bewundert werden: http://m.festtagsgedichte.de

Das Ganze sieht nun wie folgt aus:

{process_pagedata}

{if $smarty.server.SERVER_NAME == "m.festtagsgedichte.de"} <!-- Abfrage, über welche Domain die Seite besucht wird -->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" >
<head>
<title>{sitename} - {title}</title>
{metadata}
<meta name="viewport" content="width=320, scale=1" /> <!-- Begrenzung auf Display-Breite -->
{stylesheet name="mobile"}
</head>
<body>
<div id="wrapper">
<!-- start header -->
<div id="header">
  <a href="http://m.festtagsgedichte.de" title="Festtagsgedichte - Gedichte zu jedem Anlass"><img src="http://m.festtagsgedichte.de/uploads/images/mobile/logo.png" title="Festtagsgedichte - Gedichte zu jedem Anlass" alt="Festtagsgedichte - Gedichte zu jedem Anlass" height="106" width="317" /></a>
</div>
<!-- end header -->

<!-- start menu -->
<div class="menu">
  
{ebene} <!-- UDT von Cyberman -->
{if $page_alias == 'home'}
{menu template='menu_mobile' start_level='1' number_of_levels='1'}
{else}
{if $ebene == 1}
{menu template='menu_mobile' start_level='2' number_of_levels='2'}
{elseif $ebene == 2}
{menu template='menu_mobile' start_level='3' number_of_levels='3'}
{elseif $ebene == 3}
{menu template='menu_mobile' start_level='4' number_of_levels='4'}
{elseif $ebene == 4}
{menu template='menu_mobile' start_level='5' number_of_levels='5'}
{elseif $ebene == 5}
{menu template='menu_mobile' start_level='6' number_of_levels='6'}
{elseif $ebene == 6}
{menu template='menu_mobile' start_level='7' number_of_levels='7'}
{/if}
{/if}

</div>
<!-- end menu -->


{if $node == ""} <!-- Inhalt soll nur angezeigt werden, wenn die aktuelle Seite die Letzte in der Hierarchie ist -->
<!-- start content -->
<div id="content">
  <h1>{title}</h1>
  {content}
</div>
<!-- end content -->
{/if}

{if $page_alias != 'home'} <!-- auf der Startseite noch kein Zurück-Button -->
<div class="menu">
<ul class="sub">
<li><a class="arrow_bw" href="javascript:history.back();" title="Zur&uuml;ck">Zur&uuml;ck</a></li>
<li>{cms_selflink dir='start' label='' text='Zur Startseite' class='arrow_bw'}</li>
</ul>
</div>
{/if}

<div id="footer">
{global_content name='footer_mobile'}
</div>

</div>
</body>
</html>

{else}

Haupttemplate

{/if}

Das Stylesheet ist normales CSS. Ich habe die einzelnen Container (header, content etc.) noch einmal auf 320px Breite begrenzt und die Navigation schön groß gemacht (font-size: 170%).

Jetzt werde ich noch eine Suche einbinden und mir Gedanken machen, was noch zu tun sein könnte.
Ich bin auch für Vorschläge offen - insbesondere, wenn jemand die Seite auf anderen Geräten testen kann.
Ich werde mir nachher auch noch mal Device-Central vornehmen, traue dem ganzen aber nicht so recht.

Ein kleines "Problem" bleibt für mich aber:
Da ich an der config.php die root_url "variabel" gesetzt habe

$config['root_url'] = 'http://'.$_SERVER['SERVER_NAME'];

funktionieren nun die Canonical URLs nicht mehr. Dies würde im Extremfall bedeuten, dass Google doppelten Inhalt erkennt.
Gibt es da evtl. noch einen Weg, das zu verhindern bzw. wieder richtige Canonical URLs einzutragen?
Im Moment habe ich den Standardaufruf im Haupttemplate:

    {if isset($canonical)}
         <link rel="canonical" href="{$canonical}" />
    {elseif isset($content_obj)}
        <link rel="canonical" href="{$content_obj->GetURL()}" />
    {/if}

Edith hat jetzt auch mal das Wort:
Leider klappt doch nicht alles. Hab nicht dran gedacht, dass ja jetzt zwei mal {content} im Template vorkommt. Natürlich kommt das System damit nicht klar und man keine Inhalte mehr einfplegen oder ändern - was kann ich denn dagegen tun?

Beitrag geändert von jeff1980 (18. Mai 2011 07:42)

Offline

#14 18. Mai 2011 07:48

nockenfell
Moderator
Ort: Gontenschwil, Schweiz
Registriert: 09. November 2010
Beiträge: 2.934
Webseite

Re: [Alles gelöst] Mobile Seite über Subdomain

jeff1980 schrieb:

funktionieren nun die Canonical URLs nicht mehr. Dies würde im Extremfall bedeuten, dass Google doppelten Inhalt erkennt.
Gibt es da evtl. noch einen Weg, das zu verhindern bzw. wieder richtige Canonical URLs einzutragen?
Im Moment habe ich den Standardaufruf im Haupttemplate:

    {if isset($canonical)}
         <link rel="canonical" href="{$canonical}" />
    {elseif isset($content_obj)}
        <link rel="canonical" href="{$content_obj->GetURL()}" />
    {/if}

Du kannst auch ein Replace auf der URL machen {$canonical|replace:"m.fest":"www.fest"}

Edith hat jetzt auch mal das Wort:
Leider klappt doch nicht alles. Hab nicht dran gedacht, dass ja jetzt zwei mal {content} im Template vorkommt. Natürlich kommt das System damit nicht klar und man keine Inhalte mehr einfplegen oder ändern - was kann ich denn dagegen tun?

{content assign="inhalt"}
{*inhalt anzeigen*}
{$inhalt}

Den Inhalt mit Assign einer Smarty Variable zuweisen. Diese kannst du dann an der bisherigen Stelle des Contentaufrufs einfügen.


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#15 18. Mai 2011 08:04

jeff1980
Server-Pate
Ort: Dortmund
Registriert: 26. November 2010
Beiträge: 630

Re: [Alles gelöst] Mobile Seite über Subdomain

Beide Probleme gelöst - vielen Dank  smile

Das mit "assign" beim content in dieser Form wusste ich auch noch nicht. Cool, so kann man dann ja auch Inhaltsblöcke "sortieren".

Offline

#16 18. Mai 2011 09:37

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: [Alles gelöst] Mobile Seite über Subdomain

jeff1980 schrieb:

Habe noch eine Kleinigkeit geändert, damit es "realistischer" ist und bei Ebene "1" anfängt (+1 im Ergebnis):

global $gCms;
$manager =& $gCms->GetHierarchyManager();

$result = "";
$thisPage = $gCms->variables['content_id'];
$currentNode = &$manager->sureGetNodeById($thisPage);
$result = $currentNode->getLevel() + 1;

$smarty->assign('ebene', $result);

Ähmm ... wie meinst du das?

Die erste Ebene ist immer 1 (zumindest bei mir) - ausgehend von deiner Änderung könntest du das Template jedoch wie folgt vereinfachen

[== Smarty ==]
{ebene}
{if $page_alias == 'startseite'}
    {menu template='menu_mobile' start_level='1' number_of_levels='1'}
{else}
    {menu template='menu_mobile' start_level=$ebene number_of_levels='1'}
{/if}

Du hattest übrigens einen Fehler drin ... number_of_levels muss nach deiner Vorgabe 1 sein

jeff1980 schrieb:

Im Prinzip müssten ja immer die Seiten angezeigt werden, die unter der gerade aktiven Seite liegen.

siehe Modulhilfe

Hilfe MenuManager schrieb:

number_of_levels="1" - Mit dieser Einstellung kann festgelegt werden, bis zu welcher Tiefe das Menü angezeigt wird.

Oder wolltest du in der letzten Ebene 7 untergeordnete Ebenen anzeigen?

Offline

#17 18. Mai 2011 10:26

jeff1980
Server-Pate
Ort: Dortmund
Registriert: 26. November 2010
Beiträge: 630

Re: [Alles gelöst] Mobile Seite über Subdomain

Haut teilweise hin.

Der UDT ohne das "+ 1" gibt bei der Grundebene (m.festtagsgedichte.de) den Wert "0" aus. Für den MenüManager ist es aber schon Level 1 (z.B. beim start_level). Ich fand es so übersichtlicher, da nun $ebene und die wirkliche Ebene übereinstimmen.

[== Smarty ==]
{ebene}
{if $page_alias == 'startseite'}
    {menu template='menu_mobile' start_level='1' number_of_levels='1'}
{else}
    {menu template='menu_mobile' start_level=$ebene number_of_levels='1'}
{/if}

Das funktionierte leider nicht direkt. Hier musste ich den Wert von $ebene sogar um 2 erhöhen - sonst bewege ich mich immer auf der selben Ebene und komme nicht tiefer. Mit "+ 2" im UDT funktioniert es nun auch so und ist wirklich übersichtlicher.

number_of_levels immer auf "1" funktioniert nun auch - bei meinem Testsystem hatte ich das Gefühl, dass number_of_levels immer bei der ersten Ebene anfängt zu zählen, egal was bei start_level stand. Hing aber wahrscheinlich mit anderen Dingen zusammen - habe ja einiges ausprobiert und es letztendlich so übernommen, weil es immer geklappt hat.

Ich vermute, diese Ganze Verwirrung entsteht bei mir, weil der MenüManager einerseits bei $depth mit "0" anfängt zu zählen, bei start_level aber mit "1" (was ich persönlich sinniger finde). Zudem wurden diese Werte imho nicht vernünftig ausgegeben - zumindest nicht so, dass ich etwas damit anfangen konnte.
Aber der UDT ist echt super. Damit lässt sich zuverlässig arbeiten.

Offline

#18 18. Mai 2011 10:38

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.018
Webseite

Re: [Alles gelöst] Mobile Seite über Subdomain

jeff1980 schrieb:

Hier musste ich den Wert von $ebene sogar um 2 erhöhen - sonst bewege ich mich immer auf der selben Ebene und komme nicht tiefer. Mit "+ 2" im UDT funktioniert es nun auch so und ist wirklich übersichtlicher.

Logisch ... wenn es bei dir mit 0 anfängt wink.

jeff1980 schrieb:

diese Ganze Verwirrung entsteht bei mir, weil der MenüManager einerseits bei $depth mit "0" anfängt zu zählen, bei start_level aber mit "1" (was ich persönlich sinniger finde). Zudem wurden diese Werte imho nicht vernünftig ausgegeben - zumindest nicht so, dass ich etwas damit anfangen konnte.

Entweder ist mit $depth da eher die Verschachtelung gemeint - wenn es nur eine Ebene gibt, gibts auch keine Verschachtelung, ergo Startebene == 1 / Tiefe == 0. Oder PHP hat wieder zugeschlagen (müsste man im Code nachsehen) - da wird auch mit 0 angefangen zu zählen.

Offline