PDA

Zobacz pełną wersję : szablon i problem w IE



morphic
09-12-2009, 22:39
Witajcie,

Mam problem ze swoim szablonem. Mianowicie sprawa wygląda w sposób nastepujący.
Templatka, a raczej jej główna część ma szerokość 900px. Lewa i prawa kolumna mają po 218 px szerokości,a środkowa kolumna jest w tej chwili ustawiona na 437px. I wszystko wygląda jak chciałem (włącznie z wyświetlaniem w IE). W środkowej kolumnie wyświetlana jest wybrana kategoria z SOBI2.

Problem zaczyna się po wybraniu np Villa Orlik. Karta szczegółowa korzysta z własności środkowej kolumny strony głównej, tak więc ma 437 px szerokości, a chciałbym żeby zajmowała całą szerokość strony.

Kombinowałem już na różne sposoby (wliczając przeglądanie kodu CSS w Firebugu). Obecnie wszyskie kolumny są ustawione na float:left. Po zmianie prawej kolumny na float:right wszystko się rozjeżdża. Po zadeklarowaniu w środkowej kolumnie szerokości na 890px, karta szeczegółowa jest ok, ale rozpada się układ strony głównej. Jeśli środkową kolumnę ustawić na width:auto to w IE prawa kolumna leci na dół.

O co kaman, bo już nie mam pomysłu. 3 px błąd w IE już też sprawdzałem.

Heeelp.

Link do strony (http://pensjonat-ok.pl)

moje
09-12-2009, 22:55
Musisz edytować kod szablonu tak, żeby w przypadku, kiedy z prawej i z lewej strony nie było żadnego modułu, przypisywał środkowemu blokowi większą szerokość.

morphic
09-12-2009, 22:57
To znaczy? Bo nie za bardzo rozumiem:/

Chodzi o CSS?

Mam w nim coś takiego:

.art-contentLayout .art-content
{
position: relative;
margin: 0;
padding: 0;
border: 0;
float: left;
overflow: hidden;
width: 437px;
}
.art-contentLayout .art-content-sidebar1
{
position: relative;
margin: 0;
padding: 0;
border: 0;
float: left;
overflow: hidden;
width: 655px;
}
.art-contentLayout .art-content-sidebar2
{
position: relative;
margin: 0;
padding: 0;
border: 0;
float: left;
overflow: hidden;
width: 655px;
}
.art-contentLayout .art-content-wide
{
position: relative;
margin: 0;
padding: 0;
border: 0;
float: left;
overflow: hidden;
width: 873px;
}

Tu coś szarpać czy w pliku php?

moje
09-12-2009, 23:00
W pliku index.php szablonu musisz to zmienić. Podejrzyj jak to wygląda w szablonach standardowo zainstalowanych w Joomla.

morphic
09-12-2009, 23:01
Tyle, że wszystkie standardowe wywaliłem :) Zaraz sporóbuję doinstalować. Możesz mi ewentualnie podpowiedzieć, czego szukać?

morphic
09-12-2009, 23:12
Przejrzałem index.php w szablonie ja_purity i znalazłem takie coś:


<?php if ($this->countModules('left')): ?>
<!-- BEGIN: LEFT COLUMN -->
<div id="ja-col1">
<jdoc:include type="modules" name="left" style="xhtml" />
</div><br />
<!-- END: LEFT COLUMN -->
<?php endif; ?>

</div>

<?php if ($this->countModules('right')): ?>
<!-- BEGIN: RIGHT COLUMN -->
<div id="ja-col2">
<jdoc:include type="modules" name="right" style="jarounded" />
</div><br />
<!-- END: RIGHT COLUMN -->
<?php endif; ?>

o to chodziło? o te ify?

moje
09-12-2009, 23:32
Tutaj poczytaj jak działają te warunki: http://www.forumweb.pl/viewtopic.php?t=22422

morphic
09-12-2009, 23:51
Co dalej niewiele mi mówi.

Mam takie cosik:


<?php if (artxCountModules($document, 'left')) : ?>
<div class="art-sidebar1"><?php echo artxModules($document, 'left', 'art-block'); ?>
</div>
<?php endif; ?>

i powinienem tam wstawić styl opisujący, czy też poprostu dopisać te linijki podane w tutku, czyli:


<?php if (mosCountModules('left') + mosCountModules('right') <= 0) { ?>

<style type="text/css" media="screen">

/* tu podajemy dodatkowe style korygujące wymiary elementów szablonu w przypadku, gdy ani w pozycji 'left' ani w pozycji 'right' nie ma opublikowanego żadnego modułu */

</style>

<?php } ?>

i tam wstawić styl. I czy jakieś znaczenie będzie miało w którym miejscu pliku będzie to wpisane? Bo left i right są zadeklarowane w różnych miejscach szablonu.

moje
10-12-2009, 00:03
To co przeczytałeś dotyczyło Joomla 1.0.x, poniżej jest kod do Joomla 1.5.x.

Ale mniej więcej taki kod powinieneś wstawić, osobno jeśli nie ma tylko pozycji right, osobno jeśli nie ma tylko left i osobny, jeśli nie ma obu tych pozycji.

Dodajesz tylko kod css odpowiedzialny za szerokość środkowego bloku.

