From 6d8976ec87669d55c66dce81fab50567633daaeb Mon Sep 17 00:00:00 2001 From: Naomi Guyer Date: Thu, 19 Jul 2012 17:27:41 +1200 Subject: [PATCH] MINOR: Forms, navigation howto plus adjustments to tutorial one (#6367 ) * Created "How to make a simple contact form" * Created "Create a navigation menu" * Adjusted tutorial one from Andy's notes --- docs/en/_images/howto_contactForm.jpg | Bin 0 -> 27010 bytes docs/en/howto/navigation-menu.md | 59 ++++++++++ docs/en/howto/simple-contact-form.md | 116 +++++++++++++++++++ docs/en/tutorials/1-building-a-basic-site.md | 3 +- 4 files changed, 176 insertions(+), 2 deletions(-) create mode 100644 docs/en/_images/howto_contactForm.jpg create mode 100644 docs/en/howto/navigation-menu.md create mode 100644 docs/en/howto/simple-contact-form.md diff --git a/docs/en/_images/howto_contactForm.jpg b/docs/en/_images/howto_contactForm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fd6606c1e8414b028b803bbfc4c23cbb3966b996 GIT binary patch literal 27010 zcmeFZ2Urx#wlLbmkkgQJ6eI`98AK#Y&KV?w1j&*{P(cBS0!oyuB1tj=Lk2}Mk~1Qp zAOjKx7?{`YefB=*+;{%>{rBAazW=`O?SkrFU0uDpYE{)rwR$i!m{q`5HN@Qo0CaQ! zJ^%pl0W63JfCWOhVCIT-2e8321k3_p28=x2103A|XfgocftT3VL`AN>#QLKS7W^gj z4;W(et3GB0Ak$LQR0AL&3dk=!m^Hdrnkp)G`i6RHnzvMcyFvHd!PoZ=78w9|c?b9z zs^4HUx3FZxTL9}5fPYi~uY;q%ud=@WtzS6*bvmB1~I z4OPH8Js?qu9US~z0f1-}EN2UHbOmt`Awd#Tcssd!0{{g`V_Zc?HwPyGpt}jy5%BWz z`33ueFwgCOz~lN4u!F{mSXBz-_KnHLD90Qy~evLbz;^TYI&)wB6fK3^kWzGU@n%<5=0&Jq!L_~kx{{Kw+ zwZ49D>`%kr)(wPaHu*49k>RX{$6I>1pu$R0f5rw?`2m%0RVM80JM`j2Koj4 zjt`v50DuD!0x)ph(gQ322fzae0-}HA1DG|0TsYIpb=;VI)Of55EunM1M|QNumOArkiao;4uL@MAS4h<2t9-q zauvc45rs%Y6d|gRTM$Et1;ifW3h{;nLc$>rAn}k?NEW03@)}YDX@+z{K0wAGvyfHD zHsk02CPo3L9EYM zD_GyLj-UXP2ucHGhYCWap(;>4s3p_|>IaR4#z8Znh0sc93$!0P0bPOaKu@u8u_>|H zum!Q@ur;tvupP1QVn<>pU}s^!!fwFs!Jfcg#YSRZ;*j7l;qc?g;%MTSK^@!R5x4!qvdF!1cfl!%e`=#jV2az#YR~$34Qs!=uOJ$5X)5 z!*jq3z>C3qf%g^MnoZh3I!^inMgY4CQ-;~XLSY%OTG$9|hm3%Xi%f;gfh>|No2;2^n(T<2 zl3avbkKBtqf&2~m2l6cnJPIxfRSGAHhZIE=-4yGTP)ZI;6-r0S2b9H>y_6eNxK!L! znp7TC@l+L5!&FFW3Tkm`Q|b`vZ0a`Z6&ffF7mX&(9hxMXcQjKpXSB?;%Cye3PiQM? z$7xUK80oIlIn%|_RndK>JELc#SEcu)PoZz5Uu3{$;A1dg2xiD*=w;Ypq+*m~bYzTU ze8)J)gvG?iWXKf8RK)a&>4=$yS)JLJ`2}+~^9~CQ%XJnHmS-&OEZeMj)t~IipI1iv!^Gt`vNL*PbZmUXILUb4gvTV% zq{|d$YHj-3^u+9@S*qEJxv+VJ`Je@Zg}X(QC7z|JWvS(nm8w;`)rPf%b&U0t4Yy5* z%?Dcs+dH;xb}%~!yIOl3do%kt_Gkw^heC&=+nTp?ZX+F495WriJ6(5r=Ctjs;GF8b z>7wA0>ayjk;F{*T?WW|G;kM(h;-2Nc@1fz5?{VU(=UL{7xnp*x$_wAi-mBT0!rRlk z$A`ry#AnQx-#5m0<*w}A^t(tuZNE}~h`)`0QvemH$b1Uq349c|8l)JM9fS%t4XzC# z5AhE9bdT@elY5(?YM~`z*kO)gUE%EEQQ@l*$`J*TkjUGSU2qQgL-@vh_4}`)2%|is zhN7=Ur$!$>FniGQkon>LhwG2jACv_`)&KJoq&{=L-pR;ddSLHC}Jjpr9b;=#jyPj8>&zv8hfA-S- z)|VMY;dQBcv>V$#7F5wx#a9E>fz{t?>}#gpX}{~Lm9DL1sedo@zO0qKHM@5sEnK@a@>?bnRU4vg?}fHt(M7 zG3XiY)$SeWQ|s&QSMEm)C=9fIkp0m7QTk)!pyXh~Cy7t>LlQ&v!;-@dBT^$xqcWo{ zWAbC|<4WV56E`RNCN(DqKkI%Tn=+Z2nYNx@nQ@xgn!Pi-KNmE2K7W4!XCZEpY%ybr zX{m6Tce!dsa;0tc=IW<4qqX^U$Mx@D{J)?#9)2bHnz6~c`Fcxqt94s#d-R*tw~g<< z-_LhqcFA{he(?OL+q=H^32Bbp*!SDV93=dt|5f@kQ2!+){aye4 ztp=zbgC@Z*Yl9!?fmnjFxD;xG&4@jSlYnc8M~n9rzmXu0(23{~2@QIXpS-uWEB$<0j_*!qdc? zz-PxVCIA(f5G)c35LUlNe{DwuA^J?rU0gu|Cb25{PAXd3P=;M*PqtO=iM)vdyTY#G zd!_j6w#wo+h;MAFbluER4N}un=Tg7W7}tEI6{&4_i~H7@&aiHgUZ}pQfute5A;xIK zc+jNAG{Y>++}7f{{EdMtq6HQf)nG?@vUo2&5%z^<$?{19rp?@2ZZB*bKz<$R|dBij}kA8cbTt}KSDrTkY4bM zP>nGBnyv_o$gXIc*i&&E2?2>S$pNWn(hf2LGAFW~a&hv;3QP)L6f2ePUDr^iQ{K7J zsgilqOZA2tt=f({LL*JnMN3+nPDm0_}xzp<%_j46}prP;E1 zr$wP&LD+!iu=Z$0!V95;e4k_Rq*Un9ya+UbGc!^lT*F&VKhAD2I=k86+b zPZ)hVlem(!m5fY5r2)_I(_tAjnM}{Gyx_{>%@)WJ%Dt8+nlJfMzCgXuq{yW>q$I91 zr>yE#$Lp~-YvqR(*p)O@yw%rhtlov!zO3u3-)W?1l4`bTi3YjZr#2*lvO}`dtSh)X zv!|hVvhQGk?1SJ(%|Yi+QA4@I%_DPTka3|2hsli3pQf>9q-VY63g@R5373?X@2#|~ z;jLSLY5YpP>9;ldP4IjC&i0R6d(Hdu2UCa9$C4*or)lRB=+R5JKgVAiGK1v@WrL1m z-^Y=_LE;wU-NqNdKOtx(d`x6P%tMSJnIf%*#gn;{Yg6!3l2M*ftx$iYX`n5k%b<^8 zxX0+j+B*|n66xM%yHIUjpefB7T`YP`N;c%&xK!H01)^jm?`8ad`gib85eI$y?FmQVJFT&;YNf{X%Mu|p~5x{flf^4g6mm57^K zsYL)7t8mgKw%^9r%ZI4@`ASdY3jn^~N=hQzk_+XfC6lAPxa@7QFI$`$O9ByG^ z$!m$W8nrIA3AWX?W4AlEpLgiE{RW%~51f5nY+N&8HLZ1dE`XqTIJEz=EwN0~rW|3~1VU(%={MHN2EY)n~9Qj=7Jn?*ymm&p{g$hL) z#U>>VrCw$CUOjxB^yWo*(c8Bb4V7J0W7S{ZVbxx()2jDv$Y^YBT5Z97&)=%o=HH%y zc;B(yh2729qu(3Um($-hu=SC2Q0$Y%P~>pg$mAH&_^pZb$@MAm>6n?BIsW;Gg|Q`` z<=B07!o&0BKnTAW7DL$`35iA4Lk#g4X6W(8@FboPc{k5@_fRgc^3s!MGYnS z>tf0RH+WRIZ}O-LsEMh|Yp83QYPo8M-AdJYt2>~#Wk6^sY-DO2Wm0LnWKM3OZV9() zwm!BMw+pmycEC7lI6ZS-cNKSg;=bxBf9Hi4%E!#N&JX7A7SI{Q6dV#V6Dk{)7l9M$ z1D}u5if(x*@F*vi;IaRcxp?J-SBd0F;mO}pt#^fEQ?p1?+zmd5Ux9em;C5cKQ4_{_*?x(}CkJ0w@DUfC~@?qypuj?_dpdJF-HqLmVNGAr+9% zkV`Bc(87<#s=-=?QbN_BVbB`rHZ}*gJ@!lN4ICkyNStw8e%!~nTX@=d@9>%MDE~qPL>}hFe$LNyi z4H#${Rv9aqBANAA*jV;h+t?D=ZLWxL;B%~Vc3v&yiskm@vF6q0ljj!{U=+j_{3bLa zTz@T3d%A_|4Rq$@&sS>D>s#9yQ zYVvEzYTvqLuM?u1s#mQ)YH(mgXMEkn)AWVeNAn9yF{?Y)Wj0^zIPF~=-rU}Il5>9S zGUF!T{?KFjj)GUd57gKF?y$c|KuX|V@U4(Hp+sTc;S-T^@X{#C=;#NBkKAGwAL~Eq zh!;qB_7t7unEWYKDy<})IwL0Y?8V)z?Hs4vwfx&JzZQBIotDIw(Y|`~=6d-|g?|-! zb!`P`?giTweE22M*J8?((YRx7a==Q#>c%>O z3P2s9InXK4KVyKMhCPeJi4%Y`fXj{>fxC#Ogjb4Bh980dgWxv7Ea(dv2giPz*pB!+ zNf;@Nv<#*KTPKSp7bahzNT5`tJfJG0wxOY>8KX_6Gp1*x-(+ZHjAwFWzRtqNip{#k zHpE_iC5kf^Z2H8l}UQB5%oaSe%El7>>&(jGFQ zvWapf@(6`_#k1?Q%GYkFs+iq$RSi*#SAVI|tU0N*e~Us#Lf1;~p?=4r`Yu;&T-obcfrwqlERSs_L*Y(aHje5`7HD7@!VT^120tz zdO^7{RBBwd^xE^y>D#zUrmE_ioA2i8{2GWF%bIVtthYXD=Rpj226eOb4E6;K(0!;K zRQohKY%(%EW--1nY4`cdw8zZ;T<8LHF@71g61RG~ZuzC=D`Zn=>)H1FclI6E-SQtl zkV5;;p!M`-JoFlqxldlC^il* z9zFpf5m=#~4BX6tLb0%+I5^m#UltMp-UqPBaVXeDlyNBy9PqB(r4o%wDZuBrQPW9n zIELgDyX_ZEKuAMNN6&DTi<^g+Ph3J$N?Jx%<)*5dx`w8fk+F%X8R!6ZbaHlab#wRd z4+snj4!IZl;Nhc~*vC)eQq!KLXJkHqkyTh!TvA&0>h+sIg(f?M@{_NP_`!xp;gSIXfIg}hw0?=Oy<9LAobNO343z`p=zVB+1b`#~k;^o@Y zSY3H~d!oY9fa2_Z#3aj(D&SXV_8#6%7&*gwcwJumbRGlj&nc}wQn~{>V`I6B-o*f@ zT_8k<`o}V|E58Bnf(%A+8H54QK}jeFy?N;6W4tGDIrydAbrwq1utxN?vfU^Qa1+{t z$VFfP=AuhFqvH+?PzYJG8(zi$iKBQA$815Q#JuPB@G)Rtc+&?1^t)kz7^;hErLFrR znLisbzox^thgc9T|3IPD3nGUv(yii&v=4HLI!_ z$4*7MQG~0{tg^gGL7i?(X@M7!NaJiB)OSqnpf%O0CgsxZ*#+K5y9V{1ky+^abQcC7 zL2Dqf+-+G=-6V_gOQ=YGUbZ}wl#Z;qjfdKd&p59o=d5aM-PO8yKNIvL9Q*3y=q_Wn zK)G0|Hy_visvW+OdLD)KS-L(A6rP722Tok_q6v}e54_5<&B^AsPR2aQm!mvNS~tkl zaJ#E3gCo`xZnu^nH(fk!=L+|~c%{hs%?_tdkCZEaHC{(VXa{H9QseEhCL1rAHS>%; zjNV?|!)*K#abM7;HFGU8Y|OS9iFa&;YChLm{GNdzu3J>V0IST2yb=U~j5S_Nkq-86 z=pJO8GNsHAE~3cKDbQgTg=z(1DO1g##PMxyZ4B_llDarc6&=GEVWr(9Me|fhY@?RiRGp0i$}>zV_Q3X0 zDZEn@19%MCMgSHlxU#1nnN`F)x#eAb`}%l~YhuaGhBxoy==UTq*i&kHRxf4e^QPj8 zhUUOR&CH%eYb7MygTxS2O(o4V9=nYx;)FBo@AXuutXAgl!`7-|18wxQ6Njvr z!oxi`yP5o>mePWP?8Ey$y^<0G6f_Gg%)L#qSyrYOm9XHB%X3o4_fT!f&3+bk)ZJAW z*>cD;JIh&=tKsJ^Y6n-&r^hiO@@^mRC*xv(=a7Db;qY4*8IcN+b*6=6bD zusL#l=EIwC@s$lZQYUMv_;n1 z&N84^Z;rWrbpd}qx+fZt78kThR-m5!I%zgx$ADPLMbzbYEaO?DPVB}5ygXH_^+Yed zNRNK749T^ow7SjX1?hK?>f%ZK>!mhd3i^YDE)f&v3L zv(9uMha;UgAGFf03dh6A!}X|yEAYK{e+W4QC1~@cG<+OWd-TvFu87m=XVxZSr5KJE zNvV!}u)4R)x`Mz`U(pHco#><~C=_g&7mt^y)qBCNPo+(-^R|O{@3gsB=DhJB=roSy zWXKwQP}i-mRau>*sXgq!UVRc5|%Va8mSjr_1i1mW;PG&1$K0I17%%GK@2Y zPJU1d{zIKenajbn$no8CnAFbtYW@zO8zUiHJ%4IZ0Sh z*TN`4yf*t5#QuIBwK3^u6t`UwYfUhks<9Jffsu^n;Y_I0(r@6#$qg^@HkXg{yVt>0 zModfY8vKz!|05$Gz~;zlpESzo^OVA!ysa_ru(=cgYwdJ)*_SuK|2&(^{M^?HD6e+d z9^h zLo2j?Q>;-#%=d07{kc}HY3|`iOY`9=SH!%MqsxYEajmN8m`;xN+dxzgj>&5p&jm9Y z?_w+c99AN<;k#H_#I{>9QPNl7H@aj=J7>fIqbF}cUMd%c0s6KNDG)~AwfMgvP@#G| zpxjhhs>J{gclR&=W6{5;PJA{VcPjjUzp;e@Vv8^PFu*`GLVZ zmj$sJ&+OXU&Ngu~sbsz~>1tUf$7`b(r9?Fv(pObj9d9hK^lv8Zt|Ldfl?dP-Nen3U z&f^+OcNix_dRy^z>;@^a;wpy3kIdQ7YPO&%pt5nTzh{{;+!^(>3az{Uu%@AWji@$I zv*(I}nGI7Dojy;RBX16zyfS8&oll=OtE) zQY;H`=9+L1j5Gvy*}QJNbf2aS_XYLtQh0W7dKbTbDVjch>`aR zAE^@|b?p@q`|h*{HkrFd1!%d8Lb#)+(wte35-}&zF8=LMUeRrzm*!RLTnEy(M5RsK zZzqfJHo;n-KB~%4WP*2^Biv!wsL18+%PZq(iFM(3YFFaUjpNKKXCP5u<#nk?&Q+Ba zG`U(4$B!?X+hroh-JMHNT|afk4@nevg$u?4URlcB<5GEc@5PI}8**4di7%l;yq=qt z>vrQxx0KxWP8DFYj+ZT-h%;?!UrW1Q1j-BpAWdP^D50~>!HMvQm*(ydMNU;GO`nM4 zeY?vCJKMIS2pPE~q}=cCx1&Jg?HgH)%d@l8AonY?wGx-Q0;Bcn)M`F#@;=X4Rg-+T zayFfX*1RZczY?yCTE*MNDTljkU-CCJ)wVp`9&PnizxqmFa&Go?x#cxF)8UP<^%i|9LC`ScA<&J_yHXKmB88$LI!LQ7l0wtq(?OSnrj;VP;x_5G)&fq8O!seM`-t`S8Gi8vMk)!(eVXHnn z-N<}xRM=XsO7{UO#cQ>_bz;*^h=K0y=hpfZ4QHGensdr>cXOOrW0l-5UiB3sQ%?uq5v;71tX&T@<$aKt)S zwSob9736x)BHKBqB<%2)<`z7p%xXFN=yRXQwIW|x#9ebS>E|RoQ$IGlc*T0W(zp-n zR(h&b`_^=-L6RkKXrW054XM-q^vicK44M z885Joed_cIzg5>YEV%>p9DE=5YXE57%8C<{Sq}XThq%uT^#?j->k?<8v8T=-ebVW)>y7A6 zHKB3mQmfBcNe{!6=KKvt*CxZ4QQB3-Q=rUbQrZ_^*KKs6IrqK!KFja9%#u~R=Suc6 ziXXPiffrj9uHadSl2oucv1)v5*m*g*>Q~O51b=2t8tc7$e7845s$*mhv97msvF>Hm zZ%epO_r7HxJI2O)+Sur>&+F#f^Iz#nzIwZ`PsW@+9wwm5c&%Pifm&!R^81O{ij2D) z%%_LDDhPMwi6JpSCu=N%1?~8935Lq+eKQ}?zO?X8wt7)~g*|Yw6`EG(bk{EB1nxwe zc9911RH<~toBpQVkdm6lIQs)oY;}c;JC7TXXf0~5XHX#{*qwq4NC7g25B-K+Zut3aF=+TE?)k^ zs{;EqV?mndgG~CFj;I4x1KZPcc!+zubY%ZBEK)Y4s>`gM74>j@8#(888Sr8`w9|Ix z#>^mP{WP2Oe01papdA)y?UcalV4X1BSrm?79V_)#i_;Af8HraVVsmPWJDvjGB`Kjm zM=}7cK&+MeVe@9|!To#GTPz&=6_>dr`H%M2C+pg1`fwBbc*h>#1q#@zt<$@#P|$ko z7*}u)j$;5nE-Bj+tB9QwJrs9v_ugYWDCm}eZNq8hVdWvZaB4S(^wNx$`kIFeE%;v? zSVD8y(ft)}%1HnIW#qAB(k1!gO)KH}`CgZu>s_qX&&2NKxk&DQI5@l5%d7}L+3!Cd zM~&>S_py-ge?G_lFWVIe7rRK7 zS6C@1zo%$+JW!K8G%SMn_*1@Z@yu%kxgJNAyDru0bGit%)M92uiwwa#jp~QwEH0`7 z<0BLU)9Z3+y1Kr+9ud)k z;7RpYriZ>}(ub&0{VikP7uCf99t_C5#EK(;zAn5^$b(Iu?5_$?|6M!sRIC$+of3f} z2%IFNI)LjKh{-fR#%HGvLAHICSOUxT@{#>;We3)=SBIRDmX>F_UCZ+lrro%&cfTwZ zd*AcJ8h>)aI}fAT)?3%a7|<0Nw&oNajf*=t7D;v}5g*Uv5b-B*dJl6X-oGHWy(456 z^n;OrZGm7VQO#GrG7iELTY}2($Wo8ntJ)2inbt{VbR?{=)sUYAw>9iJsfnpEKqmd0 z(5Z6d-1n}xS*DMt&UWG{MNIB8Xdn2@rmAQ5Jiy-MWGy3Cg*I;=&nx{ zJo&Wbs5amS5NnF1v)lfD z7l2C)xN#;GtUKko$hycLobf=n$Rm&pVe#3q`FbgJ*-dwLN>lPAL)gh4Z`_1>#`?(Q z`*J?`0Hwb1jWs%x7V9f6axzJDNaDTqq78fM&J*4Fbc1@f#aef3mRx0t)jEB=rWcXG z?4mX{gLm3J+T2!c2{4e!`?i`%H*p__d#>h}hlUX_g?-tHRg%V-J9zh9qODeap&GRV z6Y^nJ@T`iC)8kzZrXU5+!L1Ve@4i*mD5FZ0+F)mBW#$@*p7uNUuP;j6$#p&?bU%c! za8q*qh%2Et-<0?gV6<)j-G56@Zbh}Hkpc7>a46n87tcVdO|aca=}b0~mhq9k)-V0# z%g-*f(6zqi#IVdVtu|~pL;}VeNPt$LuBcC&Q=`#Ly?t|HO-+X0 zt6dZOOKyMl`sNvreVAG!cb6wC%yY^TTao@=Wk8Pm#Jv*=>l(9%=<~kGoJ-Vd=q|7l z=$#HnuGwJq{WSd?;FY!|X{pegVyc~<>qET}H23h;LDa|jHI*a5 z%y2wm+Lq<1xA@5^`E;M&S9@1Y?^yzjXC-G`A-^M*^k@71MiRnYRr{6}k(=+iPTy*7 zd|hB0xRa>I?Af(ddISav_9Nk16ZNGN-mP+hcVEvgW|Q-O>YJfs6JZ}&O#4LX_Dx|nmS1?OwJzv~t9fD?*^AL;=60D0r`uo+#|mBPeEXd9~A3wgP0 zTdM@S`c6{M5>g)M;lY` z#i!${nWmR`{MFdX&A|0N?usasAU^lQiPO`G+xu}y2EIxf#rsYB>e0HzWfuEVF+N`- z)V}H9t`R}LYzOUne+P1JI&M(VC3Z2o8+tw)M=KX@FH_ooMr&7X%@uYQeQK1-ipWwY z&SX(}L`W|wpB?w~91u*DuHq|9X6ei0M(M1T4_aN=bz26e_wFvFXq*_y(v9=Gp);P} zpvD@M+}$v?_wJLOHt;GAr%Ae1-~737f~L#!^-zOL`kmq?a!Z0K8O3w8;!k9$YW|Ze zX2Z`)p5HHdLNw|cb)97!il&?xR~;`xPA1#9XOhk9gx&Q!xnV>JuQZet9;V_TW@5pU zVY2J}ZWk+gBC8TEpEb~Tym#ERTMWi6;Llk+KhPL)miNQCcSQ9TVta%<=~W`!31?mX zvX6ac_$|vxio9jen?8G&V&JXy?w3M7(M{8|aE@pDjVlgy(Eik_q}p%%k*rxoL*FrC z$x~F(akMvUWrI|Yjl4GZO;HvxF20qR4kt~2^_>RcUNdnd)fiaUlqdR@kh4Trs~QhG zk$)>*^5S{;t-$PG5{=h`y0iWf1%kJ>V2|I(z|c>2c?g7yT|8>p58@-I#%&i#X( z638K{`Ic%y<`IPWh1D^Ixx8laR*PMCg{)PDBnD7xXl={8G|Aw=%@qiyckxQ2x4ke) zbH5lcNcb7ncZP?i?CO;u!T?YV(A9`&i=Orx$}6b&mNG{aAayTw;)AP8>m7@y#ntRd zzz>d}(;U(x;)bEo3c<%!pIf1o=-_?aT4a|nOno(bpyFzc4UUDN`kA`=GB?Vqa# z;L5d~LTs(xK_FkiFSV*BwRoThdzVaY74WgHS@<`XOUoZ(~ zUQ!BUfDgv-?#%kCGifVfG?yI)NG(62hy&2?|7zV|wEJt`{k1Co|H@Ge%h2RuW=rj^ zyF{+F96`&(4R@DWw-r2(NaKK0qcvJIW&Vm%d?dDcI6d+>o#ny30)Cy6kSFXEOBEB4 zuiCzTrOwGwZ3NJ$M(@x4pO*gxFHUSE&G@(3vB^`VOZ0Impln3JL zGT88uk+#UZe=v=HGhzRSUYmRlloO=A)jAc(J4Gai&+>K6bStGW!$s*jLAl8gT5D8T z-VFJ@mxXp>hN!|$?S0Mtw5YF|M1^0@oFA!LXkB|&SUE1)-9=e}ZyXfwvG=aM?9p6! zDC%@=nnmL@*RZ+iH-i)OAZNwD*JvW#t8g1$--hVXd;D>UYNFK$ zxwaTUFR$`$dLUWXDQh-2+sWUH{e@VLSuVp5LLmv^AUg|u5#MXd?uCb$=<9ORD@$Ir>o4*3Osp%FR?bhh$v-JCQb-b#CFK^}Nr=v%2OPdjC zJ!`(VkXb*iE$m7+JmmM|G>4@{({A8U_)&fxIEUf!!AtBl$fed4sn{QtSNsErZ+M27 z5G_P^;KU25e^NfxWFy>aW!-kw zY46JIJIMQ7*TE#oZRTNHW{#6vb~O=6b9UX-O2`vtuuss3Szb-?G4lx2MS_Ot?? z-3b4A$}qKhOHgwy;-M=w_Nn)TUPgAl#^Pde`$w~}#vl3iOK5+TN*OA>l|5`9su6FJ zxGmuHc0_yR%yG zcs=9#{j`(FJ6OJ+otIE+G7`QhfkDSF(p0LrS~Lqt?eW+CnO7 z{?R4In~$XT(9~-r&>I)^iu~rDp+kxJ{^eU|#FpVwV#S6wh)gzq!Wx`m4La+oXZt4H zJ0$_n@(|LEUMDS$+oKyjPILlty<=Zq^BN|+J=D?_D`RmxuiSnui$f3&E6=h9Jix%YxV3-IN4k z$5K8FFgtM$a_D7nBbh;QIDa|w@=^*l=G^qz@`;7!#TW9extmfG-+Z@C-S7Fm=V~&i z(&jmI>C-s-?AFS?>c*k*5;>L5pe~#fmvQ%gRsSb|NeY_RN;rBh3y-urM=h_b{{wy* zGkX&c!Q#sU+_A%$Ni%aVzE8_)&65^%r_Dj{AQc zai*x%7U(~m_^E&M(E2x`Uz&yEElJzfl49C9kee|=dx8==+Ip!|Q(^p7wbnO3iL}eW zqdGWacCHsZ^$x5v8w_R$-YqJ$Tb_06Vq83#W(&z4E>;>sX{pWE?qmMKMr2*(iJ&ro&6-nn=cZ)0CIk zKUQb#dvEC$+-?5rF5~gxV&dK1tkl1Ip#Shh|2h|yf2YY3Y_SG4uPYzeo|w+fX)e@Y zUrb`J13%;1j3tzg&Vnx@Fu<58+WaxezD)$ZsB?=r!%?Qi>H|BaI0^;>1iVA=a>6Iw^k9LRx! zo56Lmi-wWQ$W>6dL?<=OVt|nar4yua6U#IEPDUJ@$KyJ7$(Ur;!A z8m@#IL~UOukNE3-{}bq$`^I`+lbDye=T_f0VqhizDBjZec?r0e3PzLtXL3!r``VCL zM?2N$aK{RPA;+S*wuLpal8>)G^sSZWzlKi6&ArX1MmcKjm&F_j6M8=3H}`1R_42)v z+;?tnzw0odc$lC3x$1R4Y>sF(uq3@=`iZ=zdx3VyJ58Ln&kK}tg(8Nl6-&k(d>!Gl zA5#+I^371Y$O)}xNdr_g^NkImD-EfPl4b#--ZLE(Qm=WsdEevchB65#VYgD%yljs! z(@)2GmG|RfN#~6-pXjw~ieth)Ysb`&9L@#MY!gSZ(+=ZDv@OA!Vq8W1km_cGX-=rX z^I=~`=zXBxyZHUQ$}|{yn)2vh8T!s4k0j^|>KY~_EX23DoAD>qDKzGTYWkSSKR|O# zEA%HZ!1VU=(Fqv1wRB$;u?iY~7gUU(qZt65$?E~|F1fX;Gaf1M!v=^aD4M<(gMtWw zQV%!50IFcDGx(X2ARM*GicCb6U&fJOfJ*>$PVcvD^SmVWxg=kvhL0(OzU>YoyGto` zG)FtA2p2wpV}ScK2()(#=-&q8jvfa0+8yeH5t>M>X$?NO1q_B_Otf(W)H(43wW$t8x z!)3wDt=?-Au0MJxqxSB@`GB+wxy$E~b?`Fy1Z?UZVpS5^c!BGH0otw5Jm9LB?^-^j zkG(wgLB1rhJKQ^SI2*eJb;VmsmLLD=ZqX&B4-tISh4p*`(RE(}K7rVd{jLt`pw})u z`Ty}=5=y645Zrru4&TebfImj|83X8IfKt{9*6roP?xVL=|9oHRpBe-;`>VBo(e~HW z{C{UA2rtar+6dfzf8$N9Iy(pFs=1_+)_V(6TR!A*Q6O`AUO92vVD4j4B72IvDO&_+ ze$#(#oc*Jr_8;LdibB0>A1>)bGL}0s8%-nGvvpGyB)?9vb5`qi6Micu>(v~_@28#~ z(=0D1k(0|8=-p>Mt{6YcernUsV!b%;Njclk{Ae*Ji6wtSp!(w*he4R4#-}CE4Gyy; zj;w|8%WIco!d%I7WnI&58}097F1+gG>Rp~1ay{<-s!?D}n@pQr`ICj*>h&34TE*xO!hy;B5^eU3i4viE!Sk)U(`;-Q6_k5%DX+@^r>$ zEH7C*jJCG8o4^3I7%(Ib3|;$srhZYLDjX0FAKAwMW0a=3E*_xpJ}-h#|8}j9oBOX+ zihrYwKC24-P~7M20)D}rRrg&C)E<&!z;77rK=EGu(=_*=8ugD2{C8onW1yAt?s{5=%$zjTJYc!L23RMap)6{wSq-z(Rxm9RU- zcUwL>!vJS`67Hja4|4n?*zv!3w#b?^bFMqj)|P6PY_#?4OMKIN%a5D!F|&1Wg)9$L z_}t700~ENNUt$0&aF%{lst;5;qwzuP9f1laQw69?{#E5Ky8Jg!hSd7{eTls%74?Ez zA2qxRf}M@7cs&WycnMVc>3;dpr^%g61)UoEJ45~7WhB&3*LH2c-yC&qt1%y%kPkxM z%PDM4d_~`OT`(uOkKg6>w>guH#xlJU50T8qW}QkXHAfR$qB1rX{?_%EFuHx#9!5Pv z)YL>b3(q849jEQ6*kARHWU-^wlO+T4Cs#Dk_4Cd2jj|3_d~c~Af2}~c*&s;v+-fgg4;zK6q0;%C>E#%}RgL%jeFK z#m#A1uh|B%T|yVbxNo2EAPwNJ4bjsB(71k9m;_vsH};A6msEQBnT@3G<1US5VyOa| zZifX|)}9C*&_ngeef2w~tCzrpe5&}wg6@1tp4$0vKj5_A@$2UjAlF}%{27(~Uu0B& z;rWLM_y2RW#0@^)%`8To46)8P*rtNsJBcV&0Q4ew&xUGafbg-4_s-kG7eCFZ^g%zx zUseC2z+V*jf26>u#Nd_RR?ZX-U&QKlf?sUT+*WqFDqL`7(Y41iu&wpP5)9BK4kk6^ zvX@@!Em~e!t5UOzDxyx7C>uG>@-lCxYl?0#P(1RoQ4EFnDTLq@lw&z|=^d?rHbGDoYKht^Wm6Md|$W)F61kF|K z_*-@QAwS&3_N#BryCd+8t`EiE>_58t+$rd`+~f9*LE6M#K+skxHH$Kd5QSi;k1meq3pe>HRN|4b+h7~jrHWM`Xe!$`3b6-O9h?hHq6 zc}Xe9T?|7Fxr{#UGp4z`a%LF^(Pb4o8mHKpk+3OgbDcZWK^HmEaeg^Jzdycz!}G)Q zdA`r*d5F6i-W84liDU@_ZHTl;ZYf@-nTG#puN#c-Ftm6hH<&T#4c9E$6JkgF` z+k{=jq9>dz)8h4N2Ni*@ukRr{1s`RxL3$B*k<~;=wJz*cL*pEwBP9NUVI0JGh;z3$ zoA!8^eN8hwwA5~%@E{8cScHE|SPqz1F#B z5EEYiw7uiAof@!c`^60l_HeL}-c(^XI?I5+A_C>c>JyXqv9ko)GqN%jb*ZI}8Kt8< zBfS5d%$iqs(&*r?>}hxMqm5Q`1R9a+IOHo_Gl~oY^ocU?nh6016@k6}shBLx49frK zzE=vb65~8#RFLjBuHui*m`Xi(RD^$bqV8=z7-~dbaMC6m+fp!H@|zBxDp=Wv*y-G! zj97uOY>!~RAWCYpqrq(JC<0jQgK#DF}Jg0UQD3hup%F-+X`Htx3%f*)^c@rgRNWq z_6X_6Tc4yw&>-#?H?k$!yA#zn-_Ef+97$>!{rBw{ORzaHP5c4!=GewUz4ni$0?7o$ zKzRk>swsVW@G5SsF@90)92b{8C1)&qr{C!;fFT?KQN7p4_6z z^`STsMUPp19@@R=opOD-4#kJpJww zUGZ}*cftoqmh<+-BwQwS!s&S15)I;_uaQH>=8%mx#ivJ16o7bTAR$otulA!TbeVb$ zC*o|Fs}sNOQl1-k@CO47Pc3hi3RsU~@M;OVk-iTam&=(SRC~wdP7@1+S*2zwpPLi^ zho&=rB&lupQ>T*~7X6cYRi8(Y+joFwUzk|!GL36NY8~Cz$03)a$18L=n>Qw}n{x(q z(7lr+a~kS7Ox@iEZr8*vI?OLsc-ftp7ZGK^aDdDb^crQW^p95I+)hcY9#nIcH@Dvxo99goNkJ%l6)b@&+cr2Tl>YU^=Dg}l zyp;C9_~t$h4k@xw>{==6I$N-1O4fpcD{Y6mKS{b4nM$Knn?ofje8+sn{WYH)4C~`b zI7Cwf4%mpdPnHF%B9}zA#6U?f6#->+KTQ|~+$y;D9U!axc?U!1Kg$yg2BNNDFrMWD zh~Q#Mdb;S##c?@gQEeHBp4HM~C~aw@2+T~Lb)5+r^G~l?Fc}EA-|swi4onOQzh06; zYOS7vP4ZG7c(ca}aYqKu3ukTAAnl+M1C`t>*~ae(fR}Jk!Idh2n9I2s`z)i!JpD!3 zfq`}kmVIzhP>Q}?m8fBHYv3|Vn5N%P8rQ@!<+Ed{ZbdAF4yfc7DaALy0g#|4KEdMa z-;lL5!Gt{BWS<%9Z%>7tFP;vKp{2f*H`6kA-!3wm%y|FNJXfw)UG;#KnREab&DI*5 zYFeAkg5xWL?6=@730%Z&LN`p-@jlTYHt1ug8JuOBDAOVbK3;d_$YE%V%cj|$U*p}` z^W7V1bo-j<;jfImI`B}g&Q0j7nF{D3(D=Rg&$wrWddDj~Y#9gwt^_)5r3;|bR%IS8 vlUHy;X8`%XH_Z(<7)bnjr`Zq|6jw4OHGoOSHq+t@ca1Rpr4ru literal 0 HcmV?d00001 diff --git a/docs/en/howto/navigation-menu.md b/docs/en/howto/navigation-menu.md new file mode 100644 index 000000000..9ee556396 --- /dev/null +++ b/docs/en/howto/navigation-menu.md @@ -0,0 +1,59 @@ +#How to create a navigation menu + +To create a navigation menu, we will create a new template file: Navigation.ss. Put this file inside the templates/Includes folder in your theme. + + :::ss + + +To include this file in your main template, use the 'include' control code. The include control code will insert a template from the Includes folder into your template. The code for including our navigation menu looks like this: + + :::ss + <% include Navigation %> + +Add this to the templates/Page.ss file where you want the menu to render. The template code in Menu1.ss is rendered as an unordered list in HTML; let's break down this file to see how this works. + +The first and last lines of the file are HTML tags to open and close an unordered list. + + :::ss + + +Line 2 and 4 use a template code called a loop. A loop iterates over a DataObjectSet; for each DataObject inside the set, everything between the <% loop %> and <% end_loop %> tags are repeated. Here we iterate over the Menu(1) DataObjectSet and this returns the set of all pages at the top level. (For a list of other controls you can use in your templates, see the [templates page](../reference/templates) .) + + :::ss + + +Line 3 is where we insert the list item for each menu item. It is sandwiched by the list item opening and closing tags,
  • and
  • . Inside we have a link, using some template codes to fill in the information for each page: + +* $Link – the link to the page +* $Title – the full title of the page (this is a field in the CMS) +* $MenuTitle – the menu title of the page (this is a field in the CMS) +* $LinkingMode – which returns one of three things used as a CSS class to style each scenario differently. + * current – this is the page that is currently being rendered + * section – this page is a child of the page currently being rendered + * link – this page is neither current nor section + + diff --git a/docs/en/howto/simple-contact-form.md b/docs/en/howto/simple-contact-form.md new file mode 100644 index 000000000..76fb35699 --- /dev/null +++ b/docs/en/howto/simple-contact-form.md @@ -0,0 +1,116 @@ +# How to make a simple contact form + +To make a contact form, begin by making a page type for the form to live on – we don't want to see the contact form on every page. Here we have the skeleton code for a ContactPage page type: + + :::php + setTo('siteowner@mysite.com'); + $email->setFrom($data['Email']); + $email->setSubject("Contact Message from {$data["Name"]}"); + + $messageBody = " +

    Name: {$data['Name']}

    +

    Website: {$data['Website']}

    +

    Message: {$data['Message']}

    + "; + $email->setBody($messageBody); + $email->send(); + return array( + 'Content' => '

    Thank you for your feedback.

    ', + 'Form' => '' + ); + } + +Any function that receives a form submission takes two arguments: the data passed to the form as an indexed array, and the form itself. In order to extract the data, you can either use functions on the form object to get the fields and query their values, or just use the raw data in the array. In the example above, we used the array, as it's the easiest way to get data without requiring the form fields to perform any special transformations. + +This data is used to create an email, which you then send to the address you choose. + +The final thing we do is return a 'thank you for your feedback' message to the user. To do this we override some of the methods called in the template by returning an array. We return the HTML content we want rendered instead of the usual CMS-entered content, and we return false for Form, as we don't want the form to render. + + +##How to add form validation + +All forms have some basic validation built in – email fields will only let the user enter email addresses, number fields will only accept numbers, and so on. Sometimes you need more complicated validation, so you can define your own validation by extending the Validator class. + +The Sapphire framework comes with a predefined validator called 'RequiredFields', which performs the common task of making sure particular fields are filled out. Below is the code to add validation to a contact form: + + function Form() { + $fields = new FieldSet( + new TextField('Name'), + new EmailField('Email'), + new TextareaField('Message') + ); + + $actions = new FieldSet( + new FormAction('submit', 'Submit') + ); + $validator = new RequiredFields('Name', 'Message'); + + return new Form($this, 'Form', $fields, $actions, $validator); + } + +We've created a RequiredFields object, passing the name of the fields we want to be required. The validator we have created is then passed as the fifth argument of the form constructor. If we now try to submit the form without filling out the required fields, JavaScript validation will kick in, and the user will be presented with a message about the missing fields. If the user has JavaScript disabled, PHP validation will kick in when the form is submitted, and the user will be redirected back to the Form with messages about their missing fields. + diff --git a/docs/en/tutorials/1-building-a-basic-site.md b/docs/en/tutorials/1-building-a-basic-site.md index 7cf7b5282..301821cfd 100644 --- a/docs/en/tutorials/1-building-a-basic-site.md +++ b/docs/en/tutorials/1-building-a-basic-site.md @@ -97,8 +97,7 @@ You should ensure the URL for the home page is *home*, as that's the page Silver ## Templates All pages on a SilverStripe site are rendered using a template. A template is an file -with a special `*.ss` file extension, containing HTML augmented with some -control codes. Because of this, you can have as much control of your site’s HTML code as you like. +with a special `*.ss` file extension, containing HTML augmented with some control codes. Through the use of templates, you can have as much control over your site’s HTML code as you like. In SilverStripe, these files and others for controlling your sites appearance – the CSS, images, and some javascript – are collectively described as a theme. Themes live in the 'themes' folder of your site. Every page in your site has a **page type**. We will briefly talk about page types later, and go into much more detail in tutorial two; right now all our pages will be of the page type *Page*. When rendering a page, SilverStripe will look