PDA

Zobacz pełną wersję : Podział treści na dwie lub więcej kolumn



vereb
30-06-2010, 11:38
Witajcie,

właśnie stanąłem przed problemem podziału treści artykułu na 2 (docelowo pewnie 3 lub 4) kolumny i... odpadłem. Szukałem w necie artykułów dotyczących tego problemu i nie znalazłem. Jedyne pocieszenie to css3, ale efekt ma być na dziś a nie za jakiś czas więc szukam rozwiązania.

Przez głowę przeszło mi kilka pomysłów nie łatwych (może i niemożliwych) do zrealizowania, np.
- wrzucenie treści to tabeli oraz nadanie jej klasy np. "kolumna" po czym zczytanie treści strony przez php, wyłuskanie treści z ww. kolumny i takie dodanie komórek aby trść była wyświetlona w odpowiedniej ilości kolumn (rozwiązanie odpada ze względu na dodawanie do artykułu obrazków, nagłówków i innych elementów formatowanych przez css przez co treść zczytana przez php różni się od treści wyświetlanej czyli podział kolumn się sypie)
- wrzucanie treści artukułu odrazu do tabelki z ustaloną ilością kolumn (komórek)- wyświetlanie sformatowane za pomocą css (minus: problematyczne formatowanie treści w kolumnach, lepiej byłoby to zrobić z automatu)
- wykorzystanie JS do podziału treści- niestety nie znalazłem odpowiedniego skryptu, a w JS raczkuje,
- zastanawiałem się czy istnieje jakiś sposób na zarejestrowanie momentu kiedy tekst znajdzie się poza polem komórki przy użyciu funkcji css overflow:hidden;? Można by to wykorzystać do podziału tekstu i przerzucenia reszty do kolejnej kolumny. <- bubel, przecież overflow dotyczy zmieszczenia się w poziomie... mój błąd

Czy mieliście kiedyś taki problem i jak sobie z nim poradziliście?

vereb
12-07-2010, 11:28
Odpowiem sam sobie- może komuś się przyda :)
Znalazłem rozwiązanie podziału treści na dwie kolumny- działa. Co prawda tekst nie przelewa się automatycznie, ale automatycznie tworzy się tabelka- nie musimy kombinować z jej ustawieniem w każdym artykule. Rozwiązanie pojawiło się na forum.joomla.org ale poniżej podaje po polsku co i jak.
1. tworzymy plik "plugins/content/columns.php"


<?php
defined( '_JEXEC' ) or die( 'Restricted access' );

jimport( 'joomla.plugin.plugin' );

class plgContentColumns extends JPlugin
{
function plgContentColumns( &$subject, $params )
{
parent::__construct( $subject, $params );
}

// before content is sent to the browser, it is wrapped in columns.
function onPrepareContent( &$article, &$params, $limitstart )
{
$plugin = & JPluginHelper::getPlugin('content', 'columns');

// Load plugin params info
$pluginParams = new JParameter($plugin->params);
$cssclass = $pluginParams->get('cssclass', 'columns');

$start_count = substr_count($article->text, "{first-column}");
$end_count = substr_count($article->text, "{last-column}");

if($start_count > 0)
{
if($start_count > $end_count)
{
$article->text = "<p>Missing {last-column}</p>".$article->text;
}
else
{
$pattern = array();
$replace = array();

$pattern[] = "{first-column}";
$replace[] = "<table class=\"".$cssclass."\" cellspacing=\"0\" ".
"cellpadding=\"0\"><tr><td>";

$pattern[] = "{next-column}";
$replace[] = "</td><td>";

$pattern[] = "{last-column}";
$replace[] = "</td></tr></table>";

$article->text = str_replace($pattern, $replace, $article->text);
}
}

return true;
}
}
?>


Plik ten tworzy tabelkę w której będzie treść. Do tabelki odwołujemy się przez wpisanie w treści artykułu {first-column} {next-column} {last-column}
"first-column" i "next-column" tworzy 2 kolumny których wyświetlanie określamy w css

2. Drugi plik jaki tworzymy to: "plugins/content/columns.xml"


<?xml version="1.0" encoding="utf-8"?>
<install version="1.5" type="plugin" group="content">
<name>Content - Columns</name>
<author>Johan</author>
<creationDate>June 2010</creationDate>
<copyright>Use it if you like.</copyright>
<license></license>
<authorEmail></authorEmail>
<authorUrl></authorUrl>
<version>1.0</version>
<description>Column layout for content</description>
<files>
<filename plugin="columns">columns.php</filename>
</files>
<params>
<param name="cssclass" type="text" default="columns" label="CSS Class"
description="The CSS class for the table creating the columns."/>
</params>
</install>


3. Ostatnią rzeczą jest dopisanie danych do bazy danych strony. Aby to zrobić przechodzimy np. do php_my_admin, wybieramy naszą bazę danych i w poleceniach sql wklejamy co następuje :) oczywiście pamiętając o nazwie rekordu (jeśli ustawiliśmy inny prefix musimy go tutaj także zmienić, czyli np. zamiast "jos_plugins" dajemy "naszprefix_plugins").


INSERT INTO jos_plugins (name, element, folder, published)
VALUES ('Content - Columns', 'columns', 'content', 1);


W pliku XML mamy odniesienie do naszego pliku css w którym modyfikujemy wyświetlanie treści artykułu np:


table.columns td {
width: 50%;
padding: 0px 5px 0px 5px;
vertical-align: top; /* this line was added */
}


Całość postu w linku (http://forum.joomla.org/viewtopic.php?p=2162220)
Dzięki dla mp_johan (http://forum.joomla.org/memberlist.php?mode=viewprofile&u=426409&sid=3d887c52b45c77e87f7535b0fff9fcbc)
Pozdrawiam