morphic
10-12-2009, 00:20
No i zaczęło działać, aczkolwiek teraz mi się moduły boczne pojawiają również w Sobi :( Ale z tym tematem lecę gdzię indziej.

Wielkie dzięki za pomoc.

No i dalej ****. Jak było tak jest :( dodałem definicję


<?php if($this->artxcountModules('left and right') && !JRequest::getVar( 'sobi2Task', '' )) : ?>

.art-contentLayout .art-content
{
position: relative;
margin: 0;
padding: 0;
border: 0;
float: left;
overflow: hidden;
width: 880px;
}

<?php endif; ?>

i nic się nie dzieje :(

Próbowałem też bez && !JRequest::getVar( 'sobi2Task', '' ) i też nie działa.

zwiastun
10-12-2009, 01:22
ja tam się nie znam, ale coś mi się wydaje, że funkcja w klasie JDocumentHTML nazywa się countModules() a nie artxcountModules().

morphic
10-12-2009, 01:25
poprzednio drążyłem inny temat z Jolą odnośnie wyświetlania modułów na stronie głównej i używam czegoś takiego


<?php if (artxCountModules($document, 'right') && !JRequest::getVar( 'sobi2Task', '' )) : ?>

i to działa.

zwiastun
10-12-2009, 01:32
Dlatego napisałem, "że się na tym nie znam" = może w SOBI2 jest rozszerzenie klasy JDocumentHTML ?

Przeszukałem katalog SOBI2 - nie znalazłem takiego ciągu.
Nie znalazłem tez w /libraries. Ale to jeszcze nic nie znaczy!

morphic
10-12-2009, 01:34
ok, dzięki bardzo, będę szukał :)

zwiastun
10-12-2009, 01:43
http://wiki.joomla.pl/Zliczanie_modu%C5%82%C3%B3w_w_pozycji_modu%C5%82%C 3%B3w

http://wiki.joomla.pl/Zliczanie_modu%C5%82%C3%B3w_w_wielu_pozycjach_modu %C5%82%C3%B3w

Lista obiektów, metod i własności dostępnych w szablonach: http://wiki.joomla.pl/Obiekty_metody_i_w%C5%82asno%C5%9Bci_w_szablonach

zwiastun
10-12-2009, 01:51
ad. wiadomość z godz. 0:00 a co się ma dziać? Kod jest do niczego! Mieszasz kod php z css.
Doczytaj no dokładnie wskazane poprzednio materiały

morphic
10-12-2009, 01:54
Dzięki Zwiastun. Niestety coś mi się widzi, że problem leży nie w tym. Bo mi się templatka widoku szczegółowego (http://pensjonat-ok.pl/index.php?option=com_sobi2&sobi2Task=sobi2Details&catid=9&sobi2Id=1&Itemid=1) wyświetla od prawidłowego momentu. Problem w tym, że korzysta ona z pozycji w arkuszu, w której zadeklarowana jest na sztywno szerokość środkowej kolumny na stronie głównej. Jak tę wartość powiększę, to na karcie szczegółu jest ok, ale rozjeżdża się strona główna. Jak ustawię width na auto - dzieje się tak samo. Wszystkie kolumny mam ustawione na float:left. Jak trzeciej dam float:right, to spada na dół.


<?php if($this->countModules('user1 and user2')) : ?>

tu wstaw kod, który ma się wyswietlić jeśli w pozycjach "user1" i "user2" są opublikowane moduły

<?php endif; ?>

No dobra, ale co mam wstawić, jak nie chcę, żeby mi się tam nic nie wyświetlało. Ten problem mam już głowy, dodając zasugerowane przez Jolę kody do odpowiednich modułów. A tutaj coś mi się czuję, że coś trzeba zrobić z modułem artykułu opisanym przez CSS jako .art-contentLayout .art-content.

zwiastun
10-12-2009, 02:00
Warunek powinien być skonstruowany mniej więcej tak:
if strona startowa to wyświetlaj {
komponent na całej szerokości bez lewej i prawj kolumny;
else
wyświetlaj komponent w kolumnie centralnej oraz lewą i prawą kolumnę
endif;

morphic
10-12-2009, 02:07
Znaczy na startowej wyświetlaj komopnent wraz z lewą i prawą kolumną, a dalej już sam na całą stronę. No to musze gdzieś jakiegoś tutka z PHP dorwać, bo już mi się nie chce zawzięcie myśleć nad tym - męczę się z tym już od 5 dni z mizernym skutkiem.

zwiastun
10-12-2009, 02:10
jak poszukasz na forum to znajdziesz, ze 3 razy pisałem, pisał też malkowitch

morphic
10-12-2009, 02:18
No to pozostało mi ok 12 tys Twoich postów do przeszukania :)

No i nie znalazłem rozwiązania :(

zwiastun
10-12-2009, 02:39
<?php
$menu = & JSite::getMenu();
if ($menu->getActive() == $menu->getDefault()) {
echo 'To jest strona startowa';
}
?>


Kod sprawdza, czy aktualnie przeglądana strona jest domyślną stroną startową.



<?php
$menu = & JSite::getMenu();
if ($menu->getActive() == $menu->getDefault()) :
echo 'To jest domyślna strona startowa';
else :
echo 'To jest inna niż domyślna strona startowa ';
endif;
?>

morphic
10-12-2009, 02:44
Mhm,

czyli


<?php$menu = & JSite::getMenu();if ($menu->getActive() == $menu->getDefault()) { echo artxModules($document, 'left', 'right', 'coś jeszcze'}?>

bo generalnie kolumna środkowa jest zadeklarowana kodem


<?php if (artxHasMessages()) : ?><div class="art-Post">
<div class="art-Post-body">
<div class="art-Post-inner">
<div class="art-PostContent">

<jdoc:include type="message" />

</div>
<div class="cleared"></div>

</div>
</div>
</div>
<?php endif; ?>
<jdoc:include type="component" />

czyli środek jest wyświetlany przez "message" z tego co dobrze rozumiem.

zwiastun
10-12-2009, 02:48
treść glowna=component
message=komunikaty systemowe

morphic
10-12-2009, 02:51
No to się teraz dla odmiany nic nie chce wyświetlać i wywala błąd

morphic
10-12-2009, 02:54
<?php
defined('_JEXEC') or die('Restricted access'); // no direct access
require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'functions.php';
$document = isset($this) ? $this : null;
$baseUrl = $this->baseurl;
$templateUrl = $this->baseurl . '/templates/' . $this->template;
artxComponentWrapper($document);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->language; ?>" lang="<?php echo $this->language; ?>" >
<head>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
<jdoc:include type="head" />
<link rel="stylesheet" href="<?php echo $this->baseurl; ?>/templates/system/css/system.css" type="text/css" />
<link rel="stylesheet" href="<?php echo $this->baseurl; ?>/templates/system/css/general.css" type="text/css" />

<link rel="stylesheet" type="text/css" href="<?php echo $templateUrl; ?>/css/template.css" />
<!--[if IE 6]><link rel="stylesheet" href="<?php echo $templateUrl; ?>/css/template.ie6.css" type="text/css" media="screen" /><![endif]-->
<!--[if IE 7]><link rel="stylesheet" href="<?php echo $templateUrl; ?>/css/template.ie7.css" type="text/css" media="screen" /><![endif]-->
<script type="text/javascript" src="<?php echo $templateUrl; ?>/script.js"></script>
</head>
<body>
<div id="art-main">
<div class="art-Sheet">
<div class="art-Sheet-tl"></div>
<div class="art-Sheet-tr"></div>
<div class="art-Sheet-bl"></div>
<div class="art-Sheet-br"></div>
<div class="art-Sheet-tc"></div>
<div class="art-Sheet-bc"></div>
<div class="art-Sheet-cl"></div>
<div class="art-Sheet-cr"></div>
<div class="art-Sheet-cc"></div>
<div class="art-Sheet-body">
<div class="art-Header">
<div class="art-Header-png"></div>
<div class="art-Header-jpeg"></div>

</div>
<jdoc:include type="modules" name="user3" />
<jdoc:include type="modules" name="banner1" style="artstyle" artstyle="art-nostyle" />
<?php if (!JRequest::getVar( 'sobi2Task', '' ))
echo artxPositions($document, array('top1', 'top2', 'top3'), 'art-block'); ?>
<div class="art-contentLayout">
<?php if (artxCountModules($document, 'left') && !JRequest::getVar( 'sobi2Task', '' )) : ?>
<div class="art-sidebar1"><?php echo artxModules($document, 'left', 'art-block'); ?>
</div>
<?php endif; ?>
<div class="art-<?php echo artxGetContentCellStyle($document); ?>">

<?php
echo artxModules($document, 'banner2', 'art-nostyle');
if (artxCountModules($document, 'breadcrumb'))
echo artxPost(null, artxModules($document, 'breadcrumb'));
echo artxPositions($document, array('user1', 'user2'), 'art-article');
echo artxModules($document, 'banner3', 'art-nostyle');
?>
<?php if (artxHasMessages()) : ?><div class="art-Post">
<div class="art-Post-body">
<div class="art-Post-inner">
<div class="art-PostContent">

<jdoc:include type="message" />

</div>
<div class="cleared"></div>

</div>

</div>
</div>
<?php endif; ?>
<jdoc:include type="component" />

<?php echo artxModules($document, 'banner4', 'art-nostyle'); ?>
<?php echo artxPositions($document, array('user4', 'user5'), 'art-article'); ?>
<?php echo artxModules($document, 'banner5', 'art-nostyle'); ?>
</div>
<?php if (artxCountModules($document, 'right') && !JRequest::getVar( 'sobi2Task', '' )) : ?>
<div class="art-sidebar2"><?php echo artxModules($document, 'right', 'art-block'); ?>
</div>
<?php endif; ?>

</div>
<div class="cleared"></div>

<?php
if (!JRequest::getVar( 'sobi2Task', '' ))
echo artxPositions($document, array('bottom1', 'bottom2', 'bottom3'), 'art-block');
else
echo artxPositions($document, array( 'bottom2', 'bottom3'), 'art-block');
?>
<jdoc:include type="modules" name="banner6" style="artstyle" artstyle="art-nostyle" />
<div class="art-Footer">
<div class="art-Footer-inner">
<?php echo artxModules($document, 'syndicate'); ?>
<div class="art-Footer-text">
<?php if (artxCountModules($document, 'copyright') == 0): ?>
<p>Copyright &copy; 2009 ---.<br/>
All Rights Reserved.</p>

<?php else: ?>
<?php echo artxModules($document, 'copyright', 'art-nostyle'); ?>
<?php endif; ?>
</div>
</div>
<div class="art-Footer-background"></div>
</div>

</div>
</div>
<div class="cleared"></div>
<p class="art-page-footer">Designed by <a href="morphic.pl">Morphic</a>.</p>
</div>

</body>
</html>

Kod strony głównej

zwiastun
10-12-2009, 03:01
wybacz, ale
a) nie rozumiem w ogóle Twojego kodu
b) informacja, że teraz nic się nie wyświetla, nic nie znaczy, bo nie wiadomo, coś wpisał



<?php
$menu = & JSite::getMenu();
if ($menu->getActive() == $menu->getDefault()) : ?>
TU MA BYĆ KOD WYŚWIETLAJĄCY TYLKO KOMUNIKATY SYSTEMOWE I KOMPONENT, A WIĘC:
<jdoc:include type="message" /> <!-- komunikaty systemowe -->
<jdoc:include type="component" /> <!-- tresc glowna -->
<?php
else :
?>
TU MA BYC KOD WYSWIETLAJĄCY WSZYSTKO
<?php
endif;
?>

Szablonu Ci niestety nie napiszę
W pierwszej części objąć treść główną divem z klasą która będzie mieć zdefiniowaną szerokość na cała szerokość szablonu
W części drugiej zastosować to, coś już sobie wypracował

morphic
10-12-2009, 03:09
Źle mnie zrozumiałeś Zwiastuniku. Nie chcę, żeby ktokolwiek pisał za mnie templatkę. Poprostu już mnie załamka bierze przy tym.

Co do kodu, to chcę aby na głównej stronie wyświetlało się wszystko jak leci, a dopiero po wybraniu z v-card jakiejś pozycji, żeby mi boki znikały, a artykuł rozciągał się na całą stronę.

Rozwiązanie przez Ciebie podane ( za co Ci serdecznie dziękuję) wydaje mi się, że rozwali układ innych stronek podczepionych pod menu.

zwiastun
10-12-2009, 03:14
to co masz podane na startowej ma być wszędzie indziej, a to co wszędzie indziej - na startowej. Cała różnica (wynikła z pośpiechu - odwróciłem kod)

morphic
10-12-2009, 03:18
A jak wrzucę, że moduły z lewej i prawej mają być na strartowej, to nie będzię czasem tak, że jak wybierze się z górnego menu jakąś zakładkę to jak coś wstawię na innej stronie z lewej to mi się to nie będzie pokazywać?

zwiastun
10-12-2009, 03:26
To się zdecyduj co chcesz. Bo teraz dostawiasz kolejny warunek.

morphic
10-12-2009, 03:33
No od samego początku piszę, że chce aby na stronie głównej wyświetlały się wszystkie moduły (na reszcie wybieranej z górnego menu też - te zadeklarowane przez admina), a po wybraniu z v-card np Villa Orlik, żeby jej opis wyświetlał się na całą stronę ( na górze z bannerem i menu, a na dole ze stopką). Aktualnie v-cardy korzystają przy wyświetlaniu z definicji CSS ustalającej szerokość bloku na 437px. (Jak się da tą wartość na auto to się strona główna rozjeżdza, tak samo dzieje się przy zadeklarowaniu tej wartości na 880px). Chodzi mi o to, żeby po wybraniu konkretnej oferty wyświetlała się ona na całej szerokości strony (900px) pomiędzy headerem a stopką (w tym miejscu gdzie teraz jest) z tym, że obecnie jej szerokość to właśnie owe 437 px.

Link (http://pensjonat-ok.pl)

zwiastun
10-12-2009, 04:17
Może jest już późno, bo nie łapię:
1. Na startowej (czy Twojej głównej): treść główna + moduły
2. Na niestartowej: nagłówek, treść główna, stopka; po bokach treści głównej nie ma być żadnych modułów.
Jeśli tak, to do tego podałem Ci szkic kodu.
Ale Ty, zdaje się, dokładasz warunek, że jeśli sobie jakieś moduły ustawisz na innych stronach po lewej lub prawej stronie, to one też się będą wyświetlały. Czyli chcesz zjeść ciastko i mieć ciastko. Można, tyle, że po zjedzeniu ma się je chwilowo gdzieś w brzuchu :)

morphic
10-12-2009, 12:35
Zwiastunie, chodzi o to żeby na głównej wyświetlało się wszystko to, co wyswietla się aktualnie, na stronie np "O nas" też to co się wyświetla aktualnie, a po kliknięciu na startowej np w Villa Orlik wyświetlać ma się tylko header, menu, treść główna (rozciągnięta na całą szerokość 900 px) oraz stopka.

A co do ciastek, to nie lubię słodyczy :)

moje
10-12-2009, 13:57
To naprawdę nie jest takie trudne.


<?php if ($this->countModules( 'left and right' )) { ?>
<style type="text/css" media="screen">
/* tutaj styl określający szerokości środka, jeśli oba boki są wyświetlane- np. 50% */
</style>
<?php } else if ($this->countModules( 'left or right' )) { ?>
<style type="text/css" media="screen">
/* tutaj styl określający szerokości środka, jeśli jeden z boków (a drugi nie) jest wyświetlany- np. 75% */
</style>
<?php } else { ?>
<style type="text/css" media="screen">
/* tutaj styl określający szerokości środka, jeśli żaden z boków nie jest wyświetlany- np. 100% */
</style>
<?php } ?>

zwiastun
10-12-2009, 14:05
@moje tak, ale to tylko kawałek rozwiązania problemu, który rozwiązać można w różny sposób (także i ten, wpisując, co podałeś w części nagłówkowej! dokumentu).
Rzecz w tym, że logika szablonu też musi mieć sensownie zapisane swoje warunki.

moje
10-12-2009, 14:22
Ja to wiem, tylko jak to wytłumaczyć komuś, kto tego nie wie?

morphic
10-12-2009, 14:25
Właśnie, bo w tym momencie, jak zadeklaruję style bezpośrednio w index.php, to muszę je wywalić z pliku CSS.

Panowie, bez urazy, ale jakbym wiedział jak to ugryźć, to nie poruszałbym tematu na forum. Moja przygoda z Joomla zaczęła się pół roku temu i na pewno wiem dużo mniej niż Wy. Ale chyba właśnie forum jest od zadawania pytań prawda?

moje
10-12-2009, 14:43
Właśnie, bo w tym momencie, jak zadeklaruję style bezpośrednio w index.php, to muszę je wywalić z pliku CSS. ...
Guzik prawda. W pliku css określasz wszystko oprócz szerokości dla bloku środkowego, a w pliku index.php określasz tylko szerokość dla środkowego bloku.


... Panowie, bez urazy, ale jakbym wiedział jak to ugryźć, to nie poruszałbym tematu na forum. Moja przygoda z Joomla zaczęła się pół roku temu i na pewno wiem dużo mniej niż Wy. Ale chyba właśnie forum jest od zadawania pytań prawda?
Pół roku to dość długi okres czas, po którym nie powinno zadawać się tak błahych pytań. Zwłaszcza, że w internecie jest sporo wartościowych i kompetentnych informacji, a do tego też można zakupić książki o Joomla.

Lenistwo nie jest wytłumaczeniem, tym bardziej, że jak ktoś chce, to w max 2 dni potrafi przyswoić wiedzę z półrocza.

Moja rada, jeśli robisz strony odpłatnie, to zrezygnuj, pomijając braki wiedzy Joomla, są jeszcze braki w html'u, css, php.

EDIT:

I nie jestem tutaj opryskliwy czy niemiły, tylko mówię jak jest naprawdę. Jesli koś robi strony odpłatnie dla innych, to oznacza, ze się na tym trochę zna.

morphic
10-12-2009, 14:52
No spróbuję z tymi wytycznymi danymi przez Ciebie moje. Dzięki bardzo za naprowadzenie. Dumny jestem, że to Ślązak Ślązaka wsparł swoją niepowetowaną wiedzą.

Co do moich braków, to niestety, pamięć ludzka jest zawodna, ale od tego są faktycznie tutki, manuale i inne. Moje pytanie nie wynikało z lenistwa, tylko z goniącego mnie czasu. Jeśli chodzi o HTML, CSS i PHP to niestety nie mam wszystkich komend w głowie, bo i po cobie robić śmietnik.

A pytanko zadałem, bo wiem, że jest wielu bardziej doświadczonych ode mnie programistów, ot co.

W kwestii książek do Joomli wydanych na polskim rynku to niestety ich zawartość pozostawia wiele do życzenia, a firma w której pracowałem (Helion) niestety niczego poza podstawami nie będzie wydawał (wiadomość zweryfikowana). Pozostaje Amazon i publikacje anglojęzyczne.

W każdym razie dzięki za pomoc, wszelkie uwagi i "uszczypliwe komentarze" w moim kierunku. Motywuje to do dalszego zgłębiania tajników Joomli i języków programowania.

zwiastun
10-12-2009, 14:52
Bez urazy, ale:
Oczywiście, forum jest po to, by pytać i odpowiadać. Warunkiem uzyskania porady jest jednak m.in. dobry opis problemu.
W temacie mówisz o problemie z szablonem w IE, a okazuje się, że chodzi w ogóle o działanie szablonu, nie tylko w IE!
Z opisów wynika, ze na stronie głównej (startowej) mają się pokazywać moduły w bocznych paskach), a na innych nie. Potem okazuje się, że na niektóych stronach też mają się pokazywac jakieś moduły w pasku (paskach bocznych), nawet na tych, o których wcześniej piszesz, że nie:
Dowód z Twojego pierwszego opisu: "Problem zaczyna się po wybraniu np Villa Orlik. Karta szczegółowa korzysta z własności środkowej kolumny strony głównej, tak więc ma 437 px szerokości, a chciałbym żeby zajmowała całą szerokość strony. "
To ile ta "karta" ma w końcu zajmować?
Używasz jakiegoś dziwnego kodu, na co zwracałem nocą uwagę - nie raczyłeś rzec słowa objaśnienia: co to za kod, skąd wzięty, czemu służy.
Dostałeś rzeczowe porady i referencje do omówień problemu, ale w chaosie swojego myślenia i prezentacji problemu nie jesteś w stanie nic z tym zrobić. Może zatem siądź pod lipą a odpocznij sobie. Ze świeżym umysłem sam znajdziesz rozwiązanie albo opiszesz swój problem na tyle jasno, żeby było wiadomo, czego naprawdę chcesz tudzież z czym sobie nie umiesz poradzić. Bo teraz ani jedno nie jest wiadome, ani drugie. A na dodatek zgłaszasz jakieś dziwne pretensje do ludzi, którzy usiłują Ci doradzić.


ad @moje:
Rozumiem zirytowanie, ale
To podobno praca na zaliczenie a nie zlecenie :)
Ani pytanie, ani problem nie należy do błahych.
Zarzut o lenistwie jest ad personam, a nie ad meritum i też nie na miejscu!

