Čo vám Etomite CMS prináša?

  • jednoduchá a intuitívna administrácia v slovenskom a českom jazyku,
  • písanie článkov pomocou WYSIWYM, alebo WYSIWYG editorov,
  • plánované zverejňovanie článkov,
  • jednoduché URL adresy k článkom,
  • zabudované vyhľadávanie,
  • úprava šablón, CSS a snippetov priamo v administrácií,
  • správca súborov,
  • správca užívateľov a skupín dokumentov,
  • rešpektovanie W3C štandardov,
  • bezpečnosť (https, prístupové oprávnenia),
  • podporu zdarma,
  • štatistiky návštev a prístupov,
  • možnosti rozšírenia prostredníctvom snippetov,
  • bez obmedzení!,
  • všetko zdarma.

Čo k tomu potrebujete?

  • hosting s PHP 5.x+,
  • databázu mySQL 5.x+,
  • miniálne 10MB priestoru.

Texy! a FSHL

» Posledná aktualizácia: 18-10-2008 23:41:12, autor: Matej Kolesár

Texy! – je (viac ako) plnohodnotná náhrada WYSIWYG editorov → formátuje texty na základe sémantických pravidiel, má plnú podporu UTF-8, typografické pravidla… a pod.

FSHL – je „Univerzálny syntaktický zvýrazňovač“ spolu s Texy! tvoria plnohodnotný celok pre formátovanie textov a zvýrazňovanie syntaxu:

  • HTML – Recommended grammar for HTML, with embeded PHP, JS and CSS
  • HTMLonly – Faster grammar for pure HTML codes
  • CSS – Generic grammar for CSS
  • PHP – Generic grammar for PHP (4 and 5)
  • JS – Generic grammar for JavaScript
  • CPP – C++ grammar
  • JAVA – JAVA grammar
  • SQL – SQL grammar

    … toto žiadny WYSIWYG editor jednoducho nedokáže! ;)

Viac o FSHL si môžete prečítať tu: http://hvge.sk/…/doc-sk.html


Použitie:

  • Najprv sa zbavíme WYSIWYG Editorov v Etomite. V „Etomite configuration → Interface & editor settings“ – „Enable editor“ nastavime na „No“
  • Stiahneme prilohu (z fora v tejto teme), rozbalime a uploadneme ju do <eto-rootu>
  • Vytvorime novy snippet s nazvom „texy-content“ a skopírujeme text (dole)
  • Otvoríme templat, ktorý používame a nahradíme:
    • snippet: [* content *]
    • za: [ [ texy-content ] ]

Upozornenie – Ak v dokumentoch budete používať snippety, tak ich používajte v takomto formáte (aby ich Texy! zbytočne neformátovalo):

Použitie snippetov v Etomite:

1: /---html
2:   [ [navov_snippetu] ]
3: ---

Texy! 1.x

