Webseiten und ZubehörProgrammierung UmsetzungPflege Backups BetreuungJoomla-Spezialist

SonstigeSchnipsel

In LESS kann man Variablen vordefinieren. Farbwerte, Paddings und mehr. Hilfreich z.B., will man mal einen Grauton etwas heller stellen, Man muss nicht in diversen Dateien die color-Werte anpassen, sondern kann das an 1 Stelle erledigen. Bootstrap übertreibt mit diesem Feature etwas und ich suche mir regelmäßig einen Wolf. Erster Schritt, eine sortierbare Übersicht. Vielleicht hilft's was.

Bootstrap-3-Variablen dynamisch ausgelesen

Datei /media/plg_system_bs3ghsvs/less/variables.less nicht gefunden.ICOMOONCLASSES_APOLOGISE

<?php
/*
2015-10-11
bootstrap-3-variables.php
Variablen und Werte aus BS3-variables.less (Orig.) auslesen.
2015-10-17: zusätzlich Custom Werte aus template-eigener variables.less.
*/
?>
<?php
defined('_JEXEC') or die;

$selector = 'bootstrap-3-variables';

$html = array();
$link = '';
$countCollect = 0;

$app = JFactory::getApplication();

// Relevant für FooTable, wenn paging enabled
if (!($maxentries = $app->input->get->getInt('maxentries')))
{
 $maxentries = 50;
}

$apologise = JText::_('ICOMOONCLASSES_APOLOGISE');

$file = '/media/plg_system_bs3ghsvs/less/variables.less';
$fileAbs = JPATH_SITE . $file;

$template = $app->getTemplate();
$fileCustom = '/templates/' . $template . '/less/variables.less';
$fileCustomAbs = JPATH_SITE . $fileCustom;