PS Widzę, że @morphic zdążył już odpisać...

morphic
10-12-2009, 15:07
Jeśli kogoś uraziłem przepraszam, ale nie było w tym jakiejkolwiek zamierzonej przez mnie intencji. Co do jasności umysłu, to fakt, o 3 w nocy czacha już kiepsko pracuje.

Problem starałem się opisać jak najdokładniej mogłem i czytając swoje poprzednie posty faktycznie, trochę, a nawet więcej niż trochę, pogmatwałem.

Geeralnie chodziło mi o to, żeby na stronie głównej środkowa kolumna miała szerokość taką jak teraz ma, czyli 437px. Na postronach wybieranych z menu zostaje tylko nagłówek, menu, stopka, lewa kolumna i środek ( co już jest zrobione i jakoś się nie kaszani, choć środek korzysta z tych zadeklarowanych 437 px, to jego szerokość dopasowuje się do reszty).

Natomiast po wybraniu jakiejkolwiek pozycji ze środkowej kolumny strony głównej przechodzi się do zakładki widoku szczegółowego obsługiwanego przez SOBI2. I ma ona również 437px, choć chciałbym żeby to było załóżmy 880px. I tutaj nie wyświetla się nic poza headerem, menu, stopką i treścią na środku rozciągniętą na te 880 px.

