-
Лаборатория
В нашей лаборатории представлены лафхаки, инструкции и просто полезные материалы, которые могут вам потребоваться для создания некоторых областей на вашем сайте.Многие спрашивали как запретить пользователям переходить с видеоролика, вставленного в редактор IPS4, на сайт youtube, по всей видимости чтобы совсем "далёкие" от компьютера пользователи не смогли перейти на сайт ютуба и просматривать (поведенческие факторы наше всё) или скопировать ссылку на видео.
Это мож
.cPost_contentWrap .ipsEmbeddedVideo:before { position: absolute; top: 0px; background: transparent; height: 42px; z-index: 2; content: ''; width: 100%; } .cPost_contentWrap .ipsEmbeddedVideo:after { position: absolute; bottom: 0px; background: transparent; height: 35px; z-index: 2; content: ''; width: 102px; right: 0; }
- 0 комментариев
- 1 280 просмотров
К нам обратился клиент с форумом версии 2.3.6 с кодировкой базы данных cp1251 для обновления его до IPS 4.1. Форум имеет нестандартный дизайн в синих тонах, а так же базы данных организаций на DataLife Engine в качестве главной страницы.
Задача определена следующая: обновить форум до актуальной версией IPS 4.1, перенести форум на главную страницу и перенести каталог организаций в отдельную базу данных на отдельную страницу. Для этих целей будет использовано приложение Pages из комплекта IPS4.
Для начала мы подняли копию в директории, таким образом мы предотвратим возможные недоработки или какие-либо другие неприятные обстоятельства в процессе обновления. Разработан максимально подобный стиль, согласованный с владельцем форума.
Процесс обновления будет разделён на следующие составляющие: 2.3.6 > 3.0.5 > 3.2.3 > 3.4.6 > 4.1.10, кроме того, в процессе обновления кодировка базы данных будет приведена к необходимой - utf-8.
1 Этап - обновление на 3.0.5
Первым делом удалим ненужные файлы и директории от 2.3:
sources skin_acp retail resources modules lofiversion jscripts ips_kernel interface install init.php index.php favicon.ico converge_local admin.php admin Далее загружаем файлы дистрибутива IP.Board 3.0.5.Редактируем конфигурационный файл config_global.php, расположенный в корне форума, а именно:
Удаляем строчку, т.к. она устарела:
$INFO['mysql_codepage'] = 'cp1251'; Вместо неё вставляем:
$INFO['sql_charset'] = 'utf8'; Теперь необходимо сконвертировать кодировку таблиц базы данных и изменить сравнение таблиц. Для этого создаём файл info.php со следующим содержанием:
<?php include("conf_global.php"); $codepage='utf8'; $collation='utf8_unicode_ci'; $dbhost = $INFO['sql_host']; $dbuser = $INFO['sql_user']; $dbpass = $INFO['sql_pass']; $dbname = $INFO['sql_database']; $dbprefix = $INFO['sql_tbl_prefix']; if( !ini_get('safe_mode') ){ @set_time_limit(0); } @header("Content-Type: text/plain; charset=UTF-8"); $dbconn = mysql_connect($dbhost, $dbuser, $dbpass) or die( mysql_error() ); $db = mysql_select_db($dbname) or die( mysql_error() ); $sql = "ALTER DATABASE `".$dbname."` DEFAULT CHARACTER SET $codepage COLLATE $collation"; print "$sql;\n"; $sql ="SELECT table_name FROM information_schema.tables WHERE table_schema = '".$dbname."' AND table_collation NOT LIKE '".$collation."' AND table_name LIKE "."'".$dbprefix."%';"; $result = mysql_query($sql) or die( mysql_error() ); while ( $row = mysql_fetch_row($result) ) { $table = mysql_real_escape_string($row[0]); $sql = "ALTER TABLE $table DEFAULT CHARACTER SET $codepage COLLATE $collation, CONVERT TO CHARACTER SET $codepage COLLATE $collation"; print "$sql;\n"; } mysql_close($dbconn); flush(); ?> Загружаем скрипт в корень форума и обратимся к нему из браузера: site.ru/info.php
На странице мы увидим запросы, которые необходимо сделать во вкладке SQL в Phpmyadmin. Однако, если форум крупный, имеет большое количество данных, запросы для массивных таблиц имеет смысл делать по одиночку. Например, для таблицы сообщений (posts) мы сделали отдельный запрос, а все остальные вместе. После выполнения запросов имеет смысл проверить данные в таблицах, например в той же таблице posts, данные должны быть в правильной кодировке, читаемые.
Есть множество способов перекодирования данных в таблицах, однако этот способ выбран нами не случайно - он зарекомендовал себя при больших данных в таблицах и работает без каких-либо сбоев и ошибок. Кроме того конвертирование можно сделать с помощью программы Supex Dumper, однако это уже другая история..
Теперь переходим на страницу обновления - site.ru/forum/admin/upgrade и приступаем к обновлению скрипта. Процесс обновления завершился без каких-либо проблем.
2 этап - обновление на 3.2.3
Загружаем файлы в корень форума с заменой существующих и обновляем скрипт. Обновление прошло без проблем. Есть один нюанс - если на вашем форуме больше 100 тысяч сообщений, то необходимо делать ресурсоёмкие запросы вручную.
3 этап - обновление на 3.4.6
Загружаем файлы нового дистрибутива в корень с заменой существующих. Обновляем скрипт. Процесс прошёл без каких-либо проблем.
4 этап - обновление на 4.1.10
Перед обновлением изменили версию php на сервере на 5.6. Загружаем файлы дистрибутива и обновляем скрипт. В ходе обновления проблем не возникло.
5 этап - перенос форума в корневую директорию
Для смены URL адреса форума на IPS4 необходимо проделать несколько простых шагов:
Сменить адрес форума в config_data.php; Снять бэкап базы данных, открыть его в Notepad++ и массово изменить адрес старого форума на новый адрес; Воспользоваться инструкций из нашей базы знаний - Смена URL адреса;
- 0 комментариев
- 12 035 просмотров
В данной статье рассмотрим опыт разработчиков, которые предоставили обществу информацию о способе создания блока с темами, отображающими список тем, в зависимости от форума, к котором он расположен.
Данная возможность 'из коробки' отсутствует, т.к. если разместить блок, например популярных тем, на странице форума, то на страницах всех форумов блок будет отображать одни и те же темы.
Однако, Invision Community не настолько однообразен, чтобы не справиться с такой задачей, в данном случае - с помощью HTML логики.
Создание условных блоков
Реализовать данную функцию мы можем с помощью условного блока, который будет некоторой оболочкой других блоков. Этот блок-оболочка будет получать служебную информацию со страницы и отображать на её основе нужный нам блок.
Первым делом нужно создать стандартные блоки лент тем из форумов, для каждого форум свой блок с темами. Вы можете создать список самых комментируемых или просматриваемых тем, зависит от желания, суть от этого не меняет. В поле "Ключ шаблона" у каждого блока необходимо указать forum_x, где х - идентификатор форума, в котором будет отображаться блок.
После этого создаём наш блок-обёртку, Тип которого должен быть Блок, а редактор - HTML. В содержимое блока вставим код:
{{if request.app == 'forums' && request.module == 'forums'}} {{$id = \IPS\Request::i()->id;}} {block="forum_{$id}"} {{endif}} Здесь мы с помощью условия проверяем приложение и модуль 'forums' на странице, которые указывают на то, что пользователь находится на страницах форума. Затем мы используем тег {block="forum_{$id}"}, который подставит блок тем с ID, взятым со страницы.
Осталось сохранить блок и перенести его на страницу просмотра тем форума с помощью менеджера блоков. Если у вас есть интересные идеи создания нестандартных блоков, поделитесь ими в комментариях!
- 0 комментариев
- 905 просмотров
Продолжаем публикации в нашей лаборатории! На этот раз мы расскажем как можно с помощью небольших правок в шаблоне и кастомного php кода устроить складчины на своём сайте, работающем под управлением Invision Community 4.
Модуль складчины для Invision Community 4
Для начала немного текстовой информации, а именно о сути этой модификации для общего понимая о чём речь.
Модуль позволяет вам создавать складчину и вести учёт записавшихся. Как это выглядит:
- 2 комментария
- 1 284 просмотра
Темы в IPS4 имеют некоторый синтаксис, включающий в себя определённые теги, предназначенные для реализации в шаблонах функциональные возможности. Например, в шаблонах вы можете увидеть тег:
{lang="..."} Данный тег предназначен для отображения текстовой строки языка по определённому ключу, который в этом теге указан. Например:
{lang="share_this_comment"} Кроме данного тега, в шаблонах можно встретить массу других. Давайте рассмотрим самые популярные и функциональные, которые вы можете применить при разработке собственной темы или приложения.
Тег {member}
Если вам необходимо отобразить какую-либо информацию о пользователе, то в этом вам поможет именно этот тег. Тег {member} может отображать свойства и вызывать методы объекта пользователя. Пример использования тега:
// Получаем свойство 'name' {member="name"} // Вызываем метод 'link()' {member="link()"} По умолчанию тег {member} работает с текущим авторизованным пользователем, но вы можете передать ID атрибута для отображения какой-либо информации о пользователе:
// Показываем имя пользователя, чей идентификатор - 67 {member="name" id="67"} Тег {expression}
Тег выражения позволяем вам вставлять простые одно-строчные php выражения в шаблон. Например, если переменная является массивом и вы хотите отобразить каждое значение массива с новой строки, вместо написания цикла, вы можете воспользоваться тегом выражения:
{expression="implode( '<br />', $myArray )"} Тег {prefix}
Тег префикса примечателен тем, что он внедрён специально для использования в css файлах. Используется для указания тегов с различными префиксами, предназначенными для браузеров, например, вместо данной конструкции:
.myClass { -webkit-transform: scale(3) rotate(45deg); -moz-transform: scale(3) rotate(45deg); -o-transform: scale(3) rotate(45deg); transform: scale(3) rotate(45deg); } можно использовать тег префикса:
.myClass { {prefix="transform" value="scale(3) rotate(45deg)"} } (Примечание от @Павел) - однако использование данного тега носит спорный характер, т.к. разработчики css - w3.org и разработчики браузеров, вносят огромное количество изменений в поддержку тех или иных CSS тегов в своих браузерах и в стандарт в целом.
Тег {hextorgb}
Продолжая тему CSS, существует тег 'Hex в RGB'. Если вы разработчик тем и хотите использовать значение цвета настройки темы с некоторой прозрачностью, для вас этот тег будет как никогда кстати. Настройка цвета в теме представляет собой простой hex код, например: #ababab. Для того, чтобы сделать некоторую прозрачность, необходимо использовать формат rgba (где буква 'a' называется 'альфа-канал', задающий прозрачность элемента). Тег {hextorgb} сделает это для вас:
{hextorgb="#ff0000"} --> rgb(255,0,0) {hextorgb="page_background" opacity="0.6"} --> rgba(235,238,242,0.6) Тег {truncate}
Тег усечения. Данный тег усекает длину заданного текста (обычно переменная). В конце усечённого текста тег оставляет многоточие (...). Тег имеет некоторые настройки, описанные в данной статье.
- 0 комментариев
- 844 просмотра