[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Tabs Eingabe mit PHP - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Benutzeravatar
Hatori
Beiträge: 133
Registriert: 4. Mai 2016, 17:33
Wohnort: Berlin
Kontaktdaten: Website

Tabs Eingabe mit PHP

24. Mai 2016, 00:13

Der Textile mit Markitup funktioniert nicht, deswegen dachte ich, ich tausche das Ding einfach gegen PHP/HTML-Eingabe aus, aber so einfach, wie ich dachte, ist das wohl nicht.
Input:

Code: Alles auswählen

<fieldset class="form-horizontal">
    <legend>Tabs Eingabe</legend>

    <div class="form-group">
        <label class="col-sm-2 control-label" for="headline">Überschrift</label>
        <div class="col-sm-10">
            <input class="form-control" id="headline" type="text" name="REX_INPUT_VALUE[2]" value="REX_VALUE[2]" />
        </div>
    </div>

    <div class="form-group">
        <div>
            <textarea  class="form-control rex-code" name="REX_INPUT_VALUE[1]">REX_VALUE[1]</textarea>
        </div>
    </div>
</fieldset>
Output:

Code: Alles auswählen

<?php
if (!isset($counter)) {
  $counter = 0;
}
$counter++;

// Im Frontend werden die Daten in ein Array geschrieben, aber nicht ausgegeben
if (! rex::isBackend()) {
  $items = array();
  $items = ['title' => 'REX_VALUE[2]', 'text' => 'REX_VALUE[id=1 output=php]'];
  rex::getProperty('tabs')->append($items);
// Im Backend wird der Inhalt als Info für den Redakteur angezeigt
} else {
  if ('REX_VALUE[id=2 isset=1]') {
    echo '<h2>REX_VALUE[2]</h2>';
  }
  if ('REX_VALUE[id=1 isset=1]') {
  ?>
    <div>
            <textarea id="quellcodeREX_SLICE_ID" name="quellcodeREX_SLICE_ID"  class="form-control" readonly>REX_VALUE[id=1 output=html]</textarea>
            <script>
                  $(function () {
                        CodeMirror.fromTextArea(document.getElementById('quellcodeREX_SLICE_ID'), {
                              mode: "javascript",
                              theme: "default",
                              lineNumbers: true,
                              readOnly: true
                        });
                  });
            </script>
      </div>
  <?php
  }
}
?>
Tja, aber so einfach ist das wohl nicht. Kann mir jemand auf die Sprünge helfen, bitte?
----------
Einen schönen Tag noch - Hatori
http://www.ninja4ever.de

Benutzeravatar
Hatori
Beiträge: 133
Registriert: 4. Mai 2016, 17:33
Wohnort: Berlin
Kontaktdaten: Website

Re: Tabs Eingabe mit PHP

24. Mai 2016, 19:39

Gut, das da oben scheint sogar richtig zu sein, aber ich muss ja das Modul für die Ausgabe der Tabs entsprechend anpassen. Soweit ich das sehe, kann der Teil Eingabe so bleiben, im Ausgabeteil muss geändert werden in diesem Abschnitt:

Code: Alles auswählen

    if ($tabs_title != '' && $tabs_text != '') {
      if ($counter == 1) $active_title = ' class="active"';
        $textile = rex_textile::parse($tabs_text);
        // Bold-Tags werden "missbraucht", um Bootstrap-Labels setzen zu können.
        $textile = str_replace(array('<b>', '</b>', '-&gt;'), array('<span class="label label-primary">', '</span>', '->'), $textile);
        $tabs_out .= '
          <li'.$active_title.'>
          <div class="'.$title_style.'">
            <span>'.$tabs_title.'</span>
          </div>
          <div class="'.$content_style.' text">'.$textile.'</div>
          </li>';
    }
Statt rex_textile::parse($tabs_text) muss etwas anderes hin, kann mir jemand sagen, was ich da hinschreiben muss?
Und an der Stelle mit dem str_replace muss ja dann auch was geändert werden, die Bold-Tags gibts ja dann nicht mehr.
----------
Einen schönen Tag noch - Hatori
http://www.ninja4ever.de

Benutzeravatar
Hatori
Beiträge: 133
Registriert: 4. Mai 2016, 17:33
Wohnort: Berlin
Kontaktdaten: Website

Re: Tabs Eingabe mit PHP

8. Jul 2016, 21:42

Ich muss doch nochmal fragen, vielleicht kann mir ja jemand einen Tipp geben, wie ich das hinkriege.
Meine Ausgabe im Eingabe-Modul sieht jetzt so aus:

Code: Alles auswählen

<?php
if (!isset($counter)) {
  $counter = 0;
}
$counter++;

if (! rex::isBackend()) {
  $items = array();
  $items = ['title' => 'REX_VALUE[2]', 'text' => 'REX_VALUE[id=1 output=php]'];
  rex::getProperty('tabs')->append($items);
// Im Backend wird der Inhalt als Info für den Redakteur angezeigt
} else {
    if ('REX_VALUE[id=2 isset=1]') {
      echo '<h2>REX_VALUE[2]</h2>';
    }
    if ('REX_VALUE[id=1 isset=1]') {
      echo 'REX_VALUE[id=1 output=html]';
    }
  }
?>
Das gibt mir im Frontend auch das aus, was es soll, egal, ob ich HTML oder ein PHP-Script reinschreibe. Nur macht es mir die Tabs dann nicht. Die Ausgabe des Ausgabe-Moduls sieht so aus:

Code: Alles auswählen

<?php
// Im Frontend wird der Inhalt des Arrays ausgelesen und verarbeitet
if (!rex::isBackend()) {
  $items = rex::getProperty('tabs')->getArrayCopy();
  $tabs_title = '';
  $tabs_text = '';
  $tabs_out = '';
  $counter = 1;

  $title_style = 'title';
  $content_style = 'content';
  if ("REX_VALUE[1]" == 'tt' || "REX_VALUE[1]" == 'vt' || "REX_VALUE[1]" == 'bt') {
    $title_style = 'tab-title';
    $content_style = 'tab-content';
  }
  $one_open = ("REX_VALUE[3]" == 'one-open') ? " one-open" : "";

  foreach ($items as $item) {
    if (! isset($item['title'])) { $item['title'] = ''; };
    if (! isset($item['text'])) { $item['text'] = ''; };

    $active_title = '';
    $active_text = '';

    $tabs_title = $item['title'];
    $tabs_text = $item['text'];

    if ($tabs_title != '' && $tabs_text != '') {
      if ($counter == 1) $active_title = ' class="active"';
        $textile = $tabs_text;
        // Bold-Tags werden "missbraucht", um Bootstrap-Labels setzen zu können.
        $textile = str_replace(array('<b>', '</b>', '-&gt;'), array('<span class="label label-primary">', '</span>', '->'), $textile);
        $tabs_out .= '
          <li'.$active_title.'>
          <div class="'.$title_style.'">
            <span>'.$tabs_title.'</span>
          </div>
          <div class="'.$content_style.' text">'.$textile.'</div>
          </li>';
    }
  $counter++;
  }
?>

<section class="<?php if ($this->getTemplateId() == 1) echo 'container clearfix '; ?>tabs">
  <div class="row">
    <div class="col-md-8 col-md-offset-2 col-sm-12">
    <?php
      if ("REX_VALUE[2]" != '') {
        echo '
          <h3>REX_VALUE[2]</h3>';
      }

      if ("REX_VALUE[1]" == 'tt') { // Text-Tabs
        echo '
          <div class="tabbed-content text-tabs">';
      } elseif ("REX_VALUE[1]" == 'vt') { // Vertikale Tabs
          echo '
            <div class="tabbed-content button-tabs vertical">';
      } elseif ("REX_VALUE[1]" == 'bt') { // Button-Tabs
          echo '
            <div class="tabbed-content button-tabs">';
      }
      if ("REX_VALUE[1]" == 'ta') { // Text-Akkordions
        echo '
          <ul class="accordion accordion-2'.$one_open.'">'.
            $tabs_out.'
          </ul>';
      } elseif ("REX_VALUE[1]" == 'ba') { // Button-Akkordions
          echo '
            <ul class="accordion accordion-1'.$one_open.'">'.
              $tabs_out.'
            </ul>';
      } else {
          echo '
            <ul class="tabs">'.
              $tabs_out.'
            </ul>';
      }
      if ("REX_VALUE[1]" == 'tt' || "REX_VALUE[1]" == 'vt' || "REX_VALUE[1]" == 'bt') {
        echo '
          </div>';
      }
      ?>
    </div>
  </div>
</section>

<?php
} else {
    echo '
      <p>Die Ausgabe erfolgt nur im Frontend.</p>';
  }
?>
Ich bräuchte einen Anstoß, wie ich wieder an die Tabs komme. Der Sinn des Ganzen ist es, die Daten aus der Datenbank zu holen und direkt in Tabs auszugeben. Schaut mal hier, da sieht man, was es werden soll:
http://www.ninja4ever.de/index.php?article_id=37
Im Moment muss ich da jedesmal in den Tabellen rumfummeln, wenn ich was zufügen will. Es wäre viel einfacher, die Daten über ein Formular in die DB zu schubsen (kein Problem) und dann über eine Abfrage mit LIKE anzuzeigen (auch kein Problem).
----------
Einen schönen Tag noch - Hatori
http://www.ninja4ever.de

Benutzeravatar
Peter.Bickel
Beiträge: 1856
Registriert: 25. Jan 2005, 21:17
Wohnort: Schleswig-Holstein
Kontaktdaten: Website

Re: Tabs Eingabe mit PHP

23. Jul 2016, 12:21

Bei so vielen Tabs ist das Prinzip meines Moduls natürlich nicht sinnvoll.
Das war dafür gedacht, den Inhalt einiger weniger Eingabemodule als eine Tab-Section auszugeben.

In Deinem Fall wäre es sinnvoll, das in einer eigenen Tabelle zu verwalten, z.B. mit YForm.
Dann musst Du das halt einfach mit einem SQL-Befehl aus der DB holen.
So hast Du im Vergleich zu meinem Tab-Modul auch mehr Möglichkeiten, z.B. beim Sortieren und ggf.zusätzlichen Filtern.

Zurück zu „Module/Aktionen [R5]“