Właśnie się zastanawiam, czy np. czegoś nie kaszani SOBI ze swoimi arkuszami stylów, gdzie szerokości są podane w procentach?

Mam nadzieję, że teraz opisałem sprawę bardziej przejrzyście.

moje
10-12-2009, 15:14
Szerokość w procentach określa odnosi się do nadrzędnej wielkości, czyli jeśli element nadrzędny ma szerokość 500 px, a podrzędny ma 50%, to podrzędny ma szerokość, równą połowie szerokości nadrzędnego elementu (przy zerowych marginesach wewnętrznych i zewnętrznych oraz braku obramowania).

Użyj podanego przeze mnie kodu.

zwiastun
10-12-2009, 15:28
Dobra rada: nie określać szerokości kolumny centralnej - będzie płynna, będzie wypełniać cały dostępny obszar. Szerokość bocznych pasków określać nie w procentach (niezbyt precyzyjna miara, ale w pikselach).
Takie podejście ma jeszcze jeden skutek: teraz dokładnie widać, że podstawa to logika szablonu. CSS to tylko odpowiedź na pytanie jak.

morphic
10-12-2009, 15:59
Czyli tak. Za wyświetlanie środka odpowiada coś tutaj:


<?php if (artxHasMessages()) : ?><div class="art-Post">
<div class="art-Post-body">
<div class="art-Post-inner">
<div class="art-PostContent">