Kód snippetu texy-content:

  1: // Cesta k Texy! a FSHL
  2: $texyPath = dirname(__FILE__).'/texy/texy/';
  3: $fshlPath = dirname(__FILE__).'/fshl/fshl/';
  4: 
  5: // Vlozenie suborov
  6: require_once ($texyPath . 'texy.php');
  7: include_once ($fshlPath . 'fshl.php');
  8: 
  9: // Funkcia pre externy FSHL syntakticky formatovac
 10: function myUserFunc(&$element) {
 11:     $lang = strtoupper($element->lang);
 12:     if ($lang == 'JAVASCRIPT') $lang = 'JS';
 13:     if (!in_array(
 14:             $lang,
 15:             array('CPP', 'CSS', 'HTML', 'JAVA', 'PHP', 'JS', 'SQL'))
 16:        ) return;
 17: 
 18:     $parser = new fshlParser($element->texy->utf ? 'HTML_UTF8' : 'HTML', P_TAB_INDENT);
 19:     $element->setContent($parser->highlightString($lang, $element->content), TRUE);
 20: }
 21: 
 22: // Inicializacia Texy!
 23: $texy = &new Texy();
 24: 
 25: // Ak nepouzivate UTF-8, tak tento riadok odstrante resp. zakomentujte
 26: $texy->utf = true;
 27: // Zapnutie funkcie pre externy FSHL
 28: $texy->blockModule->codeHandler = 'myUserFunc';
 29: // Cesta k obrazkom pouzivanym v dokumentoch - Texy! syntax
 30: $texy->imageModule->root = 'images/';
 31: $copyright = "nn.{color: #808080}n  Copyright & 2005-2006 by "Matthew Wheeler":etomite@etomite.sk under "GNU/FDL((Free Documentation License))":[http://www.gnu.org/copyleft/fdl.txt]";
 32: 
 33: /**
 34:  * Smilies
 35:  */
 36: 
 37: // Zapnutie modulu
 38: $texy->smiliesModule->allowed = TRUE;
 39: // Cesta k smajlikom
 40: $texy->smiliesModule->root  = 'images/smiles/';
 41: // CSS trieda pre smajliky
 42: $texy->smiliesModule->class  = 'smilie';
 43: // Konfiguracia smajlikov priradenie znak -> obrazok
 44: $texy->smiliesModule->icons[':D'] = 'icon_biggrin.gif';
 45: $texy->smiliesModule->icons[':)'] = 'icon_smile.gif';
 46: $texy->smiliesModule->icons[':('] = 'icon_sad.gif';
 47: $texy->smiliesModule->icons[':o'] = 'icon_surprised.gif';
 48: $texy->smiliesModule->icons[':shock:'] = 'icon_eek.gif';
 49: $texy->smiliesModule->icons[':?'] = 'icon_confused.gif';
 50: $texy->smiliesModule->icons['8)'] = 'icon_cool.gif';
 51: $texy->smiliesModule->icons[':lol:'] = 'icon_lol.gif';
 52: $texy->smiliesModule->icons[':x'] = 'icon_mad.gif';
 53: $texy->smiliesModule->icons[':P'] = 'icon_razz.gif';
 54: $texy->smiliesModule->icons[':oops:'] = 'icon_redface.gif';
 55: $texy->smiliesModule->icons[':cry:'] = 'icon_cry.gif';
 56: $texy->smiliesModule->icons[':evil:'] = 'icon_evil.gif';
 57: $texy->smiliesModule->icons[':twisted:'] = 'icon_twisted.gif';
 58: $texy->smiliesModule->icons[':roll:'] = 'icon_rolleyes.gif';
 59: $texy->smiliesModule->icons[';)'] = 'icon_wink.gif';
 60: $texy->smiliesModule->icons[':!:'] = 'icon_exclaim.gif';
 61: $texy->smiliesModule->icons[':?:'] = 'icon_question.gif';
 62: $texy->smiliesModule->icons[':idea:'] = 'icon_idea.gif';
 63: $texy->smiliesModule->icons[':arrow:'] = 'icon_arrow.gif';
 64: $texy->smiliesModule->icons[':|'] = 'icon_neutral.gif';
 65: $texy->smiliesModule->icons[':mrgreen:'] = 'icon_mrgreen.gif';
 66: $texy->smiliesModule->icons[':swoon:'] = 'swoon.gif';
 67: $texy->smiliesModule->icons[':suicide:'] = 'suicide.gif';
 68: $texy->smiliesModule->icons[':rofl:'] = 'rofl.gif';
 69: $texy->smiliesModule->icons[':punish:'] = 'punish.gif';
 70: $texy->smiliesModule->icons[':nhl-checking:'] = 'nhl_checking.gif';
 71: $texy->smiliesModule->icons[':omg:'] = 'Just_Cuz_23.gif';
 72: $texy->smiliesModule->icons[':ass:'] = 'Just_Cuz_17.gif';
 73: $texy->smiliesModule->icons[':fuk:'] = 'fuk.gif';
 74: $texy->smiliesModule->icons[':drinks:'] = 'drinks.gif';
 75: $texy->smiliesModule->icons[':dancer:'] = 'hip23951fc5js.gif';
 76: $texy->smiliesModule->icons[':beersss:'] = 'Just_Cuz_08.gif';
 77: $texy->smiliesModule->icons[':caf:'] = 'Just_Cuz_19.gif';
 78: $texy->smiliesModule->icons[':PP'] = 'Just_Cuz_34.gif';
 79: $texy->smiliesModule->icons[':jupiii:'] = 'tatice_04.gif';
 80: $texy->smiliesModule->icons[':B)'] = 'tatice_06.gif';
 81: $texy->smiliesModule->icons[':**'] = 'fisch.gif';
 82: $texy->smiliesModule->icons[':psp:'] = 'gathering.gif';
 83: $texy->smiliesModule->icons[':*)'] = 'mwah1.gif';
 84: $texy->smiliesModule->icons['&lt;*&gt;&lt;-'] = 'smileysex.gif';
 85: 
 86: /*******************************************************************************
 87:  * Page Trial - navigacne menu - poloha dokumentu
 88:  ******************************************************************************/
 89: 
 90: // Separator
 91: $sep = " &rarr; ";
 92: 
 93: $ptarr = array();
 94: $pid = $etomite->documentObject['parent'];
 95: $ptarr[] = """.$etomite->documentObject['pagetitle']."":".$etomite->documentObject['id']."";
 96: 
 97: while ($parent=$etomite->getParent($pid)) {
 98:     $ptarr[] = "<a href='".$parent['id']."'>".$parent['pagetitle']."</a>";
 99:     $pid = $parent['parent'];
100: }
101: 
102: $ptarr = array_reverse($ptarr);
103: $pageTrial = join($ptarr, $sep);
104: 
105: /*******************************************************************************
106:  * docInfo - informacie a atributy dokumentu
107:  ******************************************************************************/
108: 
109: // Nazov stranky - webu
110: $site_name = $etomite->config['site_name'];
111: 
112: $docInfo = $etomite->getDocument($etomite->documentIdentifier);
113: // Titulok stranky - dokumentu
114: $pagetitle = $docInfo['pagetitle'];
115: // Dlhy nazov dokumentu
116: $longtitle = $docInfo['longtitle'];
117: // Popis dokumentu
118: $description = $docInfo['description'];
119: // Posledna uprava dokumentu
120: $editedon = date("d. m. Y", $etomite->documentObject['editedon']);
121: 
122: /*******************************************************************************
123:  * Texy! Content
124:  ******************************************************************************/
125: 
126: $output = "";
127: 
128: /**
129:  * Header - Hlavicka (co nepotrebujete odstrante)
130:  */
131: 
132: // $output .= "======= ".$site_name." =======nn";
133: $output .=  "======= ".$longtitle." =======nn";
134: $output .= ".{color: #808080}n ".$description." | Posledná úprava: ".$editedon."nn";
135: // $output .= "  ".$pageTrial."n---nn";
136: // $output .= "/---htmln  ".$pageTrial."n---nn";
137: 
138: /**
139:  * Etomite Content
140:  */
141: 
142: $doc = $etomite->getDocument($etomite->documentObject['id'], "content");
143: if($doc) {
144:   $output .= $doc['content'];
145:   }
146: else {
147:   $output .= "";
148:   }
149: 
150: /**
151:  * Footer
152:  */
153: 
154: $output .= $copyright;
155: 
156: // Preformatovanie do HTML
157: $html = $texy->process($output);
158: return $html;

Texy! 2.x

Kód snippetu texy-content:

// Cesta k Texy! a FSHL
$texyPath = dirname(__FILE__).'/texy/texy/';
$fshlPath = dirname(__FILE__).'/fshl/fshl/';

// Vlozenie suborov
require_once ($texyPath . 'texy.php');
include_once ($fshlPath . 'fshl.php');

// Funkcia pre externy FSHL syntakticky formatovac
class myHandler
  {
  /**
   * User handler for code block
   *
   * @param TexyBlockParser
   * @param string  block type
   * @param string  text to highlight
   * @param string  language
   * @param TexyModifier modifier
   * @return TexyHtml
   */
  public function block($parser, $blocktype, $content, $lang, $modifier)
    {
    if ($blocktype !== 'block/code')
      return Texy::PROCEED;
    $texy = $parser->texy;
    $lang = strtoupper($lang);
    if ($lang == 'JAVASCRIPT') $lang = 'JS';
    if (!in_array(
      $lang,
        array('CPP', 'CSS', 'HTML', 'JAVA', 'PHP', 'JS', 'SQL'))
        ) return Texy::PROCEED;
    $parser = new fshlParser('HTML_UTF8', P_TAB_INDENT);
    $content = $texy->blockModule->outdent($content);
    $content = $parser->highlightString($lang, $content);
    $content = $texy->protect($content);
    $el = TexyHtml::el('code');
    $el->setContent( $content );
    $elPre = TexyHtml::el('pre');
    if ($modifier) $modifier->decorate($texy, $elPre);
    $elPre->class = strtolower($lang);
    $elPre->addChild($el);
    return $elPre;
    }
}

// Inicializacia Texy!
$texy = new Texy();

// Ak nepouzivate UTF-8, tak tento riadok odstrante resp. zakomentujte
// $texy->encoding = 'windows-1250';      // disable UTF-8
// Zapnutie funkcie pre externy FSHL
$texy->blockModule->codeHandler = 'myUserFunc';
// Cesta k obrazkom pouzivanym v dokumentoch - Texy! syntax
$texy->imageModule->root = 'images/';
$copyright = "nn.{color: #808080}n  Copyright & 2005-2006 by "Matthew Wheeler":etomite@etomite.sk under "GNU/FDL((Free Documentation License))":[http://www.gnu.org/copyleft/fdl.txt]";

/**
 * Smilies
 */

// Zapnutie modulu
$texy->allowed['emoticon'] = TRUE;
// Cesta k smajlikom
$texy->smiliesModule->root  = 'images/smiles/';
// CSS trieda pre smajliky
$texy->emoticonModule->class = 'smilie';
// Konfiguracia smajlikov priradenie znak -> obrazok
$texy->smiliesModule->icons[':D'] = 'icon_biggrin.gif';
$texy->emoticonModule->icons[':)'] = 'icon_smile.gif';
$texy->emoticonModule->icons[':('] = 'icon_sad.gif';
$texy->emoticonModule->icons[':o'] = 'icon_surprised.gif';
$texy->emoticonModule->icons[':shock:'] = 'icon_eek.gif';
$texy->emoticonModule->icons[':?'] = 'icon_confused.gif';
$texy->emoticonModule->icons['8)'] = 'icon_cool.gif';
$texy->emoticonModule->icons[':lol:'] = 'icon_lol.gif';
$texy->emoticonModule->icons[':x'] = 'icon_mad.gif';
$texy->emoticonModule->icons[':P'] = 'icon_razz.gif';
$texy->emoticonModule->icons[':oops:'] = 'icon_redface.gif';
$texy->emoticonModule->icons[':cry:'] = 'icon_cry.gif';
$texy->emoticonModule->icons[':evil:'] = 'icon_evil.gif';
$texy->emoticonModule->icons[':twisted:'] = 'icon_twisted.gif';
$texy->emoticonModule->icons[':roll:'] = 'icon_rolleyes.gif';
$texy->emoticonModule->icons[';)'] = 'icon_wink.gif';
$texy->emoticonModule->icons[':!:'] = 'icon_exclaim.gif';
$texy->emoticonModule->icons[':?:'] = 'icon_question.gif';
$texy->emoticonModule->icons[':idea:'] = 'icon_idea.gif';
$texy->emoticonModule->icons[':arrow:'] = 'icon_arrow.gif';
$texy->emoticonModule->icons[':|'] = 'icon_neutral.gif';
$texy->emoticonModule->icons[':mrgreen:'] = 'icon_mrgreen.gif';
$texy->emoticonModule->icons[':swoon:'] = 'swoon.gif';
$texy->emoticonModule->icons[':suicide:'] = 'suicide.gif';
$texy->emoticonModule->icons[':rofl:'] = 'rofl.gif';
$texy->emoticonModule->icons[':punish:'] = 'punish.gif';
$texy->emoticonModule->icons[':nhl-checking:'] = 'nhl_checking.gif';
$texy->emoticonModule->icons[':omg:'] = 'Just_Cuz_23.gif';
$texy->emoticonModule->icons[':ass:'] = 'Just_Cuz_17.gif';
$texy->emoticonModule->icons[':fuk:'] = 'fuk.gif';
$texy->emoticonModule->icons[':drinks:'] = 'drinks.gif';
$texy->emoticonModule->icons[':dancer:'] = 'hip23951fc5js.gif';
$texy->emoticonModule->icons[':beersss:'] = 'Just_Cuz_08.gif';
$texy->emoticonModule->icons[':caf:'] = 'Just_Cuz_19.gif';
$texy->emoticonModule->icons[':PP'] = 'Just_Cuz_34.gif';
$texy->emoticonModule->icons[':jupiii:'] = 'tatice_04.gif';
$texy->emoticonModule->icons[':B)'] = 'tatice_06.gif';
$texy->emoticonModule->icons[':**'] = 'fisch.gif';
$texy->emoticonModule->icons[':psp:'] = 'gathering.gif';
$texy->emoticonModule->icons[':*)'] = 'mwah1.gif';
$texy->emoticonModule->icons['<*><-'] = 'smileysex.gif';

/*******************************************************************************
 * Page Trial - navigacne menu - poloha dokumentu
 ******************************************************************************/

// Separator
$sep = " → ";

$ptarr = array();
$pid = $etomite->documentObject['parent'];
$ptarr[] = """.$etomite->documentObject['pagetitle']."":".$etomite->documentObject['id']."";