if (!file_exists($fileAbs))
{
 $html[] = '<p class="alert alert-error">Datei ';
 $html[] = $file;
 $html[] = ' nicht gefunden.';
 $html[] = $apologise;
 $html[] = '</p>';
}
elseif (!file_exists($fileCustomAbs))
{
 $html[] = '<p class="alert alert-error">Datei ';
 $html[] = $fileCustom;
 $html[] = ' nicht gefunden.';
 $html[] = $apologise;
 $html[] = '</p>';
}
else
{

 $link = '<p><a href="' . JUri::root(true) . $file . '" target="_blank">' . $file . '</a></p>';
 $link .= '<p><a href="' . JUri::root(true) . $fileCustom . '" target="_blank">' . $fileCustom . '</a></p>';

 $collect = collectLessVariablesGhsvs($fileAbs);
 $countCollect = count($collect);
 
 if ($countCollect)
 {
  $i = 0;
  
  $collectCustom = collectLessVariablesGhsvs($fileCustomAbs);

  $html[] = '<h4>BS3-Original und Overrides des aktiven Templates</h4>';
  #$html[] = '<div class="table-responsive">';
  $html[] = '<table class="table table-condensed table-bordered" id="' . $selector . '"';
  $html[] = '>';
  $html[] = '<thead>';
  $html[] = '<tr>';
  $html[] = '<th>Variable</th>';
  $html[] = '<th data-breakpoints="xxs">Bootstrap</th>';
  $html[] = '<th data-breakpoints="xs">Template</th>';
  $html[] = '<th data-type="number">#</th>';
  $html[] = '</tr>';
  $html[] = '</thead>';
  $html[] = '<tbody>';
  foreach ($collect as $k => $v)
  {
   $vCustom = '';
   $html[] = '<tr>';
   $html[] = '<td data-ghsvs="toggle">' . $k . '</td>';
   $html[] = '<td>' . $v . '</td>';
   if (isset($collectCustom[$k]))
   {
    $vCustom = $collectCustom[$k];
    unset($collectCustom[$k]);
   }
   $html[] = '<td>' . $vCustom . '</td>';
   $html[] = '<td data-ghsvs="number">' . (++$i) . '</td>';
   $html[] = '</tr>';
  }
  $html[] = '</tbody>';
  $html[] = '</table>';
  #$html[] = '</div><!--/table-responsive-->';
 }
}
if (!count($html))
{
 $html[] = '<p class="alert alert-error">Da ist wohl was schief gelaufen. ';
 $html[] = $apologise;
 $html[] = '</p>';
}
else
{
 // Mehr Einträge in Tabelle anzeigen?
 $uri = JUri::getInstance();
 if ($countCollect > $maxentries)
 {
  $uri->setVar('maxentries', $countCollect);
  $link .= '<p class=" btn btn-default text-fett" style="font-size:1.3em;"><a rel="nofollow" href="'.$uri.'#BELOWHEADER">Alle '.$countCollect.' Einträge auf 1 Seite  anzeigen</a></p>';
 }

   
 ########### FooTable 3 START ###########
 // Speziell. Wir haben Footable auf unserem Server via Plugin installiert.
 // Ggf. Zeilen entfernen
 $options = array(
  'empty' => JText::_('GHSVS_MODULES_FOOTABLE_EMPTY'),
  'sorting' => array(
   'enabled' => true
  ),
  'filtering' => array(
   'enabled' => true
  ),
  'paging' => array(
   'enabled' => ($countCollect > $maxentries) ? true : false,
   'size' => $maxentries,
   'countFormat' => JText::sprintf('JLIB_HTML_PAGE_CURRENT_OF_TOTAL', '{CP}', '{TP}'),
   'current' => 1,
   'limit' => 10,
   'position' => 'center'
  ),
  'state' => array(
   'enabled' => true,
   'filtering' => true,
   'paging' => true,
   'sorting' => true,
   'key' => $selector
  ),
  // Erster geöffnet. Auch nach Sortieren wird erster geöffnet.
  'expandFirst' => false,
  //'useParentWidth' => true,
  'stopPropagation' => true,
  // Leichteres Handling der Breakpoints. Nehmen drunter liegende mit.
  'cascade' => true,
  'breakpoints' => array(
  // Du muss xxs eingeben, damit Spalte bei *xs* *verschwindet*!
  'xxs' => 480,
  'xs' => 620,
  'sm' => 768,
  'md' => 992,
  'lg' => 1200,
  ),
 );
 JHtml::_('bs3ghsvs.footable', '#' . $selector, $options);
 ########### FooTable 3 ENDE ###########
 
 echo '<style>table{
 word-wrap: normal
 -webkit-hyphens: none;
 -moz-hyphens: none;
 -ms-hyphens: none;
 -o-hyphens: none;
 hyphens: none;
 }
 @-moz-document url-prefix() {
 fieldset { display: table-cell; }
 }
 [data-ghsvs="toggle"]{
  font-weight: bold;
  background-color: #fafafa;
  cursor:pointer;
 }
 [data-ghsvs="number"]{
  text-align: right;
 }
 </style>';
}

echo $link . implode('', $html);

function collectLessVariablesGhsvs($fileAbs)
{
 $lines = file($fileAbs);
 $collect = array();
 foreach ($lines as $i => $line){
  $line = trim($line);
  if (strpos($line, '@') !== 0 || strpos($line, ':') === false)
  {
   continue;
  }
  // Fix 2015-10-17.
  // Derzeit verwendet BS3 nur "//" als Kommentarzeichen
  if (strpos($line, '//') !== false)
  {
   $line = explode('//', $line, 2);
   $line = $line[0];
  }

  $line = explode(':', $line, 2);
  if (count($line) != 2){
   continue;
  }
  
  // Vorsicht! Derzeit geht das noch mit Semikolon.
  // Es sind aber auch Semikolons statt Komma zwischen
  // Funktions-Parametern erlaubt.
  // Siehe "Fix 2015-10-17"
  // $parts = explode(';', $line[1], 2);
  // $line[1] = trim($parts[0]);
  
  $collect[trim($line[0])] = trim($line[1], ' ;');
 }
 return $collect;
}

Verbesserungsvorschläge und Feature-Wünsche sind willkommen.

Alle nicht explizit als fertige Erweiterung markierten Skripte und Codes von www.ghsvs.de dienen als Ansätze / Ideen für eigene Ausarbeitung. GHSVS bzw. die jeweiligen Autoren übernehmen keinerlei Garantien beim Einsatz Ihrer kostenlosen Erweiterungen, Programme, Codes und Skripte, helfen aber gerne bei Rückfragen, soweit zeitlich möglich.

CSS Konfiguration LESS Template Bootstrap