<jdoc:include type="message" />

</div>
<div class="cleared"></div>

</div>

</div>
</div>
<?php endif; ?>
<jdoc:include type="component" />

a dokładniej chyba "component"

Lewą i prawą mam zadeklarowane w różnych miejscach. I gdzie to teraz wstawić, żeby nie posypał się cały układ?

zwiastun
10-12-2009, 16:12
Już Ci kilka razy pisałem - nic mi ten kod nie daje, nie wiem, co to u Ciebie jest
artxHasMessages, choć mogę się domyślać. Nie wiem, do czego Ci służy cały ten nadmiarowy kod: trzy elementy div otaczające blok z komunikatem systemowym. Sory za porównanie, ale to takie brylanty do koronek w kalesonach.
Cały ten fragment może wyglądać po prostu:


<jdoc:include type="message" />
<jdoc:include type="component" />

Jeśli nie będzie komunikatu systemowego to nic się nie będzie wyświetlać, a jeśli będzie, to wyświetli się w standardowy sposób, bez zbędnych ozdobników.

moje
10-12-2009, 16:21
Mój kod między dziale head strony, określ styl dla klasy art-content.

Jola
10-12-2009, 18:06
Witam,
@morphic problem polega na tym, że do nauki wziąłeś szablon nie dość, że niestandardowy (korzystający z własnych funkcji i nazewnictwa) to również bardzo rozbudowany (mnóstwo divów).
Zmieniasz logikę działania szablonu - z opisu wynika, że środkowa kolumna raczej nie lubi wyświetlać się na większą szerokość.
Za pomocą warunków zarządzasz pojawianiem się modułów z prawej strony i powinieneś również zarządzać szerokością kolumny środkowej.
Możesz to zrobić tak jak napisał @moje - stosując warunek adekwatny do wyświetlania prawych modułów definiujesz w sekcji head styl sprawiającego kłopoty diva (wymaga usunięcia z css zdefiniowanych w stylach w head wartości),
albo zdefiniować zmienną odpowiedzialną za szerokość diva.

