Форум русской поддержки Joomla!® CMS
07.12.2016, 16:35:55 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Как правильно изменить шаблон модуля modules.php?

 (Прочитано 543 раз)
0 Пользователей и 1 Гость смотрят эту тему.
zeus07
Завсегдатай
*****

Репутация: +8/-0
Offline Offline

Пол: Мужской
Сообщений: 644



« : 02.04.2015, 18:37:34 »

Здравствуйте!

Верстаю сайт. Суть в том, что по макету у каждого модуля сверху и снизу имеются орнаменты. Сначала хотел их просто впилить в шаблон, но не хочется перегружать шаблон кодом. Решил, что лучше изменить файл modules.php.

В него хочу вставить 2 дива, и для каждого из них прописать фоновое изображения. Один div будет отображаться над модулем, другой под мудулем.
Как правильно и после какой строки нужно вставить эти дивы? В PHP разбираюсь на уровне создания шаблонов всего лишь.

Скриншот дизайна во вложении.

Заранее благодарен за помощь.


* TzaGgk9dMvQ.jpg (208.78 Кб, 1024x768 - просмотрено 87 раз.)
Записан
shurikkan
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 39


Joomla-support.ru :: Shurikkan


« Ответ #1 : 02.04.2015, 19:06:23 »

Подобные вещи делаются с помощью псевдоэлеменов CSS before и after.
А modules.php создан совсем для других целей. Да и, по-моему, теперь необходимость его присутствия в приложении под вопросом...

Например:
Код:
<div class="module">
    <div class="title">...</div>
    <div class="content">...</div>
</div>

Добавляем псевдо-блоки ДО и ПОСЛЕ блока с модулем:
Код:
.module {
    margin: 30px 0;
    position: relative;
    ...
}
.module:before {
    display: block;
    position: absolute;
    top: -30px;
    left: 0px;
    width: {n}; /* задаёшь нужную ширину */
    background: url(../..) no-repeat 0 0;
}
.module:after {
    display: block;
    position: absolute;
    bottom: -30px;
    left: 0px;
    width: {n}; /* задаёшь нужную ширину */
    background: url(../..) no-repeat 0 0;
}

Красивый и кроссбраузерный способ добавления элементов дизайна (и не только) на страницу.

Подробнее о псевдоэлементах before и after можно почитать здесь:
http://htmlbook.ru/css/before
http://htmlbook.ru/css/after
« Последнее редактирование: 02.04.2015, 19:12:44 от shurikkan » Записан
zeus07
Завсегдатай
*****

Репутация: +8/-0
Offline Offline

Пол: Мужской
Сообщений: 644



« Ответ #2 : 02.04.2015, 19:10:29 »

Честно говоря, думал об этом, и почему-то решил, что через шаблон модуля будет удобнее, видимо ошибся
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Online Online

Пол: Мужской
Сообщений: 1538


« Ответ #3 : 02.04.2015, 20:09:41 »

Подобные вещи делаются с помощью псевдоэлеменов CSS before и after.

Совершенно необязательно. modChrom_ методы в modules.php как раз таки служат оберткой для модулей, мне так проще добавить пару лишних блоков в шаблон чем морочится с псевдоэлементами. 

А modules.php создан совсем для других целей

Для каких таких целей?

Да и, по-моему, теперь необходимость его присутствия в приложении под вопросом...

Даже если так, подскажите же тогда как же мне оборачивать отдельные модули, выводимые в определенных позициях в сложную HTML разметку?

Пример добавления обертки через modules.php
Код
...
function modChrome_mychrom($module, &$params, &$attribs)
{
   if ($module->showtitle)  {
       echo '<h2>'.$module->title.'</h2>';
   }
   if ($module->content)  {
       echo '<div class="top-block"></div><div class="content">'. $module->content.'</div><div class="bottom-block"></div>';
   }
}
...
 
Я добавил метод с именем modChrome_mychrom в modules.php, котрый добавляет произвольные блоки снизу и сверху модуля. Все что остается сделать это в шаблоне прописать стиль style="mychrom" в нужной позиции:

<jdoc:include type="modules" name="yourposition" style="mychrom" />
Записан
zeus07
Завсегдатай
*****

Репутация: +8/-0
Offline Offline

Пол: Мужской
Сообщений: 644



« Ответ #4 : 02.04.2015, 20:17:47 »

Совершенно необязательно. modChrom_ методы в modules.php как раз таки служат оберткой для модулей, мне так проще добавить пару лишних блоков в шаблон чем морочится с псевдоэлементами. 

Для каких таких целей?

Даже если так, подскажите же тогда как же мне оборачивать отдельные модули, выводимые в определенных позициях в сложную HTML разметку?

