Ich komme mit dem Video auch nicht zum Erfolg / gewünschten Resultat. Eine kurze Doku / Wiki wäre echt super.
Viele Grüße
aadursun
Ich komme mit dem Video auch nicht zum Erfolg / gewünschten Resultat. Eine kurze Doku / Wiki wäre echt super.
Viele Grüße
aadursun
Leider +1 :rolleyes:
Bisher hab ich eigentlich jede Contao-Erweiterung nach geduldigem Lesen und probieren zum laufen gebracht - diese jedoch entzieht sich meinem Verständnis scheinbar komplett.
Gibt es vielleicht irgendetwas, was man vergessen könnte bei der ganzen Geschichte bzw. an die, bei denen es geklappt hat: gab es etwas, was den Ausschlag gegeben hat?
Danke & Gruß!
Hallo,
also ich nutze Contao3.1 RC1 und die erweiterung läuft problemlos...
-OnePage -> headermodule - Navigation ->mainmodul - Strukturnormal
- seite 1
- seite 2
.....
Thx, Merlin!
Eigentlich ist in diesem Thread alles erklärt und Merlin macht es auch nach dem vorgesehenden Schema.
Das Modul ist im Grunde ein "getuned'tes" Navigations-Modul und so sollte sie auch eingesetzt werden. Mit einer Referenz-Seite für die Seiten, die die OnePage umfassen soll und einem Modul, was auf einer Seite ausserhalb dieser Referenzseite, die Seiteninhalte darstellt. Eingebunden z.B. in einen Artikel oder direkt als Modul im Seitenlayout.
Ich persönlich nutze zwei Seitenlayouts.
Ein ganz normales und eins nur für den Seitenstrang mit den Seiten für die OnePage. Dieses Seitenlayout ist abgespeckter. (meistens reicht es, wenn nur Artikel eingesetzt werden). Auf den Seiten innerhalb der OnePage Referenzseite dann die Inhalte anlegen.
An dieser Stelle: Vielen Dank für die Erweiterung, Tim!
Ich habe die Contao-3-Version noch für mich angepasst:
Bei mir war das Problem, dass die Erweiterung für die "Unterseiten" das Layout der "Wurzelseite" verwendet hat. Vielleicht war das ja auch ein Fehler meinerseits…
Außerdem verwende ich jetzt den Alias in den Ankern anstatt der Id.
Die 3er Version besitzt kein Standard-Layout mehr. Daher gibt es leider kein Fallback mehr. In der 3er sollte man der Referenzseite bereits ein Layout übergeben. (siehe die Beiträge oben. Ein abgespecktes Layout für die Referenzseite. :) )Zitat:
Eine Fehlermeldung wurde behoben und bei mir war das Problem, dass die Erweiterung für die "Unterseiten" das Layout der "Wurzelseite" verwendet hat. Vielleicht war das ja auch ein Fehler meinerseits…
Das habe ich mit Absicht nicht gemacht, weil in ordernähnlichen Strukturen Alias mit Slashes etc. entstehen, was für IDs eher kritisch ist. Auch kann es zu Dopplungen bei Artikel-IDs kommen.Zitat:
Außerdem verwende ich jetzt den Alias in den Ankern anstatt der Id.
Ich finde es besser hier einfach das Template anzupassen. In den Core würde ich es nicht schreiben.
Hallo Tim,
vielen Dank für diese schöne Erweiterung!
Hast Du zufällig schon über die Option nachgedacht, dass Menüpunkte beim Scrollen automatisch als "aktiv" markiert werden, wenn der Nutzer die entsprechenden DIVs angesteuert hat? Bei Bootstrap gibt es bspw. das ScrollSpy Script: http://twitter.github.io/bootstrap/j...html#scrollspy
Einfach das mootools Template, moo_onepagenavigation, mit einbinden.
Sent from my iphone using Tapatalk
Hallo Tim,
vielen Dank - mit dem Template funktionieren zwar die Aktionen bei "Klick", nicht aber die automatische Ansteuerung beim Scrollen.
Müssen den Modulen oder Seiten noch irgendwelche Klassen mitgegeben werden?
Hallo Tim,
sorry, ich habe mich wahrscheinlich mißverständlich ausgedrückt.
Das Scrollen funktioniert, die Menüpunkte werden allerdings nur als "aktiv" markiert, wenn man diese direkt anklickt. Das Scrollen zu entsprechenden Bereichen auf der Seite aktiviert Menüpunkte hingegen nicht als "aktiv".
Wenn ich von einer anderen Seite (bspw. blog.html) im Menü wieder zurück zur One-Page-Seite springe, wird zwar der korrekte Link erzeugt (Bsp.: http://www.domain.de/home.html#page1), der entsprechende Bereich wird aber nicht fokussiert. Das funktioniert erst nach einem Reload.
Die zugehörigen Scripte sind natürlich eingebunden.
Den Ansatz mit dem Alias als Anker finde ich bei meiner Seitenstruktur sehr interessant, auch die Verschachtelung des Wrappers.
Ich habe Deine Version eben getestet und auch damit gibt es anscheinend noch ein Problem mit der URL-Strutkur, wenn man die One-Page-Menüpunkte aufruft und sich außerhalb der One-Page-Struktur befindet.
Es wird momentan bspw. statt dem "bereinigten" domain.de/#kontakt die ursprüngliche Struktur domain.de/home.html#page1 aufgerufen und der Inhalt nicht fokussiert.
Ich nutze auch einen "Alias" für die Anker. Aber dieser sollte im Template einfach aus dem Titel der Seite mit standardize($title) gebildet werden und nicht innerhalb der Erstellungsroutine mit dem Alias aus der Datenbank. Dieser kann und wird in den meisten Fällen einen "/" slash beinhalten und damit entsteht ein unsauberer CSS-ID Anker.
Daher unterstütze ich den Ansatz nicht. Sondern weise daraufhin einfach die Templates anzupassen.
Auch das ist gewollt.Zitat:
Ich habe Deine Version eben getestet und auch damit gibt es anscheinend noch ein Problem mit der URL-Strutkur, wenn man die One-Page-Menüpunkte aufruft und sich außerhalb der One-Page-Struktur befindet.
Es wird momentan bspw. statt dem "bereinigten" domain.de/#kontakt die ursprüngliche Struktur domain.de/home.html#page1 aufgerufen und der Inhalt nicht fokussiert.
Wenn man eine normale Seite betrachtet, muss der Link der Navigation auf die Seite mit dem OnePage-Strukur Modul zeigen, sonst greift dein Anker nur für die aktuelle Seite und das ist falsch.
domain.de/#kontakt -> das ist nicht bereinigt. Das ist einfach ein Anker auf der ersten Seite deiner Seitenstruktur bzw. auf der aktuellen Seite.
domain.de/home.html#page1 -> ist das gleiche wie oben, nur Du bist auf einer normalen verschachtelten oder Geschwisterseite. Um zurück zum Anker #page1 zuspringen, muss der link so gebildet werden.
Nochmal zu den zwei verschiedenen Seitentemplates.
Habe ein "Standard" template angelegt, mit den ganzen Modulen (Navigation etc.) und dies dem Startpunkt der Webseite zugewiesen.
Der Referenzseite habe ich dementsprechend ein abgespecktes Layout, wo nur Artikel eingebunden sind, zugewiesen.
Ich verdeutliche das mal:
- Startpunkt der Webseite (Standard Layout)
--- Startseite (One Page Referenz) (Abgespecktes Layout)
----- Seite 1
----- Seite 2
----- Seite 3
----- usw...
Jedoch geht dies bei mir nicht, denn sobald ich der referenzseite das abgespeckte Layout zuweise, verschwinden Header und Footer und somit ist keine Navigation mehr vorhanden. Also nicht die unterseiten der referenzseite erhalten das abgespeckte Layout sondern die Referenzseite selbst, was ja nicht sein soll.
Hilfe?
- Startpunkt der Webseite (Standard Layout)
--- Home mit OPW-Modul (Standard Layout)
----- One Page Referenz (versteckt) (Abgespecktes Layout)
------- Seite 1
------- Seite 2
------- Seite 3
------- usw...
Ich habe nun ein anderes Problem und bekomme es auch einfach nicht hin. Bin in PHP einfach nicht weit genug..
Und zwar möchte ich bei der Ausgabe der einzelnen Artikel (dabei gibt es ja mehrere pro Seite) auch die Klasse ausgeben.
Der Aufbau des Templates sieht so aus:
<div class="main">
<?php foreach($page['content'] as $section => $contents): ?>
<div class="inside block">
<?php foreach($contents as $content): ?>
<?php echo $content['html']; ?>
<?php endforeach; ?>
</div>
<?php endforeach; ?>
</div>
und bei inside möchte ich die klasse des artikels ausgeben, also:
<div class="inside block <?php echo $article['class']; ?>">
<?php foreach($contents as $content): ?>
<?php echo $content['html']; ?>
<?php endforeach; ?>
</div>
Was aber leider nicht geht und ich blick auch nicht dahinter, warum :/
Da brauchst Du nichts am Template ändern. Es werden die Klassen von den Artikeln ganz normal berücksichtigt. Artikel werden ganz normal als ".mod_article MEINE-KLASSE" ausgegeben.Zitat:
Und zwar möchte ich bei der Ausgabe der einzelnen Artikel (dabei gibt es ja mehrere pro Seite) auch die Klasse ausgeben.
Ausserhalb der foreach-Schleife brauchst Du nicht suchen. Da würde ja maximal eine Klasse vergeben werden.
Hallo Tim
Keine Ahnung wie, aber irgendwie hab ich es geschafft die Erweiterung so zum laufen zu
bringen, dass ich eine Navigation angezeigt bekomme und der Browser auch zum entsprechenden
Artikel/Seite scrollt :D Soweit so gut, also.
Gibt es denn auch eine Möglichkeit, den Header (z.B. Logo) sowie die OnePage-Navigation "statisch"
zu platzieren, sodass sie jederzeit sichtbar sind und der Inhalt darunter scrollt? Oder ist das einfach
eine Frage des CSS?
Auf der Seite von Fairphone.com wird das, was ich meine, umgesetzt.
#header {position:fixed;}
Danke Tim, das hab ich schon probiert. Aber wie bekomme ich es hin, dass die
jeweilige Seite/Artikel unterhalb der Navigation "bremst" und zum Stillstand kommt - und
nicht bis zum Browser-Fensterrand hochläuft und so von der Navigation verdeckt wird?
Geht das überhaupt oder wird der Ankerpunkt immer so angesteuert, dass der Inhalt bis
zum oberen Rand des Browserfenster (Viewport) läuft?
Klar geht das. Habe das in einem aktuellen Projekt auch so.
In dem moo_smoothScroll Template ein negativ Offset vergeben:
in diesem Beispiel ist der Header 153px.Code:var offsetY = 153;
new Fx.SmoothScroll(
{
duration: 800,
offset: {'y':-offsetY}
});
Man kann auch ganz viel mit CSS richten. Die onepage Struktur ist hervorragend zu stylen, durch die <ul> Liste Struktur.
Saugut, genau das habe ich gesucht! Tolles Projekt übrigens! :)
Hallo Tim
Ich hab jetzt mal ein bisschen 'rumprobiert und 'rumgespielt und bin dabei auf ein "Problem" gestossen. Vielleicht tritt
das nur bei mir auf - oder Du kennst den notwendigen Trick dazu... ;-)
Ich habe die Testseite wie von dir empfohlen aufgebaut:
- meinedomain.tld (Startpunkt der Webseite, Standard Layout)
--- Startseite (Artikel mit OPW-Modul:Normale Struktur, Standard Layout)
----- One Page Referenz (versteckt) (Abgespecktes Layout)
------- Seite 1 (Abgespecktes Layout)
------- Seite 2 (Abgespecktes Layout)
------- Seite 3 (Abgespecktes Layout)
Wenn ich jetzt die Seite über die URL meinedomain.tld aufrufe, lande ich auf
meinedomain.tld/index.php (obwohl eigentlich index.php/startseite.html angezeigt wird).
Die Links im OPW-Navigationsmodul zeigen aber bereits z.B. auf
meinedomain.tld/index.php/startseite.html#page4
Ja, mod-rewrite und URL-umschreiben funktioniert noch nicht... ;-)
Wenn ich also in der Navigation auf den Link klicke, springt die Website zwar dorthin wo #page4 ist, aber
a) ist das nur ungefähr und b) wird gesprungen, nicht gescrollt. Erst ab diesem Link bin ich im Browser
auf meinedomain.tld/index.php/startseite.html#page4 und von da an kann ich klicken was ich will - es wird
immer sauber gescrollt!
Wenn ich das mit deinem Projekt vergleiche, fällt mir z.B. auf dass gar keine .html-Seite im Adressfeld des
Browser eingefügt wird. Und weiter fällt mir auf, dass bei dir anstelle #page4 der Name des Artikels steht...
Kannst du mir verraten, wie das geht?
Ist ja hier bereits mehrfach angesprochen. Im Template einfach ids vergeben für die <li> und im Navi-Template auf diese IDs die hrefs umschreiben. Sollte kein Problem sein. Schön mit standardize(SEITEN_TITEL) arbeiten.Zitat:
Wenn ich das mit deinem Projekt vergleiche, fällt mir z.B. auf dass gar keine .html-Seite im Adressfeld des
Browser eingefügt wird. Und weiter fällt mir auf, dass bei dir anstelle #page4 der Name des Artikels steht...
Setz mal die Referenzseite des OPW-Navi Moduls auf Deine Startseite (Artikel mit OPW-Modul:Normale Struktur, Standard Layout)Zitat:
Die Links im OPW-Navigationsmodul zeigen aber bereits z.B. auf
meinedomain.tld/index.php/startseite.html#page4
Sonst ist das Verhalten erstmal richtig.
Hi Tim
Hm... Im Modul [One-Page-Website: Navigationsmenü] kann ich keine Referenz-Seite setzen, nur ein Referenz-Modul! Und dort habe ich das
OPW-Strukturmodul angegeben...
Im Modul [One-Page-Website: Normale Struktur] hingegen kann ich eine Refernzseite auswählen. Dort muss ich allerdings die Seite
One Page Referenz auswählen, weils sonst das Frontend leer beleibt. Heisst also: Wenn ich dort die Startseite angebe, bekomm ich
weder eine Navigation noch die Artikel im Frondend...
Das Modul [One-Page-Website: Navigationsmenü] habe ich übrigens im Header des Standardlayout eingebunden... Falls das einen
Einfluss hat...
Merci für deine Bemühungen.
Check mal mit der github Version. Ich weiss jetzt nicht ob ich das ER up to date habe. Eine Weiterleitungsseite sollte auswählbar sein im Navi-Modul.Zitat:
Hm... Im Modul [One-Page-Website: Navigationsmenü] kann ich keine Referenz-Seite setzen, nur ein Referenz-Modul! Und dort habe ich das
OPW-Strukturmodul angegeben...
Sonst klingt alles richtig.
Nutzt du die 3er oder 2er Version?
Ja, eine Weiterleitungs-Seite kann ich im Modul [One-Page-Website: Navigationsmenü]
angeben. Hier habe ich bereits die Startseite (startseite.html) angegeben... Du hast
von Referenz-Seite geschrieben ;)
NB: Contao 3.1 - frisch installiert
Jaja, mein ich doch :)
puhh. 3.1 hatte ich jetzt noch nicht getestet.
Das Navi-Modul testet ob die aktuelle Seite = der Weiterleitungsseite ist. Wenn nicht, wird der Anker an die jeweilige SEITE.html gehängt.
Wenn beide gleich, dann wird einfach die aktuelle URL genommen.
Vielleicht hat sich da in 3.1 etwas geändert, dass der Startpunkt der Webseite auf die erste Seite der Struktur leitet. Dann würden unterschiedliche Seiten entdeckt werden.
Werde ich nächste Woche mal gegentesten. Sollte Dich beim weiteren Erstellen der Seite aber nicht hindern. :)
Keine Panik. Ich beschäftige mich nur zum Spass und aus Interesse an der Sache mit
solchen Sachen :D
Aber noch was anderes: Hab grad festgestellt, dass mir der error.log gefüllt wird, mit immer
den gleichen Einträge!
[31-May-2013 12:20:50 GMT]
PHP Runtime notice: Declaration of ModuleOnePageWebsiteNavigation::renderNavigation() should be compatible with Contao\Module::renderNavigation($pid, $level = 1, $host = NULL, $language = NULL) in /system/modules/OnePageWebsite/modules/ModuleOnePageWebsiteNavigation.php on line 17
#0 /system/modules/OnePageWebsite/modules/ModuleOnePageWebsiteNavigation.php(17): __error(2048, 'Declaration of ...', '/home/www/web26...', 17, Array)
#1 /system/modules/core/library/Contao/ClassLoader.php(152): include('/home/www/web26...')
#2 [internal function]: Contao\ClassLoader::load('ModuleOnePageWe...')
#3 [internal function]: spl_autoload_call('ModuleOnePageWe...')
#4 /system/modules/core/library/Contao/Controller.php(278): class_exists('ModuleOnePageWe...')
#5 /system/modules/core/pages/PageRegular.php(142): Contao\Controller->getFrontendModule(Object(Contao\ModuleModel), 'header2')
#6 /index.php(250): Contao\PageRegular->generate(Object(Contao\PageModel), true)
#7 /index.php(415): Index->run()
#8 {main}
Vielleicht sagt dir das was?
Ist geupdated für 3.1
Danke Tim!
Die Fehlermeldungen sind weg! Aber das mit der Startseite funktioniert noch nicht so, wie es soll
resp. wie ich mir das vorstelle :-)
"Wenn ich die Seite über die URL meinedomain.tld aufrufe, lande ich auf
meinedomain.tld/index.php (angezeigt wird aber der Inhalt von index.php/startseite.html).
Die Links im OPW-Navigationsmodul zeigen aber bereits z.B. auf
meinedomain.tld/index.php/startseite.html#page4"
Es besteht also eine Diskrepanz zwischen Link im Browser und Link in der Navigation,
wegen fehlenem "startsteite.html". Das Problem besteht nur beim allerersten Aufruf
der Seite. Ich vermute mal, dass es an meiner Contao-Installation liegt...
Nein, ich kann das reproduzieren. Wenn die erste Seite nach dem Startpunkt die Seite mit dem Modul ist. Ich schau's mir an.
Kannst Du bei GitHub ein Ticket dafür erstellen. Dann haben wir eine Zuordnung.
Dank Dir
Ich lade das gleich bei GitHub rein.
ModulOnePageWebsiteNavigation, Zeile 150:
PHP-Code:
$href = '#page' .$objSubpages->id;
if($objJumpTo->id != $objPage->id)
{
$href = $this->generateFrontendUrl($objJumpTo->row()) . '#page' .$objSubpages->id;
}
Hab das "Problem" bei mir gefunden... Ich starte die Seite mit einer index.html-Seite und verweise dort auf die index.php! Das ist nur im Moment so, weil die statische Seite quasi die "Wartungsseite" ist und ich im Hintergrund am pröbeln bin... :-)
Aktuell schneidet dein Skript den Teil "index.php" aus den Links raus, sodass ich wieder auf der statischen index.html lande... :D Wenn die "Wartungs-Seite" dann aber rausfällt, funktioniert alles hervorragend!
Ja, mit einer zusätzlichen Wartungsseite auf der Du arbeitest, bist Du ja ausserhalb der OnePage-Struktur mit ihren Ankern, hast aber die Navi dafür angezeigt. Damit muss hier der Anker mit einer kompletten URL gebildet werden (die Navi will zur OnePage) - hier wird sozusagen eine normale Navigation mit zusätzlichen Ankern draus. Das ist nötig, weil: Eine versteckte Bestätigungsseite für E-Mail z.B. würde dann falsch verlinken bzw. sämtliche "normale" Seiten und man möchte zu einem Anker in der OnePage-Struktur.
Es muss aber noch eine Fallunterscheidung rein. Das stimmt.
Ob es die erste Seite nach der Root-Page ist.
Noch richtiger, der aktuelle Request-String sollte als default vor dem Anker stehen. Im Falle der Eingangsseite wäre dieser eh leer.
Hab die Versionen geupdatet...
Nein, ist es nicht.
Theoretisch könnte jede Seite gleich heissen. Dann müsste ich wieder über eine Routine einbauen, die ggf. wieder eine Nummer vergibt.
Würde ich das nicht machen, kommen nur doppelte IDs und dann schreiben wir hier wieder, weil w3c und wie sie nicht alle heissen...
Nein, wer Seitentitel haben will -> Template
Hi Tim
Heissen ja, aber nur im Seitennamen. Nicht aber im Seitenalias - da schaut doch Contao dass die Namen eindeutig sind und fügt Nummer an. Sonst würde ja gar kein Navimodul funktionieren...
You're the boss :D Und Freude habe ich trotzdem an der Erweiterung :cool:
Bitte auch die vorherigen Posts lesen! Dort ist mehrfach erklärt warum sich der Seitenalias noch weniger eignet! Stichwort Slashes, wenn ordnerähnliche Urls.
Hallo Tim
Hierzu habe ich auch noch eine Frage, resp. Feststellung: Ich habe meine Seite ja so eingerichtet,
dass ich nach eintippen der URL (im Browserfenster) direkt auf der OnePageWebsite lande. Die Seite
steht dann auf der ersten "Page" - der entsprechende Menüpunkt wird aber (noch) nicht als "activ"
gekennzeichnet. Erst wenn man das erste Mal auf den Menüpunkt klickt, bekommt er die entsprechende
Klasse... Gibt's da eine Möglichkeit das zu ändern?
3 Möglichkeiten:
1. Das moo_ Template anpassen (dort geht ja auch PHP)
2. Das nav_ Template anpassen und dort mit dem global $objPage Objekt und der ID der Seiten innerhalb der foreach-Schleife einfach den Button auf "active" setzen (mein Favorit).
global $objPage;
foreach...
if($item['id'] == $objPage->id) { $item['isActive'] = true; }
...endforeach
3. Erste Seite in der Seitenstruktur ist eine versteckte Weiterleitungsseite auf Deine eigentliche Home-Seite, aber mit gesetztem Anker.
Guten Morgen Tim
Ich arbeite im Modul [One-Page-Website: Navigationsmenü] mit dem Template nav_default. Wenn ich dieses
nun kopiere und gemäss 2.) ändere, wird der erste Menupunkt beim ersten Aufruf der Seite trotzdem nicht "active"
gesetzt... Gut möglich, dass ich was falsch mache - könntest Du ein Template nav_OPW.htlm5 mit der Erweiterung
ausliefern, wo die Änderung korrekt enthalten ist?
Dann habe ich noch etwas anderes festgestellt: Unmittelbar vor dem abschliessenden </div> von "mod_onepagewebsiteregular"
habe ich einen Anker <a id="" class="invisible"> … </a>. Die HTML-Validierungs-Tools meckern hier, dass die id leer nicht leer sein
darf. Kann es sein, dass dieser Anker zuviel ausgliefert wird?
Merci für deine Bemühungen!
Mhh... eher nicht. Damit würden zwei neue Templates in die Erweiterung kommen, die ich für überflüssig halte.Zitat:
Ich arbeite im Modul [One-Page-Website: Navigationsmenü] mit dem Template nav_default. Wenn ich dieses
nun kopiere und gemäss 2.) ändere, wird der erste Menupunkt beim ersten Aufruf der Seite trotzdem nicht "active"
gesetzt... Gut möglich, dass ich was falsch mache - könntest Du ein Template nav_OPW.htlm5 mit der Erweiterung
ausliefern, wo die Änderung korrekt enthalten ist?
Auch würde das nicht für jeden nötig sein. Auf der ofenrat.de Seite wollen wir gar nicht, dass sofort der erste Button aktiv ist, weil der erste Button eine Rubrik tiefer geht als das Titelbild.
Mal die neueste Version von github nehmen.Zitat:
Dann habe ich noch etwas anderes festgestellt: Unmittelbar vor dem abschliessenden </div> von "mod_onepagewebsiteregular"
habe ich einen Anker <a id="" class="invisible"> … </a>. Die HTML-Validierungs-Tools meckern hier, dass die id leer nicht leer sein
darf. Kann es sein, dass dieser Anker zuviel ausgliefert wird?
Ich hab dir das mal im moo_onepagewebsitenavigation Template ergänzt:Zitat:
Hierzu habe ich auch noch eine Frage, resp. Feststellung: Ich habe meine Seite ja so eingerichtet,
dass ich nach eintippen der URL (im Browserfenster) direkt auf der OnePageWebsite lande. Die Seite
steht dann auf der ersten "Page" - der entsprechende Menüpunkt wird aber (noch) nicht als "activ"
gekennzeichnet. Erst wenn man das erste Mal auf den Menüpunkt klickt, bekommt er die entsprechende
Klasse... Gibt's da eine Möglichkeit das zu ändern?
Einfach nach Zeile 55 ergänzen.
Probier mal aus, ob das den Ansprüchen entspricht.Code:// set first button to active when on first page of website and no anchor is set
var strRequest = '<?php echo $this->replaceInsertTags('{{env::request}}') ?>';
if(location.hash.length == 0 && strRequest.length == 0)
{
objAnchors[0].addClass('active');
objAnchors[0].getParent('li').addClass('active');
}
Hallo zusammen,
erstmal danke für die reichhaltigen Support Tipps Tim!
Ich habe mit Contao 3.1.0 soweit alles am Laufen. Ich verstehe nur nicht WAS ich in die Templates schreiben muss, WIE ich die editieren kann, weiß ich :D.
Könnte einer der Wissensträger hier einem dummen User weiterhelfen...
Es soll statt "#page" bitte der Seitenalias der Seite ausgegeben werden... :o
Vielen Dank für die Extension!!!
Guten Morgen Tim
Naja, "Ansprüche" ist jetzt etwas hochgegriffen... :-)
Die Ergänzung funktioniert soweit, dass beim Aufruf der URL der erste Menupunkt tatsächlich die Klasse "active" bekommt, sowohl das umgebende <li> als auch der Link <a> selbst. Die nachfolgenden Menupunkte bekommen einfach leere <li>'s... ABER, der erste Menupunkt behält die Klasse active wenn ich auf den zweiten oder dritten Menupunkt klicke. Diese bekommen zwar die Klasse active auch - aber jetzt habe ich zwei! Komischerweise funktioniert es dann aber nach ein paar Klickereien plötzlich - dafür habe ich dann <li>'s mit leeren Klasseangaben (<li class=" ">), was beim ersten und letzten Element nicht auffällt, da diese ja auch first und last mitbekommen...
Ah, grad rausgefunden: Der erste Menupunkt behält das active-Attribut solange, bis ich den Menupunkt erstmals angeklickt habe und dann 'was anderes auswähle!
ja, das kann sein.
ich muss die last Variable noch beschreiben. War gestern nur so zwischen Tür und Angel.
Hier ein opw_default Template mit Alias:
Hier ein Navi-Template mit Anker auf AliasPHP-Code:
<ul class="<?php echo $this->level; ?>">
<?php foreach($this->entries as $page): ?>
<?php
$alias = $page['row']['alias'];
$page['cssId'] = 'id="'.$alias.'"';
?>
<li <?php echo $page['cssId']; ?> class="<?php echo $page['class']; ?> <?php echo $alias; ?>">
<div class="wrapper">
<?php foreach($page['content'] as $section => $contents): ?>
<div class="<?php echo $section; ?> block">
<?php foreach($contents as $content): ?>
<?php echo $content['html']; ?>
<?php endforeach; ?>
</div>
<?php endforeach; ?>
</div>
<?php echo $page['subpages']; ?>
</li>
<?php endforeach; ?>
</ul>
PHP-Code:
<ul class="<?php echo $this->level; ?>">
<?php foreach ($this->items as $item): ?>
<?php
$item['href'] = '#'.$item['alias'];
?>
<?php if ($item['isActive']): ?>
<li class="active<?php if ($item['class']): ?> <?php echo $item['class']; ?><?php endif; ?>"><span class="active<?php if ($item['class']): ?> <?php echo $item['class']; ?><?php endif; ?>"><?php echo $item['link']; ?></span><?php echo $item['subitems']; ?></li>
<?php else: ?>
<li<?php if ($item['class']): ?> class="<?php echo $item['class']; ?>"<?php endif; ?>><a href="<?php echo $item['href']; ?>" title="<?php echo $item['pageTitle'] ? $item['pageTitle'] : $item['title']; ?>"<?php if ($item['class']): ?> class="<?php echo $item['class']; ?>"<?php endif; ?><?php if ($item['accesskey'] != ''): ?> accesskey="<?php echo $item['accesskey']; ?>"<?php endif; ?><?php if ($item['tabindex']): ?> tabindex="<?php echo $item['tabindex']; ?>"<?php endif; ?><?php if ($item['nofollow']): ?> rel="nofollow"<?php endif; ?><?php echo $item['target']; ?>><?php echo $item['link']; ?></a><?php echo $item['subitems']; ?></li>
<?php endif; ?>
<?php endforeach; ?>
</ul>
Im Urlaub nichts Neues!
Das kriegste bestimmt selbst hin.
Sent from my iphone using Tapatalk
Hallo Tim und danke für die Erweiterung.
Gibt es hierzu eine genauere Anleitung?
Danke
Preetz
Hätte ich direkt gemacht, aber ich versteh die Erweiterung noch nicht so ganz ^^
Hallo Preetz,
wenn Du ein schnelles Ergebnis brauchst, dann schau mal hier, da gibt es ein fertiges Template, dass Du Dir dann für Deine Bedürfnisse umbauen kannst.
http://themes.contao.org/de/preview/easy-agency.html
Ist vielleicht ne Option...
Gruß Manfred
Danke manfred,
ist es denn so, dass die eigentlich Seitenstruktur vorhanden sein muss und zusätzlich eine Seitenstruktur für die Erweiterunng verwendet werden muss?
War ja auch nur ein Versuch einem User ggf. zu helfen. Ich kenne ja die genauen Umstände nicht.Zitat:
Hier kommt die OnePageWebsite Erweiterung doch gar nicht zum Einsatz?! Das doch einfach nur alles mit Artikeln erstellt.
Gruß Manfred
Ich glaube dem User fehlt die Logik hinter dieser Erweiterung ;-)
Vielleicht kann mir jemand zu dieser Frage noch etwas genauer Antwort geben?Zitat:
ist es denn so, dass die eigentlich Seitenstruktur vorhanden sein muss und zusätzlich eine Seitenstruktur für die Erweiterunng verwendet werden muss?
Man baut ganz normal seine Seitenstruktur. Legt am besten zwei Seitenlayouts an. Eins abgespeckt nur mit Artikeln und ein ganz normales. (ist aber nicht zwingend notwendig)
Erstellt ein OPW-Modul vom Typ Normalestruktur, wählt die One Page Referenz-Seite aus als Startpunkt für die OnePage
Das Modul schmeisst man dann in einen Artikel in einer Normalen Seite, natürlich ausserhalb der One Page Referenz-Seite, weil ja sonst eine Endlosschleife entsteht.
- Startpunkt der Webseite (Standard Layout)
--- Home mit OPW-Modul (Standard Layout)
----- One Page Referenz-Seite (versteckt) (Abgespecktes Layout)
------- Seite 1
--------- Seite 1.1
------- Seite 2
------- Seite 3
------- usw...
Klar kannste auch.
Es wird ab dieser Seite erst gebaut, die Referenzseite selbst ist nur ein Startpunkt. Man kann auch Einzelseiten nehmen und diese verstreuen wie man möchte und dann das "Individuelle Struktur"-Modul nehmen. Ich finde es nur deutlich übersichtlicher von der Seitenstruktur, wenn es eine klare Referenzseite gibt und alle Seiten darin zu der OnePage zusammengefasst werden.
Einfach mal solch Threads ganz von Anfang durchlesen. Problemchen und Fragen tauchen immer auf, das ja kein Problem. Aber es sind ja primär immer die gleichen Frage. Das würde hier viele neue Posts sparen und der ganze Thread wäre deutlich kürzer. Ich mache mir nicht die Mühe einen Wiki-Eintrag zu erstellen. Ich würde es eh nur so erklären wie hier und damit kann anscheinend eh keiner was anfangen :D
Nach einmal zum Verständnis:
Ich habe jetzt eine ganz leer Installation aufgesetzt und meine Seitenstruktur erstellt:
Anhang 11304
Ich würde nun im nächsten Schritt die Erweiterung installieren und ein Seitenlayout erstellen.
Hier die 1. Frage. Du hast geschrieben:
Ich würde jetzt gerne nur ein Seitenlayout erstellen, dass geht also.Zitat:
Man baut ganz normal seine Seitenstruktur. Legt am besten zwei Seitenlayouts an. Eins abgespeckt nur mit Artikeln und ein ganz normales. (ist aber nicht zwingend notwendig)
Was anschließend muss ich:
Der Startpunkt meiner Seite ist "Kieler Tischtennis Klub Grün-Weiß von 1925" richtig?Zitat:
Erstellt ein OPW-Modul vom Typ Normalestruktur, wählt die One Page Referenz-Seite aus als Startpunkt für die OnePage
So, dass reicht erstmal bis hierhin an blöden Fragen ;-)
Preetz
Haltet Euch doch erstmal an die Struktur, die hier mehrfach erwähnt ist. Wenn alles klappt, kann man immer noch rumexperimentieren.
Die Wurzelseite "Startpunkt der Webseite" kann nicht als Referenzseite genutzt werden, weil sonst immer eine Endlosschleife entstehen würde, weil das Modul was die Seiten durchrasselt sich immer wieder selbst aufrufen würde.
Schmeiss alle Seiten, die später in der OPW als Teilbereich dargestellt werden sollen in eine versteckte Seite, das ist deine Referenzseite. Siehe Struktur-Skizze
Ich empfehle klar 2 Layouts! Macht es einfach übersichtlicher.
- Ein ganz normales
- das 2. abgespeckt (nur Artikel drin, oder eben all das was in einem Teilbereich der OPW gerendert werden soll)
-> dieses Layout an die Seiten der OP geben, oder eben der Referenzseite, dann wird es auf die Kinder vererbt.
Die Module sind mehrfach erklärt und in der Skizze ist auch aufgezeigt wo das Modul eingesetzt wird.
-> Pack es einfach auf die Startseite-Seite (oder eben auf eine Seite, die die OnePage-Struktur darstellen soll. Immer daran denken:
Das Ding ist wie das Navigations-Modul. Dort wo man ne Navi anzeigen will, packt man das Modul hin. -> Ist hier nichts anderes
Ich kann mich hier mal helfend einklinken:
Hier ein Screenshot von meiner Seitenstruktur:
Anhang 11314
Jetzt zu den Erläuterungen...
Ich habe zwei Seitenlayouts erstellt:
"OPW" - ist quasi ein leeres Seitenlayout, welches nur das Modul "Artikel" enthält
"Standard" - ist mein Standardlayout, welches die üblichen Angaben enthält, unter
anderem das Modul [One-Page-Website:Navigationsmenü], welches die Navigation
darstellt. Das habe ich im Header eingebunden. Zudem müssen folgende Mootools
noch geladen werden: moo_smoothScroll, moo_onepagewebsitenavigation. Die
entsprechende Option ist also noch zu aktivieren!
Die "Startseite" bekommt das Layout "Standard" zugewiesen.
Für die Seite "One Page Referenz" muss man die Optionen "Im Menü verstecken" sowie "In One-Page-Website
verstecken" aktivieren, sowie das Layout "OPW" zuweisen.
Alle Seiten innerhalb der Ebene "One Page Referenz" bekommen ebenfalls das Layout "OPW"
Alle restlichen Seiten bekommen wie üblich das Standardlayout.
In der Startseite habe ich einen normalen Artikel erstellt, und dort mittels Content-Element
Modul das Modul [One-Page-Website: Normale Struktur] eingefügt.
Natürlich müssen die beiden Module vorgängig erstellt werden, damit sie ins Seitenlayout resp. in den Artikel eingebaut werden können.
Auf der Seite "One Page Referenz" habe ich den automatisch erstellten Artikel gelöscht.
In den darunteliegenden Seiten "Willkommen", "Ausbildung" usw. habe ich ganz normal meine Artikel mit Inhalt erstellt, wie man das sonst auch macht.
Diese Artikel (also alles innerhalb der Seite "One Page Referenz") werden dann zu einer One Page Website zusammengefasst.
So sollte alles funktionieren.
Möchte man, dass die Links anstatt #page 1, #page2 usw. mit dem Seitenalias ersetzt werden (z.B. #startseite, #kontakt usw), muss man
die beiden Templates opw_default und nav_default ändern. Die Anleitung dazu gibt es in Beitrag #120, resp. unter diesem Link:
https://community.contao.org/de/show...l=1#post271877
@tinoo: Vielleicht findest Du ne ruhige Minute und bringst das ins Wiki mit ein paar Screenshots. Das wäre klasse.
@tim: Ja, das kann ich bei Gelegenheit gerne probieren. Habe mich noch nie in Wiki versucht... Ich kann allerdings nicht versprechen, dass ich mich heute oder morgen schon dran setze... :-)
Sorry, so ganz bekomme ich das nicht hin. Wo finde ich das aktuelle Video dazu?