$szer = 485;
if(twoje_warunki){
$szer=800;
}a potem
<div class="sprawiajacy_klopoty" width="<?php echo $szer;?>"> (wymaga usunięcia z css zdefiniowanych szerokości diva)

morphic
10-12-2009, 23:06
Powiem tak, zaczęło działać jako tako, z tym że teraz zbliżyło się maksymalnie do tematu. Wywaliłem dla środkowej kolumny wartości width i float i zaczęło się wszystko wyświetlać jak należy w FF, O, NN i GC. Pominąwszy doszlifowanie CSS dla Sobi2 detail. :)

Jednak problem istnieje w IE, gdzie prawa kolumna spadła w dół.

Dzięki wszystkim za zaangażowanie.

@Jola - szablon pochodzi z Artisteer.

zwiastun
10-12-2009, 23:14
Prawa kolumna spada w dół, bo brakuje jej miejsca. Wystarczy, że będzie brakować 1px

morphic
10-12-2009, 23:22
No to pozdrowienia dla Panów z MS. Jak jej może brakować pixów, skoro nie ma wogóle określonej szerokości, a wielokrotne divowanie pomaga w automatycznym ustawianiu szerokości?

Ja to bym to wypIE... z rynku tę przeglądarkę. :) Czyli grzebańsko w CSS dla IE.

zwiastun
10-12-2009, 23:25
Co oni nabroili, to nabroili. Nie powód, żebyś i Ty tutaj broił. Jeśli szablon jest poprawnie skonstruowany, powinien się wyświetlać poprawnie także w IE. Jeśłi nie jest, można zaradzić w dwojaki sposób - poprawić konstrukcję tak, żeby nie był zależny od przeglądarki albo dodać style korygujące w IE.

moje
10-12-2009, 23:37
Jeśli mowa o IE6, to zianstaluj ten dodatek: http://extensions.joomla.org/extensions/style-a-design/browsers-a-web-standards/8337 a spolszczenie asz tutaj: http://joomla.pl/forum/attachment.php?attachmentid=1739&d=1250154612.

IE ma to do siebie że 1px ma inne wymiary niż 1px w innych przeglądarkach- od 7 wzwyż to naprawili.

morphic
10-12-2009, 23:38
Mhm, tyle, że oglądam to w IE7 i kolumna też jest niżej. Także gdzieś coś nie kaman w stylu.

zwiastun
10-12-2009, 23:44
@Moje, wybacz, ale od kiedy to IE czy jakakolwiek przeglądarka definiuje rozmiar piksela? Piksel jest punktem na ekranie, definiowanym przez parametry urządzenia wyświetlającego (zwykle ok. 0,28mm), ale nie przez przeglądarki! Na szczęście!

moje
10-12-2009, 23:53
Sam dobrze pamiętam jak szerokość np 200 px wyświetlała się szersza w IE niż w innych przeglądarkach. Spowodowane jest to tym, iż IE traktuje jednostkę px jest jednostką nieskalowalną, jako jedyna przeglądarka.

morphic, spróbuj zmniejszyć margines zewnętrzny/wewnętrzny środkowego bloku o 1, 2 px.

zwiastun
11-12-2009, 00:10
Proszę o jakieś dowody, bo są rzeczy, których w tej mierze nie wiem, ale w aż tak podstawowych kwestiach orientację mam dość dobrą.
Szerokość w IE to problem ze złą interpretacją modelu blokowego (dawniej), a nie interpretacją pikseli. Owszem, IE nie potrafił skalować czcionek (czy innych elementów), których rozmiary ustalono w pikselach, ale to inna bajka!

morphic
11-12-2009, 00:23
W stylu ustawiłem wszystkie marginy, bordery i paddingi na 0


/* begin LayoutCell */
.art-contentLayout .art-sidebar1
{
position: relative;
margin: 0;
padding: 0;
border: 0;
float: left;
overflow: hidden;
width: 210px;
display: inline;
}
/* end LayoutCell */

/* begin LayoutCell */
.art-contentLayout .art-content
{
position: relative;
margin: 0;
padding: 0;
border: 0;
overflow: hidden;
display: inline;
}
.art-contentLayout .art-content-sidebar1
{
position: relative;
margin: 0;
padding: 0;
border: 0;
overflow: hidden;
width: 218px;
display: inline;
}
.art-contentLayout .art-content-sidebar2
{
position: relative;
margin: 0;
padding: 0;
border: 0;
overflow: hidden;
width: 218px;

}
.art-contentLayout .art-content-wide
{
position: relative;
margin: 0;
padding: 0;
border: 0;
overflow: hidden;
width: 880px;
display: inline;
}
/* end LayoutCell */

/* begin LayoutCell */
.art-contentLayout .art-sidebar2
{
position: relative;
margin: 0;
padding: 0;
border: 0;
float: right;
overflow: hidden;
width: 210px;
display: inline;
}
/* end LayoutCell */

i niestety dalej kiszka. Biorę się za przeglądanie CSS z szablonu użytego w SOBI - może tam leży przyczyna.

moje
11-12-2009, 00:42
Nie tylko wielkości czcionek ustawionych w px ale wszystkich wielkości ustawionych w px, a zła interpretacja modelu blokowego, to już osobny błąd.

Jak znajdę, to źródło, obiecuje Ci przedstawić te informacje.

zwiastun
11-12-2009, 00:43
@morphic: proponuję zacząć od jakiejś lektury na temat CSS.
Jedna z podstawowych reguł CSS mówi, że w nazwach selektorów klasy bezpośrednio po kropce musi następować litera, u Ciebie jest jakaś klasa .1. Niestety, przeglądarki takich i podobnych bzdur nie tolerują.

Prawa kolumna wędruje Ci w dół nie tylko w IE, ale we wszystkich 5 przeglądarkach, w jakich sprawdziłem: FF, IE, Opera, Safari, Amaya.

Słowem lecisz w kulki albo zawracasz gitarę.