while ($parent=$etomite->getParent($pid)) {
    $ptarr[] = "".$parent['pagetitle']."";
    $pid = $parent['parent'];
}

$ptarr = array_reverse($ptarr);
$pageTrial = join($ptarr, $sep);

/*******************************************************************************
 * docInfo - informacie a atributy dokumentu
 ******************************************************************************/

// Nazov stranky - webu
$site_name = $etomite->config['site_name'];

$docInfo = $etomite->getDocument($etomite->documentIdentifier);
// Titulok stranky - dokumentu
$pagetitle = $docInfo['pagetitle'];
// Dlhy nazov dokumentu
$longtitle = $docInfo['longtitle'];
// Popis dokumentu
$description = $docInfo['description'];
// Posledna uprava dokumentu
$editedon = date("d. m. Y", $etomite->documentObject['editedon']);

/*******************************************************************************
 * Texy! Content
 ******************************************************************************/

$output = "";

/**
 * Header - Hlavicka (co nepotrebujete odstrante)
 */

// $output .= "======= ".$site_name." =======nn";
$output .=  "======= ".$longtitle." =======nn";
$output .= ".{color: #808080}n ".$description." | Posledná úprava: ".$editedon."nn";
// $output .= "  ".$pageTrial."n---nn";
// $output .= "/---htmln  ".$pageTrial."n---nn";

