bezpečnost https://dev.drupal.cz/ cs Podrobte webové stránky analýze během pár minut https://dev.drupal.cz/clanky/podrobte-webove-stranky-analyze-behem-par-minut <span class="field field--name-title field--type-string field--label-hidden">Podrobte webové stránky analýze během pár minut</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Na webové stránky se lze dívat z mnoha pohledů a kromě subjektivního designu lze prakticky každý číselně vyhodnotit. V článku se dozvíte, jaké metriky jsou důležité pro vyhodnocení webu. Tyto metriky mají dopad jak na <strong>prožitek vašeho návštěvníka</strong>, tak v mnoha případech i na <strong>výsledky ve vyhledávačích</strong>. Ty už nějakou dobu berou v potaz jak podporu responzivního chování, tak i rychlost webu.</p> <h2>Rychlost načítání webu</h2> <p>Rychlé načítání webu je čím dál důležitější vlastnost. Pomalé weby jsou znevýhodňovány ve výsledcích vyhledávání, pomalé načítání odrazuje návštěvníky od kliknutí na další článek, stahování velkých objemů dat otráví každého mimo 4G signál. Jak zjistíte, jak si vedete a co můžete zlepšit? Zkuste následující online nástroje:</p> <ul><li><a href="https://gtmetrix.com/">https://gtmetrix.com/</a></li> <li><a href="https://tools.pingdom.com/">https://tools.pingdom.com/</a></li> <li><a href="https://www.webpagetest.org/">https://www.webpagetest.org/</a></li> </ul><h2>Obrázky</h2> <p>Bez obrázků se dnes moc webů neobejde. Tlak na 4k monitory a retina displeje nás vývojáře nutí používat obrázky s vysokým rozlišením. Ty by se ale neměly načítat zbytečně i pro menší zařízení. Obrázky taktéž můžete před umístěním na web převést do správného formátu a zkomprimovat. Zjistěte, zda máte prostor pro optimalizaci vašich obrázků: <a href="https://webspeedtest.cloudinary.com/">https://webspeedtest.cloudinary.com/</a> Zjistíte, že <strong>s Webp formátem dokážete ušetřit až 70 % velikosti obrázku</strong>. S využitím vektorové grafiky (SVG) se dostanete ještě na nižší čísla a ještě vás ušetří trápení s responzivním chováním.</p> <h2>Mobilní responzivita</h2> <p>Responzivní chování je komplexní UX analýza, kterou lze těžko vyhodnotit bez reálného uživatelského testování. I tak ale Google přišel se svým hodnotícím algoritmem, který můžete vyzkoušet zde: </p> <ul><li><a href="https://search.google.com/test/mobile-friendly">https://search.google.com/test/mobile-friendly</a></li> </ul><h2>Bezpečnost</h2> <p>Otestovat bezpečnost webových stránek online není vůbec jednoduché. Můžete si vyzkoušet penetrační testy (např. <a href="https://pentest-tools.com/cms-vulnerability-scanning/drupal-scanner">https://pentest-tools.com/cms-vulnerability-scanning/drupal-scanner</a>), ale zpravidla se bude jednat o placené služby. </p> <p>Využijte ale základní <strong>test hlaviček požadavků</strong>, které se odesílají: <a href="https://securityheaders.com/">https://securityheaders.com/</a>. Pokud získáte A hodnocení, máte velkou pravděpodobnost, že i ostatní aspekty bezpečnosti budou ošetřeny.</p> <h2>SEO</h2> <p>Obdobných online testovacích nástrojů SEO nastavení vašeho webu naleznete na internetu spousty, proto zde žádný nebudu upředňostňovat. Musíte ale počítat s faktem, že tyto nástroje <strong>hodnotí pouze technické on-page faktory</strong>, jako správně uvedené tagy (nechybí H1, Page Title, Page Description,...). V tuto chvíli nevím o online nástroji, který by plnohodnotně bral v potaz i váš business, analýzu klíčových slov, obsah webu, konkurenci, chování návštěvníků z měřících nástrojů. Pokud o nějakém víte, podělte se v komentáři.</p> <h2>Výkon PHP aplikace - pro pokročilé</h2> <p>Pokud disponujete vyšperkovaným front-endem, kvalitním hostingem a stále trpíte při každém načtení stránky, můžete zkusit analyzovat i PHP back-end aplikace pomocí <a href="https://blackfire.io/">https://blackfire.io/</a>. Díky tomuto nástroji jste i v neplacené verzi schopni zjistit, co brzdí načítání celé stránky.</p> <h2>Drupal moduly</h2> <p>Když už jsme na Drupal.cz, uvedu i pár analytických modulů přímo pro Drupal, které vám pomohou i v rámci administrace webu.</p> <ul><li><a href="https://www.drupal.org/project/seo_checklist">https://www.drupal.org/project/seo_checklist</a></li> <li><a href="https://www.drupal.org/project/hacked">https://www.drupal.org/project/hacked</a></li> <li><a href="https://www.drupal.org/project/be_sure">https://www.drupal.org/project/be_sure</a></li> <li><a href="https://www.drupal.org/project/production_checklist">https://www.drupal.org/project/production_checklist</a></li> <li><a href="https://www.drupal.org/project/google_analytics_reports">https://www.drupal.org/project/google_analytics_reports</a></li> </ul><h2>Závěr</h2> <p>Metriky ve webovém prostředí se mění téměř ze dne na den. Co včera byla vyhovující, zítra může způsobit potíže. Především pokud se bavíme o bezpečnosti. Používáte další online nástroje pro analýzu webových stránek? Máte oblíbené další moduly, které vám třeba napoví, na co se soustředit? Dejte vědět v komentářích.</p> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="Zobrazit profil uživatele." href="/user/hsponner" class="username">hsponner</a></span> <span class="field field--name-created field--type-created field--label-hidden">So, 09/15/2018 - 12:36</span> <div class="field field--name-field-tags field--type-entity-reference field--label-hidden field__items"> <div class="field__item"><a href="/stitky/bezpecnost" hreflang="cs">bezpečnost</a></div> <div class="field__item"><a href="/stitky/drupal" hreflang="cs">drupal</a></div> <div class="field__item"><a href="/stitky/analyza" hreflang="cs">analýza</a></div> <div class="field__item"><a href="/stitky/front-end" hreflang="cs">front-end</a></div> <div class="field__item"><a href="/stitky/pro-vyvojare" hreflang="cs">pro vývojáře</a></div> </div> <section class="field field--name-field-comments-article field--type-comment field--label-above comment-wrapper"> <h2 class="title">Komentáře</h2> <article data-comment-user-id="101" id="comment-3431" class="comment js-comment"> <mark class="hidden" data-comment-timestamp="1540208066"></mark> <footer class="comment__meta"> <article class="profile"> <div class="field field--name-field-dcz-user-image field--type-image field--label-hidden field__item"> <img loading="lazy" src="/sites/default/files/styles/thumbnail/public/users/avatar.jpg?itok=2sSpLghO" width="100" height="100" alt="siva01" class="image-style-thumbnail" /> </div> </article> <p class="comment__submitted">Napsal uživatel <a title="Zobrazit profil uživatele." href="/user/siva01" class="username">siva01</a> dne Po, 10/22/2018 - 13:34</p> <span class="permalink"><a href="/comment/3431#comment-3431" hreflang="cs">Trvalý odkaz</a></span> </footer> <div class="content"> <h3><a href="/comment/3431#comment-3431" class="permalink" rel="bookmark" hreflang="cs">Nejen marketing</a></h3> <div class="clearfix text-formatted field field--name-comment-body field--type-text-long field--label-hidden field__item"><p>Docela tu chybí <a href="https://www.marketingminer.com/cs/miners">MarketingMinner</a>. Nejen, že to umí analyzovat cizí weby, ale i ten váš a to včetně analýzy klíčových slov a jejich pozic. Minerů je tam hned několik, takže si každý najde ten svůj. </p></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=3431&amp;1=default&amp;2=cs&amp;3=" token="NmAD-FbSAyGy1ulWbfDWvB6rhicqycpE2G01e7e4moY"></drupal-render-placeholder> </div> </article> <h2 class="title comment-form__title">Přidat komentář</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=1431&amp;2=field_comments_article&amp;3=comment_article" token="gUkve9CDPSkfDkDB8GK-Q5JDCHX3m623GIn4ixq-xIA"></drupal-render-placeholder> </section> Sat, 15 Sep 2018 10:36:33 +0000 hsponner 1431 at https://dev.drupal.cz Důležitá bezpečnostní oprava pro Drupal 6, 7 i 8 https://dev.drupal.cz/clanky/dulezita-bezpecnostni-oprava-pro-drupal-6-7-i-8 <span class="field field--name-title field--type-string field--label-hidden">Důležitá bezpečnostní oprava pro Drupal 6, 7 i 8</span> <div class="clearfix text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p><span class="tlid-translation translation">Ve středu 28. 3. 2018 mezi 18:00 a 19:30 hodin, bude vydána bezpečnostní aktulalizace pro Drupal 7.x, 8.3.x, 8.4.xa 8.5.x. proti vysoce kritické zranitelnosti zabezpečení. Drupal security team vás vyzývá, abyste si rezervovali čas pro aktualizace v této době, protože exploity se mohou objevit během několika hodin nebo dnů. Oznámení o vydání zabezpečení se zobrazí na stránce Drupal.org a můžete také sledovat <a href="/bezpecnost-drupalu">Twitter feed Security týmu</a>. </span></p> <p><span class="tlid-translation translation">Ačkoliv Drupal 8.3.x a 8.4.x již nejsou podporovány a na nepodporované verze obvykle nejsou poskytovány bezpečnostní aktualizace, vzhledem k možné závažnosti tohoto problému budou vydány opravy i pro weby, které dosud neměly možnost aktualizovat na verzi 8.5.0. Bezpečnostní tým Drupal důrazně doporučuje následující:</span></p> <ul><li><span class="tlid-translation translation">Stránky běžící na 8.3.x by se měly okamžitě aktualizovat na verzi 8.3.x, která bude poskytnuta v oznámení, a poté naplánovat aktualizaci na nejnovější verze 8.5.x v následujícím měsíci.     </span></li> <li><span class="tlid-translation translation">Stránky běžící na 8.4.x by se měly okamžitě aktualizovat na verzi 8.4.x, která bude poskytnuta v oznámení, a poté naplánovat aktualizaci na nejnovější verze 8.5.x v následujícím měsíci.     </span></li> <li><span class="tlid-translation translation">Stránky běžící na 7.x nebo 8.5.x mohou okamžitě aktualizovat, jakmile bude oznámení vydáno za použití normálního postupu.</span></li> </ul><p><span class="tlid-translation translation">Aktualizace nebude vyžadovat update databáze.</span></p> <p><span class="tlid-translation translation">Celá zpráva v originálním znění: </span><a href="https://www.drupal.org/psa-2018-001">https://www.drupal.org/psa-2018-001</a></p> <blockquote class="twitter-tweet" data-lang="cs"> <p dir="ltr" lang="en" xml:lang="en">Critical Drupal core update for 7 and 8 will be released on Wednesday March 28th, 2018 <a href="https://t.co/u7OJQ4apFa">https://t.co/u7OJQ4apFa</a></p> — Drupal Security (@drupalsecurity) <a href="https://twitter.com/drupalsecurity/status/976548662447935488?ref_src=twsrc%5Etfw">21. března 2018</a></blockquote> <script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script><h3>A co Drupal 6?</h3> <p>Zmíněná chyba se týká i již nepodporované verze Drupal 6. Opravy na tuto verzi budou poskytovány prostřednictvím některého LTS (Long Term Support – dlouhodobá podpora) partnera.</p> <blockquote class="twitter-tweet" data-lang="cs"> <p dir="ltr" lang="en" xml:lang="en">The PSA also effects Drupal 6. If you need support ongoing support for Drupal 6, please contact a D6LTS vendor. <a href="https://t.co/mOleOddJGq">https://t.co/mOleOddJGq</a></p> — Drupal Security (@drupalsecurity) <a href="https://twitter.com/drupalsecurity/status/976828727048003585?ref_src=twsrc%5Etfw">22. března 2018</a></blockquote> <script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="Zobrazit profil uživatele." href="/user/petr" class="username">petr</a></span> <span class="field field--name-created field--type-created field--label-hidden">Pá, 03/23/2018 - 17:06</span> <div class="field field--name-field-tags field--type-entity-reference field--label-hidden field__items"> <div class="field__item"><a href="/stitky/security" hreflang="cs">security</a></div> <div class="field__item"><a href="/stitky/bezpecnost" hreflang="cs">bezpečnost</a></div> </div> <section class="field field--name-field-comments-article field--type-comment field--label-above comment-wrapper"> <h2 class="title">Komentáře</h2> <article data-comment-user-id="6" id="comment-186" class="comment js-comment"> <mark class="hidden" data-comment-timestamp="1523568396"></mark> <footer class="comment__meta"> <article class="profile"> <div class="field field--name-field-dcz-user-image field--type-image field--label-hidden field__item"> <img loading="lazy" src="/sites/default/files/styles/thumbnail/public/users/radimklaska_full.jpg?itok=y1YrzzhN" width="99" height="100" alt="Radim Klaška" class="image-style-thumbnail" /> </div> </article> <p class="comment__submitted">Napsal uživatel <a title="Zobrazit profil uživatele." href="/user/6" class="username">radimklaska</a> dne Čt, 04/12/2018 - 23:26</p> <span class="permalink"><a href="/comment/186#comment-186" hreflang="cs">Trvalý odkaz</a></span> </footer> <div class="content"> <h3><a href="/comment/186#comment-186" class="permalink" rel="bookmark" hreflang="cs">Ukázka zneužití</a></h3> <div class="clearfix text-formatted field field--name-comment-body field--type-text-long field--label-hidden field__item"><p>Uncovering Drupalgeddon 2 <a href="https://research.checkpoint.com/uncovering-drupalgeddon-2/">https://research.checkpoint.com/uncovering-drupalgeddon-2/</a> via <a href="https://pari.cz/">Petr Parimucha</a></p> </div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=186&amp;1=default&amp;2=cs&amp;3=" token="AmMOtjrHtTVy5y_z3OFVgGvvWaVKU8J-2y-b1CobaHs"></drupal-render-placeholder> </div> </article> <article data-comment-user-id="0" id="comment-266" class="comment js-comment by-anonymous"> <mark class="hidden" data-comment-timestamp="1525272036"></mark> <footer class="comment__meta"> <article class="profile"> <div class="field field--name-field-dcz-user-image field--type-image field--label-hidden field__item"> <img loading="lazy" src="/sites/default/files/styles/thumbnail/public/default_images/user-placeholder_0.png?itok=nOY2lA1j" width="100" height="100" alt="Drupal user" class="image-style-thumbnail" /> </div> </article> <p class="comment__submitted">Napsal uživatel <span>Radek (neověřeno)</span> dne St, 05/02/2018 - 16:40</p> <span class="permalink"><a href="/comment/266#comment-266" hreflang="cs">Trvalý odkaz</a></span> </footer> <div class="content"> <h3><a href="/comment/266#comment-266" class="permalink" rel="bookmark" hreflang="cs">Nakažený web</a></h3> <div class="clearfix text-formatted field field--name-comment-body field--type-text-long field--label-hidden field__item"><p>Dobrý den,</p> <p>jak správně postupovat, když web byl nakažený. Provedl jsem upgrade na nejnovější verzi Drupal 8, ale bohužel server je stále vytížený na 96%. V root složce drupal 8 mám muhstik.sh  a i drupal.php1 až  drupal.php30, po vymazání se však zobrazují soubory stále. </p> <p>Děkuji za odpověď.</p></div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=266&amp;1=default&amp;2=cs&amp;3=" token="jKxfTIxOdmWS8Kk6ogkihqIqsjPH3F5FRsdng660DKU"></drupal-render-placeholder> </div> </article> <h2 class="title comment-form__title">Přidat komentář</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=426&amp;2=field_comments_article&amp;3=comment_article" token="D3CJIVfO89IhksicF-M-kykR2GnAUvDHs6X8GG9a9iI"></drupal-render-placeholder> </section> Fri, 23 Mar 2018 16:06:12 +0000 petr 426 at https://dev.drupal.cz Aktualizace Drupalu https://dev.drupal.cz/navody/aktualizace-drupalu <span class="field field--name-title field--type-string field--label-hidden">Aktualizace Drupalu</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="Zobrazit profil uživatele." href="/user/evar" class="username">EvaR</a></span> <span class="field field--name-created field--type-created field--label-hidden">Út, 02/20/2018 - 09:47</span> <div class="field field--name-field-paragraphs field--type-entity-reference-revisions field--label-hidden field__items"> <div class="field__item"> <div class="paragraph paragraph--type--dcz-para-content paragraph--view-mode--default"> <div class="paragraph-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><p class="lead">Má-li být váš projekt bezpečný a dlouhodobě životaschopný, měli byste jej nejen dobře naplánovat a postavit, ale také udržovat, což obnáší především pravidelné aktualizace softwaru. </p> <p><strong>Aktualizace (update) </strong>je nahrazení softwaru novější verzí a provedení případných souvisejících databázových změn, a to v rámci stávajícího “major release”, tj. Drupal 8.3.6 &gt; 8.3.7, nebo 8.3.6 &gt; 8.4.0 apod. (Naproti tomu <strong>upgrade</strong> je přechod z Drupalu 6.x &gt; 7.x nebo 7.x &gt; 8.x).<br />  </p> </div> </div> </div> </div> <div class="field__item"> <div class="paragraph paragraph--type--dcz-para-content paragraph--view-mode--default"> <div class="paragraph-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><h2>Kdy aktualizovat</h2> <p>Nelze tvrdit, že musíte mít na webu vždy nejaktuálnější verze všech modulů či témat vzhledu. Někdy je dobrý důvod k tomu, abyste se drželi verze starší - třeba proto, že v novější verzi modulu se s novou funkcionalitou objeví problém, který je třeba dořešit. Existuje však situace, kdy byste váhat neměli: v momentě, kdy vyjde <strong>bezpečnostní aktualizace</strong> - tj. nová verze, která opravuje bezpečnostní chybu. (Úvahu nad tím, zda a v jakém případě lze některé bezpečnostní aktualizace vynechat, si necháme do jiného textu - zde se chceme věnovat procesu aktualizace spíše z technického hlediska). Ať už se jedná o bezpečnostní nebo jinou aktualizaci, postup je vždy stejný.<br />  </p></div> </div> </div> </div> <div class="field__item"> <div class="paragraph paragraph--type--dcz-para-content paragraph--view-mode--default"> <div class="paragraph-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><h2>Než začnete s aktualizací</h2> <ol><li>Samozřejmostí by mělo být, že aktualizace neprovádíte rovnou v produkčním, nýbrž ve <strong>vývojovém prostředí</strong>. Teprve když proběhne vše v pořádku a podle vašich představ, přenášíte změny na produkční web.</li> <li>Přihlaste se na web jako uživatel s oprávněním <strong>Spravovat aktualizace softwaru</strong> (<strong>Administer software updates</strong>).</li> <li><strong>Zjistěte, co vše chcete aktualizovat</strong>. Nehledě na to, že určitě odebíráte bezpečnostní novinky z Drupal.org (pokud ne, tak <a href="https://www.drupal.org/security">začněte</a>), dostupné aktualizace zjistíte jedním z následujících postupů: <ol type="a"><li>pomocí <strong>composeru</strong>: <code>composer outdated</code></li> <li>pomocí <strong>drushe</strong>: <code>drush ups</code> (zkrácená verze příkazu <code>drush pm-updatestatus</code>)</li> <li>pomocí modulu <strong>Update Manager</strong>, na adrese <code>/admin/reports/updates</code> (modul je součástí jádra).</li> </ol></li> <li><strong>Přečtěte si poznámky</strong> k vydání jádra, modulů i témat, které chcete aktualizovat. Může se stát, že některá z nových verzí např. vyžaduje předchozí aktualizaci jiného modulu. </li> <li>Doporučení: v závislosti na použitých technologiích se ujistěte, že budete schopni z logů aplikací pohodlně (i zpětně) získat <strong>přehled o změnách, které jste provedli</strong>. Pokud tomu tak není, veďte si seznam prováděných změn.<br /> Jestliže některé části softwaru ponecháte záměrně ve stávající verzi (tj. aktualizaci vynecháte), je šikovné poznamenat si důvod (příště o tom nebudete muset znovu přemýšlet, dohledávat “issues” apod.).</li> <li><strong>Přepněte web do režimu údržby</strong> (<code>drush sset system.maintenance_mode 1</code>, nebo na adrese <code>/admin/config/development/maintenance</code>, následně vyčistěte cache: <code>drush cr</code>).</li> <li><strong>Zálohujte celý váš projekt </strong>tak, abyste ho v případě potřeby dokázali ze zálohy plně obnovit. Je tudíž potřeba zálohovat všechny <strong>soubory</strong>, které se mohou při aktualizaci změnit, i <strong>databázi</strong>. Nespoléhejte na zálohy webhostingu či jiné automatické zálohy - potřebujete “čerstvou” zálohu před aktualizací. Pokud používáte composer a verzovací systém, proveďte commit a push také pro soubory <strong><code>composer.json</code></strong> a <strong><code>composer.lock</code></strong>. (Pro úplné začátečníky: alespoň napoprvé otestujte, že je vaše záloha funkční - tj. pokuste se zprovoznit ji někde paralelně, např. na testovací doméně).<br /> Pozn.: Pokud web budete aktualizovat pomocí drushe, pak můžete počítat s tím, že drush aktualizované moduly automaticky zazálohuje, takže stačí zazálohovat databázi, např. pomocí příkazu <code>drush sql-dump &gt; cesta/zaloha.sql</code>.</li> </ol></div> </div> </div> </div> <div class="field__item"> <div class="paragraph paragraph--type--dcz-para-content paragraph--view-mode--default"> <div class="paragraph-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><h2>Automatická aktualizace pomocí composeru</h2> <p>(Pokud nejste zvyklí používat <a href="https://www.drupal.org/docs/develop/using-composer/using-composer-with-drupal">composer</a>, aktualizace by neměla být vaší první zkušeností s tímto nástrojem.)</p> <p><strong>Pro každý modul, který chcete aktualizovat (vývojové prostředí):</strong></p> <ol><li><code>composer update drupal/module_name --with-dependencies</code><br /> (vs. <strong>NEdoporučuje se</strong>: <code>composer update --with-dependencies</code>)</li> <li>provedení potřebných aktualizací v databázi: <code>drush updb</code></li> <li>vyprázdnění cache: <code>drush cr</code></li> <li>Pokud máte změny v souborech<code> .htaccess</code>, <code>composer.json</code> nebo <code>robots.txt</code> oproti původním originálům, aplikujte je znovu na aktualizované soubory. Někdy jsou změny také v souboru <code>settings.php</code> (informace najdete v poznámkách k vydání v příslušné verzi jádra). V tom případě musíte vlastní změny v <code>settings.php</code> rovněž aplikovat ručně.</li> </ol><p><strong>Kontrola po aktualizaci (vývojové prostředí):</strong></p> <ol><li>zkontrolujte hlášení stavu (<code>/admin/reports/status</code>)</li> <li>zkontrolujte fungování webu z pohledu administrátora</li> <li>přepněte z režimu údržby do běžného režimu  (<code>drush sset system.maintenance_mode 0</code>, nebo <code>/admin/config/development/maintenance</code>, následně <code>drush cr</code>).</li> <li>zkontrolujte fungování webu webu z pohledu anonymního uživatele, případně dalších rolí.</li> </ol><p><strong>Přenesení změn na produkční prostředí:</strong></p> <ol><li>ujistěte se, že jste na produkci přenesli oba soubory<code> composer.json</code> i <code>composer.lock</code></li> <li>Přepněte web do režimu údržby (<code>drush sset system.maintenance_mode 1</code>)</li> <li>proveďte <code>composer install --no-dev</code><br /> (<strong>NE</strong> <code>composer update</code>)</li> <li>Proveďte aktualizaci databáze a aktualizaci entit: <code>drush updb</code>, <code>drush entup</code></li> <li>Vymažte cache <code>drush cr</code></li> <li>Přepněte web do provozního režimu (<code>drush sset system.maintenance_mode 0</code>)</li> </ol></div> </div> </div> </div> <div class="field__item"> <div class="paragraph paragraph--type--dcz-para-content paragraph--view-mode--default"> <div class="paragraph-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><h2>Automatická aktualizace pomocí Drushe</h2> <ol><li>Aktualizace jádra: <code>drush up drupal</code></li> <li>Aktualizace jednotlivých modulů: <code>drush up module_name</code></li> <li>Provedení databázových změn a změn entit: <code>drush updb, drush entup</code></li> <li>Pokud jste prováděli změny v souborech<code> .htaccess</code>, <code>composer.json</code> nebo <code>robots.txt</code>, aplikujte je ručně. Někdy jsou změny také v souboru <code>settings.php </code>(informace najdete v poznámkách k vydání v příslušné verzi jádra). V tom případě musíte vlastní změny v <code>settings.php</code> rovněž aplikovat ručně.</li> </ol><p><strong>Kontrola po aktualizaci</strong> je stejná, jako v případě composeru.<br />  </p></div> </div> </div> </div> <div class="field__item"> <div class="paragraph paragraph--type--dcz-para-content paragraph--view-mode--default"> <div class="paragraph-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><h2>Manuální aktualizace (nedoporučuje se)</h2> <ol><li>V příkazové řádce (shell) přejděte do adresáře s instalací Drupalu:<br /><code>cd /path/to/your/installation</code></li> <li>Jestliže jste prováděli změny v souborech <code>.htaccess</code>, <code>composer.json</code> nebo <code>robots.txt</code>, ujistěte se, že máte jejich zálohu.</li> <li>Odstraňte adresáře <code>/core</code> a <code>/vendor</code> a dále všechny soubory v kořenovém adresáři webu, kromě těch, které jste přidali ručně:<br /><code>rm -rf core vendor</code><br /><code>rm -f *.* .*</code></li> <li>Stáhněte si nové verze jádra, modulů či témat, které chcete aktualizovat. Novou verzi jádra rozbalte a překopírujte do kořenového adresáře webu. V případě, že aktualizujete contrib moduly nebo témata, nahraďte celý původní adresář modulu/témata vzhledu novým modulem/tématem (původní adresář smažte, může obsahovat soubory, které se v nové verzi nevyskytují).</li> <li>Pokud jste prováděli změny v souborech <code>.htaccess</code>, <code>composer.json</code> nebo <code>robots.txt</code>, aplikujte je ručně. Někdy jsou změny také v souboru <code>settings.php</code> (informace najdete v poznámkách k vydání v příslušné verzi jádra). V tom případě musíte vlastní změny v <code>settings.php</code> rovněž aplikovat ručně.</li> <li>Spusťte aktualizaci databáze na adrese <code>VAS_WEB/update.php</code>.</li> </ol><p><strong>Proveďte kontrolu webu</strong> (viz postup pro composer).<br />  </p></div> </div> </div> </div> <div class="field__item"> <div class="paragraph paragraph--type--dcz-para-content paragraph--view-mode--default"> <div class="paragraph-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><p><em>Pozn. v širším redakčním okruhu jsme se zcela neshodli na tom, zda by nebylo vhodnější pro Drupal 8 striktně razit pouze použití composeru. Osobně se stále přikláním k <a href="https://www.drupal.org/docs/8/update/updating-drupal-8-overview-of-options">"rozcestníku" uveřejněném na Drupal.org</a>, kde se composer doporučuje zkušenějším uživatelům. Záleží samozřejmě i na tom, jaký projekt spravujete, nakolik "future friendly" se cítíte a jak rychle se chcete učit. Vítám názory a zkušenosti v komentářích.</em></p> </div> </div> </div> </div> <div class="field__item"> <div class="paragraph paragraph--type--dcz-para-content paragraph--view-mode--default"> <div class="paragraph-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><p><em><strong>Autor:</strong> Eva Rázgová</em></p> <p><em><strong>Obsahová revize textu:</strong> Martin Klíma, Petr Illek</em></p> <p><em><strong>Úvodní obrázek:</strong> <a href="https://unsplash.com/@toddquackenbush">Todd Quackenbush</a> (public domain license)</em></p> </div> </div> </div> </div> </div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field__label">Tags</div> <div class="field__items"> <div class="field__item"><a href="/stitky/bezpecnost" hreflang="cs">bezpečnost</a></div> <div class="field__item"><a href="/stitky/pro-zacatecniky" hreflang="cs">pro začátečníky</a></div> <div class="field__item"><a href="/stitky/update" hreflang="cs">update</a></div> <div class="field__item"><a href="/stitky/aktualizace" hreflang="cs">aktualizace</a></div> </div> </div> <div class="field field--name-field-teaser-image field--type-entity-reference field--label-above"> <div class="field__label">Teaser image</div> <div class="field__item"><a href="/media/56" hreflang="cs">Drupal Aktualizace</a></div> </div> Tue, 20 Feb 2018 08:47:16 +0000 EvaR 51 at https://dev.drupal.cz DDD - Dos and Don´ts Drupalu https://dev.drupal.cz/navody/ddd-dos-and-donts-drupalu <span class="field field--name-title field--type-string field--label-hidden">DDD - Dos and Don´ts Drupalu</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><a title="Zobrazit profil uživatele." href="/user/evar" class="username">EvaR</a></span> <span class="field field--name-created field--type-created field--label-hidden">Ne, 02/18/2018 - 09:51</span> <div class="field field--name-field-paragraphs field--type-entity-reference-revisions field--label-hidden field__items"> <div class="field__item"> <div class="paragraph paragraph--type--dcz-para-content paragraph--view-mode--default"> <div class="paragraph-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><p class="lead">Čeho se vyvarovat a jak to dělat správně. Přečtení vám zabere několik minut, ale ušetří vám dny, možná i týdny vašeho drahocenného času.</p> </div> </div> </div> </div> <div class="field__item"> <div class="paragraph paragraph--type--dcz-para-content paragraph--view-mode--default"> <div class="paragraph-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><h2>Neupravujte jádro, nahrané moduly ani témata vzhledu</h2> <p>Úprava těch částí softwaru, které jste si stáhli z Drupal.org, je <strong>zásadní chyba</strong> a v podstatě vám znemožní aktualizace (přišli byste o všechny změny), nebo z nich udělá zábavu na měsíc (než všechny změny dohledáte a znovu zapracujete).<br /> Povolené (a smysluplné) jsou pouze změny v několika málo souborech, které potřebujete změnit při instalaci či deploymentu, tak, aby systém fungoval v konkrétním prostředí. Jedná se např. o settings.php, .htaccess nebo composer.json. Pokud aktualizace jádra obsahuje změny v těchto souborech, je to uvedeno v poznámkách k vydání příslušné verze. (Do nových souborů pak zapracujete vaše existující úpravy).<br /> Jedinou <strong>výjimkou</strong>, kdy můžete upravit existující software, je <strong>vytvoření záplaty</strong>, která řeší chybu, optimálně takové záplaty, kterou poskytnete komunitě (skrze “issues” na Drupal.org).</p> <p><strong>Namísto úpravy existujících modulů pište vlastní.</strong> Existující moduly ovšem mají API (<a href="https://api.drupal.org/api/drupal">https://api.drupal.org/api/drupal</a>, plus dokumentace k jednotlivým staženým modulům), které můžete (a měli byste) - použít. Všimněte si mimo jiného, že drupal má <strong>systém hooků</strong>, které umožní vašim modulům přetížit funkcionalitu těch existujících.</p> <p>Jestliže chcete upravit <strong>vzhled</strong> (jinak než konfiguračně), máte dvě možnosti: vytvořit nové <strong>vlastní téma</strong> vzhledu, nebo vytvořit <strong>subtéma</strong> stávajícího tématu vzhledu. Obě varianty jsou správné a “plnohodnotné”, nicméně pro začátečníka bývá jednodušší začít odvození subtématu. Některá témata jsou již předpřipravena pro tvorbu subtémat a jsou v popisu označena jako <strong>base themes</strong>, často již nějaká subtémata obsahují (příkladem je téma <a href="https://www.drupal.org/project/radix">Radix</a>).</p> </div> </div> </div> </div> <div class="field__item"> <div class="paragraph paragraph--type--dcz-para-content paragraph--view-mode--default"> <div class="paragraph-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><h2>Při psaní kódu oddělujte logickou a prezentační vrstvu webu</h2> <p><strong>Prezentační vrstva</strong> je ta část, kde se vypisuje nějaký výstup. V tématu vzhledu jsou to soubory s příponou <code>html.twig</code> (tzv. <strong>šablony - templates</strong>) a obvykle jsou v podadresáři <code>templates</code>. Tato vrstva neobsahuje PHP kód, nijak nezpracovává proměnné, pouze vypisuje již předem připravená data.<br /><strong>Logická vrstva</strong> (získávání hodnoty proměnných, vytváření nových proměnných, dotazy do databáze, apod.) patří pouze do:</p> <ul><li>souboru <code>VASE_TEMA.theme</code></li> <li>vašich vlastních modulů</li> </ul><p>Tip pro začátek: určitě se podívejte na tzv. preprocess funkce, které budou odpovědí na většinu otázek, které potřebujete řešit (v <a href="https://api.drupal.org/api/drupal">API Drupalu</a> hledejte <strong>Theme system overview</strong> a pod ním <strong>Preprocessing for Template Files</strong>).</p> <p><strong>PHP kód rozhodně nepatří do žádných částí webu, které můžete uložit přes webové rozhraní.</strong> Veškeré možnosti, jak vložit PHP kód do webu skrze konfiguraci a formuláře (v Drupalu 8 jich zbylo naprosté minimum), považujte pouze za nástroj, jak rychle otestovat váš snippet. Nic takového ovšem nemá co dělat na produkčním webu.</p> <p>Co se týče <strong>javascriptu</strong>, ten má místo v určených souborech / knihovnách opět ve vlastním tématu vzhledu či vlastním modulu. Stejně jako u PHP kódu se vyvarujte pokušení vkládat jej např. do uzlů či jiných částí webu konfiguračně.<br />  </p></div> </div> </div> </div> <div class="field__item"> <div class="paragraph paragraph--type--dcz-para-content paragraph--view-mode--default"> <div class="paragraph-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><h2>Využívejte API Drupalu, dodržujte standardy a bezpečnost</h2> <p>Tento bod pochopitelně úzce souvisí s předchozím. Jednou z velkých předností Drupalu je “pořádek” a přehlednost kódu. Ať si stáhnete jakýkoli modul či téma z Drupal.org, najdete v něm společnou logiku a jako programátor se snadno zorientujete. Vděčíte za to propracovanému <a href="https://api.drupal.org/api/drupal">API</a> a <a href="https://www.drupal.org/docs/develop/standards">standardům</a> Drupalu. Držet se jich i při psaní vlastního kódu je jednoznačně nejefektivnější cesta k úspěchu.</p> <p>Samostatnou zmínku si zaslouží <a href="https://www.drupal.org/docs/develop/security"><strong>bezpečnostní standardy</strong></a>, které zahrnují instrukce pro konfiguraci webu i psaní kódu. Pravidel není mnoho a vyplatí se dodržovat je zcela striktně. Jedině tak můžete těžit z již tradičně vysoké úrovně bezpečnosti Drupalu. Smaozřejmostí by mělo být sledování (nejlépe automatický odběr) <a href="https://www.drupal.org/security">bezpečnostních aktualit</a>.<br />  </p></div> </div> </div> </div> <div class="field__item"> <div class="paragraph paragraph--type--dcz-para-content paragraph--view-mode--default"> <div class="paragraph-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><h2>Nevymýšlejte kolo - vylepšete ho</h2> <p>Na většinu otázek a problémů, na které narazíte, už v Drupalu existuje hotové řešení, obvykle v podobě modulu. Začněte tím, že ho prozkoumáte a použijete, nebo na něj navážete za pomoci jeho API. Vývojem vlastních řešení “za každou cenu” jen neefektivně pálíte čas a možná si tím přiděláváte i další zbytečnou práci (otázka kompatibility, integrace s jinými moduly, bezpečnosti) . S Drupalem dostáváte práci tisíců přispěvatelů, kteří se na tvorbě kódu podílejí, a dalších stovek špičkových vývojářů, kteří tuto práci revidují a schvalují oficiální verze ke stažení. Za této situace je lepší a zábavnější vymýšlet “vychytávky”, než znovu vyrábět základní díly. Pokud se vaše práce za čas objeví na Drupal.org., je to ten nejlepší scénář.<br />  </p></div> </div> </div> </div> <div class="field__item"> <div class="paragraph paragraph--type--dcz-para-content paragraph--view-mode--default"> <div class="paragraph-content"> <div class="clearfix text-formatted field field--name-field-content field--type-text-long field--label-hidden field__item"><p><em><strong>Autor:</strong> Eva Rázgová</em></p> <p><em><strong>Obsahová revize textu:</strong> Karel Majzlík</em></p> <p><em><strong>Úvodní obrázek:</strong> Petr Kratochvíl (public domain license)</em></p> </div> </div> </div> </div> </div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field__label">Tags</div> <div class="field__items"> <div class="field__item"><a href="/stitky/pro-zacatecniky" hreflang="cs">pro začátečníky</a></div> <div class="field__item"><a href="/stitky/bezpecnost" hreflang="cs">bezpečnost</a></div> </div> </div> <div class="field field--name-field-teaser-image field--type-entity-reference field--label-above"> <div class="field__label">Teaser image</div> <div class="field__item"><a href="/media/66" hreflang="cs">Strong current</a></div> </div> Sun, 18 Feb 2018 08:51:14 +0000 EvaR 16 at https://dev.drupal.cz