morphic
11-12-2009, 00:49
Nie lecę w kulki, tylko próbuję coś z tym zrobić. Sprawdź teraz, tylko kasza na IE. Specjalnie ustawiłem prawej kolumnie float na left, żebyście zobaczyli ile tam zostało jeszcze wolnego miejsca.

A co do lektury CSS to ją ostatnio czytam baaaaaaardzo często.

nikszal
11-12-2009, 00:52
Spokojnie panowie, to tylko IE 6. Programiści Microsoftu dali ciała i problem ciągnie się jak smród. Oto powody.

Podwójny margines

Czasem IE 6 podwaja rozmiar marginesu zastosowanego dla elementu pływającego. Problem pojawia się w przypadku marginesu znajdującego się po stronie, na którą przenosimy element – dotyczy lewego marginesu dla elementów z właściwością float ustawioną ma left oraz prawego marginesu dla elementów z właściwością float right. IE 6 ustawione marginesy podwaja. Jeśli układ jest ciasny, z dokładnie wymierzonymi elementami pływającymi umieszczonymi obok siebie, to podwojony margines powoduje upadek elementu pływającego. Dublowanie marginesu zdarza się jedynie w sytuacji , gdy margines elementu dotyka krawędzi zawierającego go bloku. Więc jeżeli element pływający do lewej opływa inny element pływający do lewej jego lewy margines nie zostanie podwojony. Sposobem ominięcia tego błędu jest dopisanie deklaracji:


display: inline;

Błąd 3 pikseli

IE 6 wstawia dodatkowe 3 piksele pomiędzy kolumnę pływającą i niepływającą. Dokładne umiejscowienie luki zależy od tego czy:
Niepływająca kolumna nie ma stałej wysokości i szerokości. Jeżeli nie ma zdefiniowanych wymiarów , 3-pikselowa luka pojawi się między krawędzią kolumny a tekstem wewnątrz tej kolumny. Odstęp ten pojawia się tylko wzdłuż elementu pływającego, więc gdy element pływający się kończy , tekst wraca do lewej krawędzi kolumny. Nie powoduje to większych problemów w formatowaniu.
Kolumna niepływająca ma ustawioną szerokość lub wysokość. Ten błąd jest poważniejszy niż poprzedni, ponieważ ta 3-pikselowa luka może sprawić, że druga kolumna spadnie pod element pływający. Rozwiązanie jest dwuetapowe. Najpierw należy usunąć lewy margines niepływającej kolumny deklaracją:
*html {margin-left; 0;}Następnie należy ustawić prawy margines elementu pływającego na (minus) -3 piksele. Dzięki temu niepływająca kolumna wróci na swoje miejsce

*html #nazwa_bloku {margin-right: -3px;}

Innym sposobem jest przekształcenie wszystkich kolumn w elementy pływające.

Źródło:
David Sawyer McFarland – CSS Nieoficjalny podręcznik
Wydawnictwo: Helion

zwiastun
11-12-2009, 01:06
To teraz pewno jeszcze usłyszę, że ślepy jestem albo przeglądarki mam do kitu. Poprawiło się tylko w FF, w Safari strona rozwalona zupełnie, w Operze prawy pasek spada na dół, więc nie są to błędy, o których pisze @nikszal, w Amaya w ogóle nie chce wyświetlić, wywalając komunikaty o błędach parsowania,
w IE8 prawy pasek nie tylko opada na dól, ale płynie do lewej.

Proponuję znaleźć prostszy szablon, kupić książkę cytowaną przez @nikszala (bardzo dobra!) i zacząć bez mała od podstaw.

nikszal
11-12-2009, 01:15
@zwiastun - to jest szablon zbudowany Artisteerem, tyle, że przerabiany i dorabiany, bo w oryginalnym nie ma tyle bloków. Skutki tych przeróbek są widoczne.

morphic
11-12-2009, 01:18
@Zwiastun - FF 3.5.5. - OK, Opera 10 - OK, Safari 3.0.4 - OK, Chrome - 3.0.195.55 - OK, Netscape Navi - 9.0.0.6 - kasza wogóle, IE 6 - nie wiem, nie mam, IE7- prawa kolumna w dole. Tak to wygląda przynajmniej u mnie na kompie.

morphic
11-12-2009, 01:21
@zwiastun - to jest szablon zbudowany Artisteerem, tyle, że przerabiany i dorabiany, bo w oryginalnym nie ma tyle bloków. Skutki tych przeróbek są widoczne.

@nikszal - przerabiane był minimalnie, właściwie to dodane zostały tylko warunki do SOBI2. Poza tym nietknięty.

A wpadłem na inny szalony pomysł, może spróbować w CSS dla środkowej kolumny użyć czegoś takiego?


width:437px;
w\idth:auto;

zwiastun
11-12-2009, 01:24
Ja widzę, co widzę. Odpuszczam to sobie. Szkoda czasu i miejsca. Ten szablon trzeba napisać od podstaw. Nie dość, że przynajmniej mnie wali po oczach, to jeszcze nie działa. Jaki to ma sens?

nikszal
11-12-2009, 01:29
Trochę to dziwnie wygląda, jak na poprawne formatowanie w FF 3.5.5
http://testsite.nstrefa.pl/screen.jpg

morphic
11-12-2009, 01:30
Działa, bo jak zamiast SOBI2 w górnym menu podepnę do Strony startowej np. przegląd artykułów na startowej to wszystko gra nawet w IE.

@Nikszal - już usunąłem tego dupsa z wyświetlaniem.

zwiastun
11-12-2009, 01:44
@morphic - myślę, że to będzie dobra rada:
@nikszal zna i chyba ma Artisteera. Napisz mu, co chcesz, a on Ci to zrobi.
PS Za nockę możesz zapłacić podwójnie, ale to już szczegół :)

morphic
11-12-2009, 01:49
Zwiastun - Joomla master, przepraszam, że nie prezentuję poziomu, jaki chciałbyś żebym prezentował, ale zaczynam dopiero webmastering i mam nadzieję, że kiedyś dorównam Ci doświadczeniem i wiedzą tak, że będę mógł poczatkującym tłumaczyć co i jak bez zbędnych złośliwości, gdyż z natury nie jestem ani zarozumiały, ani nie wyśmiewam się z kogoś jak mówi, że się na czymś nie zna, albo nie do końca zna. W końcu jakby się wszyscy na wszystkim znali, to między innymi Ty kolego został byś jednym z wielu bezrobotnych w tym kraju.