/**
 * Etomite Content
 */

$doc = $etomite->getDocument($etomite->documentObject['id'], "content");
if($doc) {
  $output .= $doc['content'];
  }
else {
  $output .= "";
  }

/**
 * Footer
 */

$output .= $copyright;

// Preformatovanie do HTML
$html = $texy->process($output);
return $html;

Smajlíky – smiliesModule / emoticonModule Texy! → nahradi sekvenciu znakov za obrázok.

:D
:) :)
:( :(
:o :o
:shock: :shock:
:? :?
8) 8)
:lol: :lol:
:x :x
:P :P
:oops: :oops:
:cry: :cry:
:evil: :evil:
:twisted: :twisted:
:roll: :roll:
;) ;)
:!: :!:
:?: :?:
:idea: :idea:
:arrow: :arrow:
:mrgreen: :mrgreen:
:swoon: :swoon:
:suicide: :suicide:
:rofl: :rofl:
:punish: :punish:
:nhl-checking: :nhl-checking:
:omg: :omg:
:ass: :ass:
:fuk: :fuk:
:drinks: :drinks:
:dancer: :dancer:
:beersss: :beersss:
:caf: :caf:
:PP :PP
:jupiii: :jupiii:
:B) :B)
:** :**
:psp: :psp:
:*) :*)

Update

  • 18.6.2006 – Texy! 1.1 & FSHL 0.4.17
 
Fork me on GitHub