{"id":1189,"date":"2015-12-09T09:00:30","date_gmt":"2015-12-09T08:00:30","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=1189"},"modified":"2023-07-21T11:50:06","modified_gmt":"2023-07-21T09:50:06","slug":"opencms-oczami-developera-czesc-1","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/opencms-oczami-developera-czesc-1\/","title":{"rendered":"OpenCms oczami developera \u2013 cz\u0119\u015b\u0107 1"},"content":{"rendered":"\n<p>Zapewne ka\u017cdy z Was mia\u0142 w wi\u0119kszym lub mniejszym stopniu do czynienia z jak\u0105\u015b odmian\u0105 systemu zarz\u0105dzania tre\u015bci\u0105, czyli tak zwanego CMS (ang. Content Management System). Wi\u0119kszo\u015b\u0107 spotka\u0142a si\u0119 z nazwami WordPress, Drupal, Joomla. Ja chcia\u0142bym Wam przybli\u017cy\u0107, by\u0107 mo\u017ce mniej znany, jednak posiadaj\u0105cy r\u00f3wnie du\u017ce mo\u017cliwo\u015bci system OpenCms.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">GAR\u015a\u0106 FAKT\u00d3W<\/h2>\n\n\n\n<p>OpenCms jest <span lang=\"pl-PL\">oprogramowaniem <\/span>typu Open Source, dzia\u0142aj\u0105cym w oparciu o licencj\u0119 <a href=\"http:\/\/www.gnu.org\/licenses\/old-licenses\/lgpl-2.1.html\" rel=\"nofollow\" >GNU Lesser General Public License (LGPL) w wersji 2.1<\/a>. W zwi\u0105zku z tym jest on ca\u0142kowicie wolny od koszt\u00f3w licencyjnych, zar\u00f3wno w przypadku u\u017cytkowania do cel\u00f3w prywatnych jak i komercyjnych oraz w przypadku <span lang=\"pl-PL\">modyfikowa<\/span><span lang=\"pl-PL\">nia<\/span><span lang=\"pl-PL\"> kod<\/span><span lang=\"pl-PL\">u<\/span><span lang=\"pl-PL\"> \u017ar\u00f3d\u0142ow<\/span><span lang=\"pl-PL\">ego. Oparty jest o<\/span> Jav\u0119 (JEE) oraz XML i mo\u017cna go stosowa\u0107 na dowolnej platformie sprz\u0119towej oraz systemie operacyjnym. Dzi\u0119ki temu sprawdzi si\u0119 zar\u00f3wno w \u015brodowisku wy\u0142\u0105cznie Open Source&#8217;owym, wykorzystuj\u0105cym system operacyjny Linux, baz\u0119 danych MySQL, serwer WWW Apache i kontener aplikacji webowych Apache Tomcat, jak i w \u015brodowisku typowo komercyjnym, opartym o technologie takie jak: Windows NT, IIS, BEA Weblogic, Oracle. Pierwsza wersja systemu trafi\u0142a na rynek w roku 1999 i bazowa\u0142a na MhtCms. Od tego czasu system jest ci\u0105gle rozwijany. Aktualna wersja to 9.5.2, jednak trwaj\u0105 ju\u017c zaawansowane prace nad wersj\u0105 10, kt\u00f3ra kilku miesi\u0119cy jest w fazie test\u00f3w alfa.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">JAK TO DZIA\u0141A<\/h2>\n\n\n\n<p>Podobnie jak wi\u0119kszo\u015b\u0107 system\u00f3w tego typu, r\u00f3wnie\u017c OpenCms przechowuje zawarto\u015b\u0107 stron i dane w wirtualnym systemie plik\u00f3w (ang. Virtual File System, VFS). System ten opiera si\u0119 na bazie danych i jest jej cz\u0119\u015bci\u0105. W zwi\u0105zku z tym wyb\u00f3r odpowiedniej bazy i jej konfiguracja ma kluczowe znaczenie z punktu widzenia wydajno\u015b\u0107 dzia\u0142ania systemu i szybko\u015b\u0107 \u0142adowania zawarto\u015bci. Nale\u017cy przy tym zaznaczy\u0107, \u017ce OpenCms oferuje wsparcie dla szerokiego wachlarza baz danych: MySQL, PostgreSQL, HSQLDB, Oracle, MSSQL oraz DB2. Przy czym dla zwi\u0119kszenia wydajno\u015bci OpenCms daje mo\u017cliwo\u015b\u0107 eksportowania zawarto\u015bci z VFS do RFS (ang. Real File System) i jej synchronizowanie. Z punktu widzenia wydajno\u015bci dzia\u0142ania wa\u017cne jest r\u00f3wnie\u017c, i\u017c system oferuje zaawansowane funkcje cache&#8217;owania zawarto\u015bci.<\/p>\n\n\n\n<p>Zawarto\u015b\u0107 w OpenCms jest definiowana przy u\u017cyciu plik\u00f3w typu XML schema (XSD) i przechowywana w formie plik\u00f3w XML w wirtualnym systemie plik\u00f3w (bazie danych). W dalszej kolejno\u015bci system template&#8217;owy bazuj\u0105cy na plikach JavaServer Pages tworzy strony internetowe w oparciu o pliki XML. Przy czym OpenCms umo\u017cliwia tworzenie zar\u00f3wno zawarto\u015bci nieuporz\u0105dkowanej poprzez edytory WYSYWIG jak i uporz\u0105dkowanej (ang. structured content &#8211; np. news&#8217;y, event&#8217;y, newsfeed&#8217;y itp.), mo\u017cliwej do wykorzystania na r\u00f3\u017cnych stronach i w r\u00f3\u017cnych elementach.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Z PUNKTU WIDZENIA U\u017bYTKOWNIKA<\/h2>\n\n\n\n<p>Interfejs u\u017cytkownika OpenCms dzia\u0142a przy pomocy przegl\u0105darki i w zale\u017cno\u015bci od wersji systemu oferuje mo\u017cliwo\u015b\u0107 edycji zawarto\u015bci na danej stronie (tzw. inline editing) i\/lub poprzez dedykowany edytor bazuj\u0105cy na formularzach. Elementy zawarto\u015bci, takie jak obrazy, elementy html czy pliki tekstowe przechowywane s\u0105 we wbudowanych galeriach okre\u015blonego typu, co u\u0142atwia ich wykorzystanie na r\u00f3\u017cnych stronach. Z kolei u\u017cytkownicy o uprawnieniach administratora (tzw. \u201epower users\u201d) maj\u0105 dost\u0119p do dodatkowego interfejsu administracyjnego, umo\u017cliwiaj\u0105cego mi\u0119dzy innymi zarz\u0105dzanie uprawnieniami i dost\u0119pami u\u017cytkownik\u00f3w, zarz\u0105dzanie projektami i powi\u0105zanymi z nimi stronami, obs\u0142ug\u0119 newsletter\u00f3w, tworzenie kopii bezpiecze\u0144stwa, zarz\u0105dzanie indeksami wyszukiwania, tworzenie harmonogram\u00f3w, import dodatkowych modu\u0142\u00f3w i wiele innych funkcji. U\u017cytkownicy z uprawnieniami edycji zawarto\u015bci (tzw. \u201econtent menager&#8217;s\u201d) maj\u0105 r\u00f3wnie\u017c dost\u0119p do sekcji administracyjnej, lecz w znacznie okrojonej formie, m.in. zarz\u0105dzania galeri\u0105 zdj\u0119\u0107 czy sekcj\u0105 download, tworzeniem link\u00f3w pogl\u0105dowych, importowaniem i eksportowaniem zawarto\u015bci stron.<\/p>\n\n\n\n<p>W celu usprawnienia dzia\u0142ania edytor zawarto\u015bci OpenCms pocz\u0105wszy od wersji 8 zosta\u0142 w ca\u0142o\u015bci napisany przy pomocy HTML5. Edytor generowany jest automatycznie na podstawie plik\u00f3w XSD w zale\u017cno\u015bci od konfiguracji danej sekcji. W przypadku edycji dokumentu bezpo\u015brednio w widoku strony system umo\u017cliwia zarz\u0105dzanie elementami i ich uk\u0142adem dzi\u0119ki mechanizmowi \u201edrag and drop\u201d. Dodatkowo z tego poziomu mo\u017cliwy jest szybki dost\u0119p do podstawowych czynno\u015bci administracyjnych, jak manipulowanie map\u0105 strony, tworzenie nowych element\u00f3w zawarto\u015bci czy jej publikowanie. Przy czym nale\u017cy r\u00f3wnie\u017c zauwa\u017cy\u0107, \u017ce poza wbudowanym edytorem istnieje r\u00f3wnie\u017c opcja inkludowania zewn\u0119trznego edytora, wed\u0142ug w\u0142asnego uznania.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">WYBRANE MO\u017bLIWO\u015aCI<\/h2>\n\n\n\n<p><span lang=\"pl-PL\">OpenC<\/span><span lang=\"pl-PL\">ms<\/span><span lang=\"pl-PL\"> jest dostarczany jest wraz z du\u017cym zestawem zaawansowanych wid\u017cet\u00f3w, kt\u00f3re mog\u0105 by\u0107 \u0142atwo wykorzystane w edytorze zawarto\u015bci bez konieczno\u015bci programowania (pocz\u0105wszy od wersji 9.5 system umo\u017cliwia r\u00f3wnie\u017c tworzenie template&#8217;\u00f3w i layout&#8217;\u00f3w bez konieczno\u015bci kodowania). Zw\u0142aszcza galeria oferuje szeroki zestaw funkcji do zaawansowanej obr\u00f3bki zdj\u0119\u0107, jak np. kadrowanie i zmiana rozmiaru obrazu. OpenC<\/span><span lang=\"pl-PL\">ms<\/span><span lang=\"pl-PL\"> posiada r\u00f3wnie\u017c wbudowany mechanizm zarz\u0105dzania modu\u0142ami, kt\u00f3ry umo\u017cliwia wygodne dostosowywanie funkcji przez import gotowych rozwi\u0105za\u0144, tworzenie w\u0142asnych lub ich export i przygotowanie do wdro\u017cenia na innych maszynach. Modu\u0142y te mog\u0105 dostarcz<\/span><span lang=\"pl-PL\">a<\/span><span lang=\"pl-PL\">\u0107 szablon<\/span><span lang=\"pl-PL\">y <\/span><span lang=\"pl-PL\">do wykorzystania na stronach www, now<\/span><span lang=\"pl-PL\">e<\/span><span lang=\"pl-PL\"> typ<\/span><span lang=\"pl-PL\">y <\/span><span lang=\"pl-PL\">strukturyzowanych element\u00f3w zawarto\u015bci czy dodatkowe rozwi\u0105zania frontendowe, jak np. tworzenie album\u00f3w fotograficznych, interaktywne formularze online <\/span><span lang=\"pl-PL\">i wiele innych<\/span><span lang=\"pl-PL\">.<\/span><\/p>\n\n\n\n<p><span lang=\"pl-PL\">System zapewnia zintegrowane \u015brodowisko przep\u0142ywu pracy z trybem testowym Offline i trybem live \u2013 Online. Wszelkie zmiany zawarto\u015bci dokonywane s\u0105 w trybie Offline, dost\u0119pnym u\u017cytkownikom z uprawnieniami edycji. Tryb ten pozwala na modyfikowanie zawarto\u015bci i jej weryfikowanie oraz podgl\u0105d bez wp\u0142ywu na docelow\u0105 tre\u015b\u0107 danej strony. Dopiero po zatwierdzeniu zmian, ca\u0142o\u015b\u0107 jest publikowana przez osob\u0119 z odpowiednimi uprawnieniami do trybu Online, dost\u0119pnego dla wszystkich u\u017cytkownik\u00f3w.<\/span><\/p>\n\n\n\n<p>OpenCms umo\u017cliwia oczywi\u015bcie tworzenie witryn w wielu j\u0119zykach. W tym celu tworzy si\u0119 w strukturze folder\u00f3w danej strony jeden folder najwy\u017cszego poziomu dla ka\u017cdego j\u0119zyka. Na ka\u017cdym z tych folder\u00f3w ustawia si\u0119 w\u0142a\u015bciwo\u015bci lokalizacji i j\u0119zyka. W ten oto prosty spos\u00f3b wszystkie podfoldery i podrz\u0119dne strony b\u0119d\u0105 dziedziczy\u0107 ustawienia regionalne ich folderu nadrz\u0119dnego. Przy czym w przypadku, gdy strona b\u0119dzie dost\u0119pna w kilku lokalizacjach rozpoczyna si\u0119 od utworzenia strony w jednym z ustawie\u0144 lokalnych folder\u00f3w, po czym wystarczy stworzy\u0107 powi\u0105zanie do tej strony w folderach innych lokalizacji, dla kt\u00f3rych chce si\u0119 mie\u0107 dost\u0119pn\u0105 stron\u0119.<\/p>\n\n\n\n<p>Wraz w wprowadzeniem OpenCms 7 du\u017ce zmiany nast\u0105pi\u0142y w kwestii zarz\u0105dzania wewn\u0119trznymi linkami. Silnik relacji zawarto\u015bci systemu nieustannie czuwa by struktura link\u00f3w i powi\u0105za\u0144 mi\u0119dzy stronami i plikami lokalnymi pozosta\u0142a nienaruszona w przypadku modyfikacji nazwy powi\u0105zanych element\u00f3w, ich przeniesienia czy pr\u00f3by usuni\u0119cia. Dotyczy to zar\u00f3wno poszczeg\u00f3lnych plik\u00f3w jak i ca\u0142ych, z\u0142o\u017conych struktur modyfikowanych element\u00f3w w wirtualnym systemie plik\u00f3w OpenCms. Dzi\u0119ki temu podczas modyfikowania zasob\u00f3w, linki kt\u00f3re mog\u0105 ulec uszkodzeniu zostan\u0105 wykryte, odpowiednio zakomunikowane i wy\u015bwietlone. Ma to miejsce zar\u00f3wno gdy zmiany wp\u0142ywaj\u0105 na pliki inkludowane w danym elemencie jak i gdy dany, modyfikowany plik jest inkludowany w innym, nadrz\u0119dnym.<\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p>Wi\u0119cej informacji o systemie znajdziecie na <a href=\"http:\/\/www.opencms.org\/\" rel=\"nofollow\" >stronie domowej projektu<\/a> oraz na stronie <a href=\"http:\/\/www.opencms-wiki.org\/wiki\/Main_Page\" rel=\"nofollow\" >OpenCms wiki<\/a>.<\/p>\n\n\n\n<p>W kolejnej cz\u0119\u015bci przedstawi\u0119 OpenCms z punktu widzenia developera pracuj\u0105cego nad rozwojem portali intranetowych dla firmy Bayer AG.<\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;1189&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;0&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;0&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;11&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;0\\\/5 ( votes: 0)&quot;,&quot;size&quot;:&quot;18&quot;,&quot;title&quot;:&quot;OpenCms oczami developera \u2013 cz\u0119\u015b\u0107 1&quot;,&quot;width&quot;:&quot;0&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ( {votes}: {count})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 0px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 11px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 18px; height: 18px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 14.4px;\">\n            <span class=\"kksr-muted\"><\/span>\n    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Zapewne ka\u017cdy z Was mia\u0142 w wi\u0119kszym lub mniejszym stopniu do czynienia z jak\u0105\u015b odmian\u0105 systemu zarz\u0105dzania tre\u015bci\u0105, czyli tak &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/opencms-oczami-developera-czesc-1\/\">Continued<\/a><\/p>\n","protected":false},"author":63,"featured_media":757,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1314],"tags":[184,183],"class_list":["post-1189","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-na-twardo","tag-cms","tag-opencms"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2015\/11\/blogersii_2.jpg","category_names":["Development na twardo"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/1189"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/users\/63"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=1189"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/1189\/revisions"}],"predecessor-version":[{"id":23021,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/1189\/revisions\/23021"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/757"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=1189"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=1189"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=1189"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}