zwiastun
11-12-2009, 02:23
Nie przesadzaj - w żadnym miejscu ani nie byłem wobec Cię złośliwy, ani tym bardziej się nie wyśmiewam. Projektowanie szablonu to złożone zadanie, wymagające i wiedzy i doświadczenia. Po prostu na tym etapie przerasta Cię i tyle. Problem w tym, że zabierasz się za operowanie wyrostka robaczkowego, a nie dysponujesz odpowiednimi kwalifikacjami. I chcesz zdobyć w 2-3 dni coś, co się zdobywa dużo dużo dłużej.
Pisałeś, że musisz to zrobić na jakieś zaliczenie (miałeś podobno na wczoraj!). Mnie się tam w to wierzyć nie chce, ale jeśli bujasz, to Twoja sprawa nie moja. Szybkie załatwienie sprawy to po prostu zlecenie komuś, kto to potrafi zrobić.
@Nikszal pomagał tu niejednemu, spędzając na pomocy niejedną nockę. Tekst o podwójnej zapłacie był żartem.
A koszt? Ja Ci tu nic liczyć nie chcę, ale policz sobie sam, ile bezsensownie spędziliśmy nad tym wątkiem: @moje, @jolaass, @nikszal, ja.
Bezsensownie, bo postępu żadnego i nie dlatego, że dostajesz złe rady, ale dlatego, że pewno jeszcze nie czas, byś mógł z nich korzystać.

morphic
11-12-2009, 02:25
No i problem rozwiązany, bez zbędnych kombinacji w kodzie.

Dla potrzebujących wskazówki rozwiązanie.

Dla prawej kolumny należy zmienić wartość position z relative na absolute.
Następnie dodać wartości:

top: 0px;
left: Xpx; X- w zależności od szerokości szablonu, należy wyliczyć ręcznie, albo próbować metodą prób i błędów.

I tak oto ten wielki hack powoduje, że w Operze, FF, Chrome i IE wyświetla się wszystko tak samo.

zwiastun
11-12-2009, 02:32
Pasek wskoczył. A reszta? Na kolejnych stronach masz zamiast pełnej szerokości paski do połowy obszaru głównego.

morphic
11-12-2009, 02:39
Nie przesadzaj - w żadnym miejscu ani nie byłem wobec Cię złośliwy, ani tym bardziej się nie wyśmiewam.

Tak to odebrałem


Projektowanie szablonu to złożone zadanie, wymagające i wiedzy i doświadczenia. Po prostu na tym etapie przerasta Cię i tyle.

Wybacz, ale templatkę zmajstrowałem już niejedną i to nie tylko do Joomli, ale i innych CMS-ów. Użyłem Artisteera, bo miało być szybko i co jak widać okazało się zgubne. A że przy okazji uczę się Joomli to chyba nic złego?


Problem w tym, że zabierasz się za operowanie wyrostka robaczkowego, a nie dysponujesz odpowiednimi kwalifikacjami.

Tak a propos braku złośliwości i uszczypliwości z Twojej strony ;)


Pisałeś, że musisz to zrobić na jakieś zaliczenie (miałeś podobno na wczoraj!). Mnie się tam w to wierzyć nie chce, ale jeśli bujasz, to Twoja sprawa nie moja.

I owszem na zaliczenie. Napisałem Ci zresztą wczoraj na PW, że może będę rozwijał tę stronkę dalej i jakiś biznes pod nią podepnę. A, że przy okazji uczę się pewnych rzeczy to chyba tylko in plus, IMO.


@Nikszal pomagał tu niejednemu, spędzając na pomocy niejedną nockę. Tekst o podwójnej zapłacie był żartem.
A koszt? Ja Ci tu nic liczyć nie chcę, ale policz sobie sam, ile bezsensownie spędziliśmy nad tym wątkiem: @moje, @jolaass, @nikszal, ja.

I nikomu nie umniejszam, a jednocześnie pragnę bardzo podziękować wszystkim, którzy zaangażowali się w ten wątek. Jak widać brnęliśmy trochę nie w tym kierunku, ale może Wasze sugestie przydadzą się w przyszłości komuś innemu, a nie wykluczam, że również może i mnie.


Bezsensownie, bo postępu żadnego i nie dlatego, że dostajesz złe rady, ale dlatego, że pewno jeszcze nie czas, byś mógł z nich korzystać.

No trochę bezsensownie, bo próbowaliśmy taranem wywalić otwarte drzwi. Rozwiązanie okazało się prostsze niż się wydawało, a ja - niedouczony amator - wpadłem na nie przypadkiem i może również okaże się to komuś pomocne. Nie twierdzę, że rady były złe, ale być może szerokim łukiem podchodziły do tematu. Tak więc nie mogąc z nich korzystać próbowałem wykorzystać swoje mizerne doświadczenie. :)

Reasumując, raz jeszcze dziękuję za pomoc wszystkim, a Tobie Zwiastunie szczególnie i przepraszam za zawracanie gitary.

Obiecuję przyszłościowo o bardziej precyzyjne formułowanie problemów.

Pozdrawiam

morphic
11-12-2009, 02:45
Pasek wskoczył. A reszta? Na kolejnych stronach masz zamiast pełnej szerokości paski do połowy obszaru głównego.

No bo nie wiem co się kuna dzieje, że artykuły wyświetlają się jako prawa kolumna?

Już działa - wystarczyło usunąć width dla prawej kolumny.

zwiastun
11-12-2009, 02:50
To ostatnie to komentarz do mojej złośliwości i uszczypliwości?

PS Wygląda na to, że dziala, choć masz za krótkie teksty, żeby to sprawdzić na pewno.
Strona O nas
w FF tekst wpływa pod moduł
w IE nie
W Safari też nie
Na stronie głównej walidator html/XHTM wywala 70 błędów, efekt: w rygorystycznej Amaya dalej strona się wysypuje

morphic
11-12-2009, 03:00
Jak już wspomniałem wcześniej, nie jestem ani mściwy ani złośliwy.

A wyjeżdzanie za moduł jakoś rozwiążę - margin, padding albo coś.