Пример добавления обертки через modules.php
Код
...
function modChrome_mychrom($module, &$params, &$attribs)
{
   if ($module->showtitle)  {
       echo '<h2>'.$module->title.'</h2>';
   }
   if ($module->content)  {
       echo '<div class="top-block"></div><div class="content">'. $module->content.'</div><div class="bottom-block"></div>';
   }
}
...
 
Я добавил метод с именем modChrome_mychrom в modules.php, котрый добавляет произвольные блоки снизу и сверху модуля. Все что остается сделать это в шаблоне прописать стиль style="mychrom" в нужной позиции:

<jdoc:include type="modules" name="yourposition" style="mychrom" />

Спасибо за подробный инструктаж, обязательно воспользуюсь. Как по мне, это проще, чем с псевдоклассами возиться.
Записан
zeus07
Завсегдатай
*****

Репутация: +8/-0
Offline Offline

Пол: Мужской
Сообщений: 644



« Ответ #5 : 02.04.2015, 21:00:40 »

Сделал, в папке с шаблоном сделал папку HTML, и туда закинул этот файл modules.php.

В итоге такая ошибка:
Код:
Fatal error: Cannot redeclare modChrome_none() (previously declared in /home/artcolor/artcolorit.com/georg/templates/system/html/modules.php:15) in /home/artcolor/artcolorit.com/georg/templates/georg/html/modules.php on line 18

В чём ошибка?
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Online Online

Пол: Мужской
Сообщений: 1538


« Ответ #6 : 02.04.2015, 21:04:04 »

Две функции с одинаковыми названиями в одной области видимости. Переименуйте modChrome_none в в какой нибудь другой метод с префиксом modChrome_
« Последнее редактирование: 02.04.2015, 21:07:44 от zomby6888 » Записан
zeus07
Завсегдатай
*****

Репутация: +8/-0
Offline Offline

Пол: Мужской
Сообщений: 644



« Ответ #7 : 02.04.2015, 21:07:28 »

Два метода с одинаковыми названиями в одной области видимости. Переименуйте modChrome_none в в какой нибудь другой метод с префиксом modChrome_

Только что попробовал, но по каждому методу такую ошибку выдаёт. Может стоит свой метод перенести в самое начало просто? Или как лучше сделать?
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Online Online

Пол: Мужской
Сообщений: 1538


« Ответ #8 : 02.04.2015, 21:08:47 »

Убрать все остальные, оставить только свой, они уже определены где то раз ругается на них
Записан
zeus07
Завсегдатай
*****

Репутация: +8/-0
Offline Offline

Пол: Мужской
Сообщений: 644



« Ответ #9 : 02.04.2015, 21:12:16 »

Убрать все остальные, оставить только свой, они уже определены где то раз ругается на них

В шаблоне system они определены, поэтому и ругается видимо
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Online Online

Пол: Мужской
Сообщений: 1538


« Ответ #10 : 02.04.2015, 21:18:15 »

Ну, да modules.php из шаблона system подключается в не зависимости от выбранного шаблона
Записан
zeus07
Завсегдатай
*****

Репутация: +8/-0
Offline Offline

Пол: Мужской
Сообщений: 644



« Ответ #11 : 02.04.2015, 21:25:54 »

Оставил файл в шаблоне system, прописал CSS в своём шаблоне, но что-то не отображается ничего. Style в шаблоне прописал для позиции left и right.

Ссылка: http://georg.artcolorit.com/

UPD. Поправил высоту у блоков, и всё отобразилось.

Вам большое спасибо и плюсик в карму за помощь.
Записан
shurikkan
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 39


Joomla-support.ru :: Shurikkan


« Ответ #12 : 02.04.2015, 23:56:42 »

Совершенно необязательно. modChrom_ методы в modules.php как раз таки служат оберткой для модулей, мне так проще добавить пару лишних блоков в шаблон чем морочится с псевдоэлементами. 
...
Интересное мировоззрение.
И правда - кому нужен "чистый" код.
Записан
zomby6888
Живу я здесь
******

Репутация: +168/-3
Online Online

Пол: Мужской
Сообщений: 1538


« Ответ #13 : 03.04.2015, 00:54:35 »

Видимо понятие "чистого кода" для нас несколько отличаются. Я уж не говорю что не все браузеры корректно поддерживают псевдоэлементы, так как сам не оглядываюсь на подобные вещи.
Записан
shurikkan
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Пол: Мужской
Сообщений: 39


Joomla-support.ru :: Shurikkan


« Ответ #14 : 03.04.2015, 15:13:04 »

Я уж не говорю что не все браузеры корректно поддерживают псевдоэлементы.
Before и After близки к абсолютной кроссбраузерности. Я же дал ссылки на htmlbook Azn
Я, как параноидальный консерватор, очень долго не хотел переходить на верстку с использованием псевдоклассов... Но пора уже. IE7 умер.
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet