Перейти до змісту
Переглянути в додатку

Кращий спосіб перегляду. Дізнатися більше.

IPB-Board.com

Повноекранний додаток на головному екрані з push-сповіщеннями, значками та іншим.

Щоб встановити цей додаток на iOS та iPadOS
  1. Торкніться Піктограма «Поділитися» в Safari
  2. Прокрутіть меню та натисніть Додати на головний екран.
  3. Натисніть Додати у верхньому правому куті.
Щоб встановити цю програму на Android
  1. Натисніть меню з трьома крапками (⋮) у верхньому правому куті браузера.
  2. Натисніть Додати на головний екран або Встановити програму.
  3. Підтвердіть, натиснувши Встановити.

Ciko

Адміністратор
  • Зареєстровано

  • Відвідування

Весь контент Ciko

  1. 1) Для того чтобы что-то перевести для установки, нам потребуется удобный текстовый редактор. Я рекомендую использовать программуNotepad++, скачать её можете тут: " notepad-plus-plus.org ". Почему именно этот редактор? Потому что он бесплатный, работает со всеми популярными языками программирования и подсвечивает ошибки в коде, которые в обычном блокноте можно и не заметить! 2) Теперь нам нужно понять отличие перевода хуков и компонентов (Если речь идёт о переводе и последующей установке). В хуке всё просто, ибо там, как правило, один файл где всё спрятано, редко к хукам прилагаются файлы для загрузки, в которых фраз для перевода я не встречал. Короче, в хуке переводим фразы только в файле самого хука. В компоненте чуть сложнее, там есть несколько файлов, их количество зависит от его крутости. Обычно нужные нам файлы, где спрятаны фразы для перевода находятся в папке "/admin/applications_addon/other/компонент/xml", но это не правило. Бывает некоторые слова и фразы спрятаны и в других файлах, да ещё и зашифрованы, хотя такое я не встречал, для этого придётся искать нужные фразы по всем файлам компонента. И в итоге, получается что, в компоненте переводим фразы в некоторых файлах папки "xml" и в других файлах если есть необходимость.1) Для того чтобы что-то перевести для установки, нам потребуется удобный текстовый редактор. Я рекомендую использовать программуNotepad++, скачать её можете тут: " notepad-plus-plus.org ". Почему именно этот редактор? Потому что он бесплатный, работает со всеми популярными языками программирования и подсвечивает ошибки в коде, которые в обычном блокноте можно и не заметить! 2) Теперь нам нужно понять отличие перевода хуков и компонентов (Если речь идёт о переводе и последующей установке). В хуке всё просто, ибо там, как правило, один файл где всё спрятано, редко к хукам прилагаются файлы для загрузки, в которых фраз для перевода я не встречал. Короче, в хуке переводим фразы только в файле самого хука. В компоненте чуть сложнее, там есть несколько файлов, их количество зависит от его крутости. Обычно нужные нам файлы, где спрятаны фразы для перевода находятся в папке "/admin/applications_addon/other/компонент/xml", но это не правило. Бывает некоторые слова и фразы спрятаны и в других файлах, да ещё и зашифрованы, хотя такое я не встречал, для этого придётся искать нужные фразы по всем файлам компонента. И в итоге, получается что, в компоненте переводим фразы в некоторых файлах папки "xml" и в других файлах если есть необходимость. И есть способ перевода, когда хук или компонент уже установлены, в этом случае всё делается через АЦ. Этот и другие способы рассмотрим дальше. 3) Давайте начнём разбирать непосредственно сам персонализированный перевод, будь то хук или компонент, будь то перед установкой в файлах или после через АЦ. Перевод хука для установки: Открываем файл хука и первое что видим, это кучу информации про наш хук в теге: <config></config>Там название, описание, автор, почта, сайт и т.д Редактируем если нужно, например, название и описание переводим и т.д. под наши нужды. Дальше идёт уже кракозябра хука, её не трогаем. А уже за ней скрываются наши языковые фразы. В теге: <setting></setting>Находятся настройки, которые потом будут в АЦ и которыми вы будете настраивать хук. А в теге: <language></language>Паблик-фразы, которые уже будут отображаться не в АЦ, а на форуме. Теперь подробней что трогать, а что нет. Начнём с названия настроек, то есть что в теге <setting />, сразу пишу теги и что между ними находится: <conf_title_title>Название хука</conf_title_title> <conf_title_desc>Описание настроек хука</conf_title_desc><conf_title_tab>Группа настроек</conf_title_tab>Остальное трогать не рекомендуется. Это что касается кнопки в настройках АЦ, которая будет, например, во вкладке "Модификации". А теперь сами настройки хука, которые так же в теге <setting />, но ниже: <conf_title>Название опции</conf_title><conf_description>Описание опции</conf_description>Это самый простой вариант какой-то опции. Но могут быть всякие выпадающие меню на выбор в настройках, и все эти слова будут находиться между тегами <setting />, так что не должны потеряться. Надеюсь смысл понятен. Публичные фразы хука, которые уже в теге <language />, и тут, запомните, нам нужна только строчка с тегами: <word_default></word_default>Куда что писать? Например, в файле у нас: <language><word_app>core</word_app><word_pack>public_global</word_pack><word_key>membersSidebarStats_likes</word_key><word_default>likes</word_default></language>И вы переводите только ключевое слово, не трогая другие: <word_default>лайки</word_default>Или "лайков", или "баллов репутации", или "баллы репутации", тут уже и начинается другая работа, поймать смысл перевода нашего могучего русского языка с английского неочёмского. Так же и с настройками, заменяете английские фразы в нужных тегах на свои и всё. На этом с переводом хуков всё. Просто сохранили и установили. Проблем особых возникнуть не должно. Перевод компонента для установки: Чтобы перевести компонент нам нужна папка "/admin/applications_addon/other/компонент/xml". Там может быть несколько файлов, и запомните, самые главные это: information.xml - Информация про компонент, как в файле хука в начале. admin_компонент_language_pack.xml - Фразы админки public_компонент_language_pack.xml - Фразы паблика И ещё иногда есть такой, когда настройки не в "admin_компонент_language_pack.xml", а в: компонент_settings.xml - Настройки компонента Что же мы найдём в этих файлах? information.xml - Тут такая же фигня как и в начале файла хука, информация про компонент, только уже в теге: <information></information>Как обычно название, описание, автор и т.д. Но не забывайте про: <public_name></public_name>Публичное название компонента, это перевод кнопки, которая появляется обычно рядом с кнопками "Форумы", "Пользователи", то есть внавигационном меню. Ну и не забываем сохранять файл если редактировали. admin_компонент_language_pack.xml - Фразы, которые будут в АЦ public_компонент_language_pack.xml - Фразы, которые будут на форуме у компонента По содержимому эти два файла одинаковы, вот я их и объединил. Что в них будет? Куча повторяющихся кракозябр, но нам пофигу на них, всё что нам нужно из этого, это то что находится внутри этого тега: <word_default></word_default>Прям как в хуке помните? Вот аналогично между этих постоянно повторяющихся тегов вы будете видеть слова, которые нужно переводить. Например, хлоп, это: <lang><word_app>tournaments</word_app><word_pack>admin_tournaments</word_pack><word_key>add_cat</word_key><word_default>Add Category</word_default><word_custom/><word_default_version>31007</word_default_version><word_custom_version/><word_js>0</word_js></lang>И вы переводите лишь этот кусочек ключевой: Добавить категорию А всё остальное оставляете как есть. Как перевели всё между тегами , сохранили файл, готово. Осталось установить компонент. компонент_settings.xml - Если есть этот файл, значит и компонент не мелкий, и куча настроек. В нём настройки, которые будут в АЦ. Насчёт того что в этом файле, всё то же, что в файлах хуков в части настроек АЦ хука. Можете вернуться и сравнить. Рекомендации точно такие же. Есть конечно ещё и другие файлы, бывает ещё и папка с хуками тут же, которые в свою очередь тоже нужно переводить если есть, ведь там хуки которые с компонентом устанавливаются. Рекомендую так же просматривать оставшиеся файлы на наличие в них фраз для перевода. Перевод установленных хуков и компонентов через АЦ Когда мы хук или компонент установили, переводить немного, и из-за этого переустанавливать неохото, ещё что-нибудь, то можно редактировать языковые пакеты и через АЦ, то есть через наш любимый Админ Центр. Для этого входим в него, жмём сверху в меню "Внешний вид", в выпадающем меню "Языки", тут кстати мы можем экспортировать и импортировать языковые пакеты уже для установленных компонентов, нажимая справа стрелку вниз, и выбирая нужный. Но сейчас не про это, далее тыкаем на наш "Русский" язык. Теперь вы вошли в редактирование языковых пакетов непосредственно через АЦ. Тут мы видем поиск и все разделы. Если речь идёт о переводе компонента, жмём на нужный раздел, где наш компонент, так даже быстрей будет если имеем ввиду перевод множества слов. Если же речь идёт о переводе всего нескольких слов, то гораздо проще использовать поиск, а если переводим какое-то слово из хука, то нам кроме поиска искать то и не чем, то есть если переводим фразу из хука, то ищем через поиск, в разделах только компонентные фразы. Пример. Нужно нам какое-то слово перевести в хуке, ну пусть это слово "Topic", пишем в поиск, ищем, оно находится и строго справа от него будет поле, где вы пишете для этого слова перевод. Слово не обязательно английское, тут вы можете и любое русское слово найти и изменить. Есть недостатки поиска, если в поиск написать какое-то популярное слово, тот же "Topic", то скорей вы замучаетесь искать именно нужное слово по страницам поиска, ибо он много таких слов найдёт. И ещё если какое-то слово ищите, то обязательно соблюдайте регистр, то есть если слово с большой буквы, такое и пишите, и наоборот, ну и не пишите в поиск слова с двоеточиями и другими знаками - не найдёт. Бывает такая проблема, что при изменении языковых пакетов через АЦ вылазит такая ошибка: "Невозможно перевести защищенный пакет языков", то не паникуем и читает эту статью. Исправляется за пару минут. Ну и в заключении бы стоило обратить момент на то, что есть файлы языкового пакета, те же, которые в папке "xml", в них перевод для установки компонента, там ключ каждой фразы, само слово для этого ключа, группа этих слов, там всё ещё относительно понятно, а есть файлы языкового пакета, которые мы экспортируем из АЦ, в которых сплошная каша символов, где ничего не понятно, в них перевод для уже установленного компонента, соответственно из-за каши внутри файла как переводить не ясно. Отсюда вывод, что переводить можно только предустановочные файлы, а не там где уже готовый перевод и конвертация из одного в другое невозможна. Автор статьи: WzGeee
  2. Что бы сделать в боковой панели группу ВК без каких либо хуков и приложений вам не потребуется особых усилий Для этого: Переходим на vk.com/dev/CommunityДелаем виджет, получаем код!!!Идем в АЦ > Настройки > Настройки системы рекламы >Включить систему рекламы - ДАКод для добавления в боковую панель - сюда вставляем кодЖмем применитьИдем в АЦ > Приложения > Управление хуками и влючаем хук Блок рекламы v1.0.0Вывод рекламы в правом блоке на главной страницеЕсли он выключен
  3. Как узнать подходит ли хостинг для форума IPB? MySQL 5.x или выше (на сервере должен быть отключен режим STRICT_TRANS_TABLES)Apache 1.4 или вышеВерсия PHP интерпретатора 5.2 или вышеТакже в архиве с форумом вы найдете папку Tools, там находится файл check_requirements.php, залейте его на ФТП и запустите, он проверит подходит ли хостинг для форума.Какие права CHOMD нужно установить? /cache/ 0777/cache/lang_cache/ 0777/cache/lang_cache/1/ 0777/cache/skin_cache/ 0777/cache/tmp/ 0777/public/style_images/ 0777/public/style_css/ 0777/uploads 0777Для корректной работы форума нужно поставить на эти папки соответствующие права CHMOD[/quote]При обновлении форума возникает ошибка связанная с кодировкой Ваша БД должна быть в UTF-8 формате, чтобы перекодировать её, используйте этот скрипт: <?php// Database infoinclude("conf_global.php");$dbhost = $INFO['sql_host'];$dbuser = $INFO['sql_user'];$dbpass = $INFO['sql_pass'];$dbname = $INFO['sql_database'];//---------------header('Content-type: text/plain');$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 utf8 COLLATE utf8_unicode_ci";$result = mysql_query($sql) or die( mysql_error() );print "Database changed to UTF-8.\n";$sql = 'SHOW TABLES';$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 utf8 COLLATE utf8_general_ci, CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci";mysql_query($sql) or die( mysql_error() );print "$table changed to UTF-8.\n";}mysql_close($dbconn);?>Сохраните его в формате convert.php и запустите по адресу site.com/convert.php При установке форума вылетает белый экран, как быть? В большинстве случаев проблема в требованиях к хостингу, проверьте еще раз соответствует ли хостинг требованиям IPB На 10,11 шаге установки возникает ошибка связанная с кодировкой. Вы создали БД в неправильной кодировке, нужно в utf8_general_ciПосле установки форума у меня появились крякозябры, что делать? В корне форума создайте файл .htaccess с таким содержимымAddDefaultCharset utf-8AddCharset utf-8 *<IfModule mod_charset.c>CharsetSourceEnc utf-8CharsetDefault utf-8</IfModule>Как отключить ЧПУ в IPB? Переходим в файл conf_global.php находим$INFO['use_friendly_urls'] = '1';Заменяем на$INFO['use_friendly_urls'] = '0';Как сменить ссылки на темы с русского на латиницу?Заходим в файл initdata.php и там ищемdefine( 'IPB_USE_SEO_TRANSLIT', FALSE );меняем наdefine( 'IPB_USE_SEO_TRANSLIT', TRUE );При попытке изменить фразу пишет "Невозможно перевести защищенный пакет языков" Чтобы решить данную проблему зайдите в phpMyAdmin и выполните запрос UPDATE core_sys_lang SET lang_protected = 0;
  4. Ciko опублікував тема в 3.4.x
    “Управление” –> “Дополнительные поля профиля” –> “Добавление дополнительного поля”. 2. Прописываем название данного поля, например “Супер защита от ботов”. 3. Составляем описание данного поля: Скопируйте в данное поле цифры с дефисами и без кавычек - “3468-3897-54-913″. Цифры могут быть разными. 4. Ставим тип поля “Однострочное”. 5. Максимальная длина поля: 16. 6. Порядок сортировки: 0. 7. Прописываем формат поля: nnnn-nnnn-nn-nnn. 8. Далее надо поставить вариант “Да” на против двух вопросов: “Это поле обязательно к заполнению?” и “Добавить на страницу регистрации?” 9. Потом ставим отображение поля в сообщении следующим образом {title}: {content}
  5. Ciko опублікував тема в 3.4.x
    Идём по пути: АЦ-Внешний вид-Ваш шаблон-глобальные-quickSearch. Там находим код, в моём случае: <input type='text' id='main_search' name='search_term' class='inactive' size='17' tabindex='6' />Ищите у себя что то подобное..Он там в начале шаблона почти. Перед /> добавляем следующие: x-webkit-speech="" speech="" onwebkitspeechchange="this.form.submit();"То есть в моём случае получилось так: <input type='text' id='main_search' name='search_term' class='inactive' size='17' tabindex='6' x-webkit-speech="" speech="" onwebkitspeechchange="this.form.submit();" />
  6. При копировании текста с сайта добавить в этот текст свою информацию. Другими словами, если кто-то скопирует с вашего сайта текст, скажем, Привет, то при вставке будет что-то вроде Привет Источник: ссылка Решение Нетривиальное. Простейший способ, который работает (что важно). Переходим в АЦ → Внешний вид → ваш стиль Открываем шаблон globalTemplate. Почти в самом начале ищем: //<![CDATA[jsDebug = {parse expression="intval($this->settings['_jsDebug'])"}; /* Must come before JS includes */USE_RTE = 1;DISABLE_AJAX = parseInt({$this->settings['disable_text_ajax']}); /* Disables ajax requests where text is sent to the DB; helpful for charset issues */inACP = false;var isRTL = false;var rtlIe = '';var rtlFull = '';//]]></script>Ниже вставляем: <script type="text/javascript">//<![CDATA[function addLink() {var eBody = document.getElementsByTagName('body')[0];var selection = window.getSelection();// Вы можете изменить текст в этой строчкеvar info = "Источник: <a href='"+document.location.href+"'>"+document.location.href+"</a>";var copytext = selection + info;var newdiv = document.createElement('div');newdiv.style.position = 'absolute';newdiv.style.left = '-99999px';eBody.appendChild(newdiv);newdiv.innerHTML = copytext;selection.selectAllChildren(newdiv);window.setTimeout( function() { eBody.removeChild(newdiv);}, 0);}document.oncopy = addLink;//]]></script>Сохраняем. В строчке var info = "Источник: <a href='"+document.location.href+"'>"+document.location.href+"</a>";можете написать любой свой текст. document.location.hrefзаменится на страницу, с которой текст был скопирован.
  7. Ciko опублікував тема в 3.3.x
    Глобальные --> globalTemplate Находим: <body id='ipboard_body'>Ниже вставляем: <script type="text/javascript">theTime = new Date();theHour = theTime.getHours();theMinute = theTime.getMinutes();if(theHour>=9&&theHour<=17){document.body.style.cssText = "background: #59b0ee url('__ipb-board.com/public/style_images/ваш_стиль/_backgrounds/bg1.jpg') top center repeat-x";}else if(theHour>6&&theHour<9){document.body.style.cssText = "background: #26abf6 url('__ipb-board.com/public/style_images/ваш_стиль/_backgrounds/bg2.jpg') top center repeat-x";}else if(theHour>17&&theHour<21){document.body.style.cssText = "background: #26abf6 url('__ipb-board.com/public/style_images/ваш_стиль/_backgrounds/bg3.jpg') top center repeat-x";}else{document.body.style.cssText = "background: #155e87 url('__ipb-board.com/public/style_images/ваш_стиль/_backgrounds/bg4.jpg') top center repeat-x";}</script>если ваше время: - больше или равно 9 и меньше или равно 17 - устанавливается bg1.jpg из папки _backgrounds - больше 6 и меньше 9 - устанавливается bg2.jpg из папки _backgrounds - больше 17 и меньше 21 - устанавливается bg3.jpg из папки _backgrounds - в остальное время - устанавливается bg4.jpg из папки _backgrounds Не забудьте загрузить сами фоновые изображения в папку _backgrounds вашего стиля! А так же не забудьте поменять в коде http://ipb-board.com/на адрес Вашего сайта /ваш_стиль/
  8. Описание: По стандарту, смайлики в статусах пользователей на главной странице запрещены. То есть, они вообще никак не обрабатываются. Чтобы задействовать их, необходимо открыть файл ./admin/sources/classes/member/status.php Найти: $statuses[ $row['status_id'] ] = $row;Добавить выше: $row['status_content'] = IPSText::getTextClass( 'bbcode' )->preDisplayParse( IPSText::getTextClass( 'bbcode' )->preDbParse( $row['status_content'] ) );
  9. Данная модификация позволит отображать ID (номер) пользователя в информации его профиля. Заходим в: Админцентр > Внешний вид > Ваш стиль > userInfoPane Находим: <li class='post_count desc lighter'> {parse expression="$this->registry->getClass('class_localization')->formatNumber( intval( $author['posts'] ) )"} {$this->lang->words['m_posts']} </li> </if> </ul>Вставляем перед </ul>: <span class="post_count desc lighter">Пользователь №{$author['member_id']}</span>
  10. Заходим в: Админцентр > Внешний вид ˃ Ваш шаблон ˃ Темы ˃ post Находим: <li class='report'> <a href="{$this->settings['base_url']}app=core&module=reports&section=reports&do=show_report&rid={$this->memberData['_cache']['report_temp']['post_marker']['post'][$post['post']['pid']]['info']['id']}" id='post-report-{$post['post']['pid']}' class='ipbmenu'> <span id="rstat-{$this->memberData['_cache']['report_temp']['post_marker']['post'][ $post['post']['pid'] ]['info']['id']}"><img src="{$this->settings['img_url']}/reports/post_alert_{$this->memberData['_cache']['report_temp']['post_marker']['post'][$post['post']['pid']]['gfx']}.png" alt="" /></span> </a> </li> </if> </if>Ниже добавляем: <if test="replyButton:|:$post['post']['_canReply']"> <li style='position:absolute;'><a class='ipsButton_secondary' onmouseover="copyQ('{$post['author']['members_display_name']}', '{$post['post']['pid']}');" href="javascript:ins('{$post['author']['members_display_name']}')">Вставить ник или выделенный текст</a></li> </if>Заходим в: Админцентр > Внешний вид ˃ Ваш шаблон ˃ Темы ˃ topicViewTemplate Находим: <script type='text/javascript'> ipb.topic.fastReplyId = '{$this->settings['_lastEditorId']}';Ниже добавляем: function copyQ( qinf, pid ) { txt=''; if (window.getSelection) { txt=window.getSelection(); } else if (document.selection) { txt=document.selection.createRange().text; } if (txt != "") { txt='[quote name="'+qinf+'" post="'+pid+'"]'+txt+'; } } function ins( name ) { editor = ipb.textEditor.getEditor( ipb.topic.fastReplyId ) if (txt!= "") { editor.insert( txt, true ); } else { editor.insert( "[member="+name+"],", true ); } }
  11. В боковой панеле форума IP.Board отображается дополнительный блок под названием Последние темы. Заголовки последних тем отображаются полность, если у темы длинный заголовок, строка перенесётся на следующую.. Если сократить количество отображаемых символов в заголовках тем в блоке Последние темы, вид блока будет выглядеть намного приятнее.. Для этого необходимо открыть шаблон hookRecentTopics в Список форумов. Находим строку: {$r['topic_title']}Заменяем на: {parse expression="IPSText::truncate( $r['topic_title'], XX)"}Где XX - количество знаков. В примере на скриншоте XX равно 35.
  12. Ciko опублікував тема в 3.3.x
    Заходим в: Админцентр > Внешний вид > Управление стилями и шаблонами > Управление шаблонами > Управление шаблонами и CSS > Темы > post Находим: <li class='report'><a href='{parse url="app=core&module=reports&rcom=post&tid={$this->request['t']}&pid={$post['post']['pid']}&st={$this->request['st']}" base="public"}'>{$this->lang->words['report']}</a></li>Заменяем на: <if test="noselfreport:|:$post['author']['member_id'] != $this->memberData['member_id']"><li class='report'><a href='{parse url="app=core&module=reports&rcom=post&tid={$this->request['t']}&pid={$post['post']['pid']}&st={$this->request['st']}" base="public"}'>{$this->lang->words['report']}</a></li></if>
  13. По-умолчанию в IP.Board 3.2.x на главной странице отображается только пять последних изменений статусов пользователей, благодаря этой статье, вы научитесь изменять их кол-во. Заходим в корневую директорию форума (ФТП): Открываем файл conf_global.php Находим: $INFO['status_sidebar_show_x'] = '5';Значение '5' изменяем на свое.
  14. При обновлении форума до версии 3.3.x, у многих в навигации стало по две вкладки Форумы и Пользователи. Для исправления этого нам потребуется изменить шаблона globalTemplate, находим: {parse variable="forumActive" default="" oncondition="IPS_APP_COMPONENT == 'forums'" value="active"}{parse variable="membersActive" default="" oncondition="IPS_APP_COMPONENT == 'members'" value="active"}{parse variable="helpActive" default="" oncondition="IPS_APP_COMPONENT == 'core' AND $this->request['module'] == 'help'" value="active"}<if test="!ipsRegistry::$applications['forums']['app_hide_tab'] && !count(ipsRegistry::$applications['forums']['app_tab_groups']) && !IPSMember::isInGroup( $this->memberData, ipsRegistry::$applications['forums']['app_tab_groups'] )"><li id='nav_discussion' class='left {parse variable="forumActive"}'><a href='{parse url="act=idx" seotitle="false" base="public"}' title='{$this->lang->words['go_to_discussion']}'>{IPSLib::getAppTitle( 'forums' )}</a></li></if><if test="!ipsRegistry::$applications['members']['app_hide_tab'] && !count(ipsRegistry::$applications['members']['app_tab_groups']) && !IPSMember::isInGroup( $this->memberData, ipsRegistry::$applications['members']['app_tab_groups'] )"><li id='nav_members' class='left {parse variable="membersActive"}'><a href='{parse url="app=members&module=list" base="public" template="members_list" seotitle="false"}' title='{$this->lang->words['go_to_memberlist']}'>{IPSLib::getAppTitle( 'members' )}</a></li></if><if test="applicationsloop:|:is_array($header_items['applications']) AND count($header_items['applications'])"> <foreach loop="applications:$header_items['applications'] as $data"> <if test="showingapp:|:$data['app_show']"> {parse variable="appActive" default="" oncondition="$data['app_active']" value="active"} <li id='nav_app_{$data['app_dir']}' class="left {parse variable="appActive"}"><a href='{parse url="{$data['app_link']}" seotitle="false" base="public"}' title='{parse expression="sprintf( $this->lang->words['go_to_prefix'], IPSLib::getAppTitle($data['app_dir']) )"}'>{IPSLib::getAppTitle($data['app_dir'])}</a></li> </if> </foreach></if>Заменить на: <if test="hasCustomPrimaryNavigation:|:!empty($header_items['primary_navigation_menu'])"> {$header_items['primary_navigation_menu']}<else /> <if test="applicationsloop:|:is_array($header_items['applications']) AND count($header_items['applications'])"> <foreach loop="applications:$header_items['applications'] as $data"> <if test="showingapp:|:$data['app_show']"> {parse variable="appActive" default="" oncondition="$data['app_active']" value="active"} <li id='nav_app_{$data['app_dir']}' class="left {parse variable="appActive"}"><a href='{parse url="{$data['app_link']}" seotitle="{$data['app_seotitle']}" template="{$data['app_template']}" base="{$data['app_base']}"}' title='{parse expression="sprintf( $this->lang->words['go_to_prefix'], IPSLib::getAppTitle($data['app_dir']) )"}'>{IPSLib::getAppTitle($data['app_dir'])}</a></li> </if> </foreach> </if></if>
  15. Этот баг разработчики исправили в новой версии IP.Downloads, которая пока ещё не вышла.. Для исправления этого бага нужно отредактировать файлик category.php, который находится по пути: admin/applications_addon/ips/downloads/modules_public/displНайти Найти код: $this->DB->execute(); while( $row = $this->DB->fetch() )И заменить его на: $res = $this->DB->execute(); while( $row = $this->DB->fetch( $res ) )
  16. При просмотре определенного форума, если нажать на "Загрузить следующие темы", то зачастую следующие темы будут дублироваться с той страницы, на которой вы находитесь. Данная статья поможет вам исправить это. Заходим в: Админцентр > Внешний вид > Ваш стиль > Список тем форума > forumIndexTemplate Находим: <script type='text/javascript'>ipb.forums.fetchMore = {'f': parseInt("{$this->request['showforum']}") ,'st': parseInt("{$this->request['st']}"),'sort_by': "{$this->request['sort_by']}",'sort_key': "{$this->request['sort_key']}",'topicfilter': "{$this->request['topicfilter']}",'prune_day': "{$this->request['prune_day']}"};</script>Заменяем на: <script type='text/javascript'>ipb.forums.fetchMore = {'f': parseInt("{$this->request['showforum']}") ,'st': parseInt("{$this->request['st']}"),'sort_by': "{$this->request['sort_by']}",'sort_key': "{$this->request['sort_key']}",'topicfilter': "{$this->request['topicfilter']}",'prune_day': "{$this->request['prune_day']}",'max_topics': "{$this->settings['display_max_topics']}"};</script>
  17. На многих стилях бывает случается так, что вид у быстрого просмотра сообщений, корявый. Сейчас мы это исправим. Заходим в: Админцентр > Внешний вид > Управление стилями и шаблонами > Управление шаблонами > Прочие > inboxList Найти: <ul class="ipsList_withminiphoto">Добавить перед: <br />
  18. У многих после перехода на версию 3.2.3 и при обновлении шаблонов форума, возникает проблема с регистрационной формой. В этой статье мы исправим это. Заходим в: Админцентр > Внешний вид > Управление стилями и шаблонами > Управление шаблонами > Управление шаблонами и CSS > Регистрация > registerForm Заменяем весь код на этот: {parse js_module="register"}<script type='text/javascript'>//<![CDATA[ipb.register.inSection = "mainform";ipb.register.nameMaxLength = "{$this->settings['max_user_name_length']}";ipb.register.allowedChars = "{$this->settings['username_characters']}";ipb.templates['accept'] = " <span id='[id]_msg' class='reg_msg reg_accept' style='display: none'><img src='{$this->settings['img_url']}/accept.png' alt='' /> [msg]</span>";ipb.templates['error'] = " <span id='[id]_msg' class='reg_msg reg_error' style='display: none'><img src='{$this->settings['img_url']}/exclamation.png' alt='' /> [msg]</span>";//]]></script><div id='register_form'><!--<h1 class='ipsType_pagetitle'>{$this->lang->words['ready_register']}</h1>-->{parse template="registerStepBar" group="register" params="array('register_form' => 'ipsSteps_active', 'confirmation' => '')"}<if test="registerHasErrors:|:is_array( $general_errors ) && count( $general_errors )"><div class='message error'> {$this->lang->words['following_errors']} <ul> <foreach loop="general_errors:$general_errors as $r"> <li>{$r}</li> </foreach> </ul></div><br /></if><form action="{parse url="app=core&module=global&section=register" base="public"}" method="post" name="REG" id='register'> <input type="hidden" name="termsread" value="1" /> <input type="hidden" name="agree_to_terms" value="1" /> <input type="hidden" name="do" value="process_form" /> <input type="hidden" name="coppa_user" value="{$data['coppa_user']}" /> <input type='hidden' name='nexus_pass' value='1' /> <input type='hidden' name='time_offset' id='auto_time_offset' value='0' /> <input type='hidden' name='dst' id='auto_dst' value='0' /> <h1 class='maintitle'> {$this->lang->words['ready_register']} </h1> <div class='ipsBox'> <div class='ipsBox_container ipsPad'> <if test="registerServices:|:IPSLib::fbc_enabled() || IPSLib::twitter_enabled() === true"> <div class='ipsBox_container ipsBox_notice ipsForm ipsForm_horizontal' id='external_services'> <strong class='ipsField_title' id='save_time'>{$this->lang->words['want_to_save_time']}</strong> <div class='ipsField_content'> <ul class='ipsList_inline'> <if test="registerUsingFb:|:IPSLib::fbc_enabled()"> <li><a href="{$this->settings['_original_base_url']}/interface/facebook/index.php?_reg=1"><img src="{$this->settings['img_url']}/facebook_login.png" alt="" /></a></li> </if> <if test="twitterBox:|:IPSLib::twitter_enabled() === true"> <li><a href="{$this->settings['_original_base_url']}/interface/twitter/index.php?_reg=1"><img src="{$this->settings['img_url']}/twitter_login.png" alt="" /></a></li> </if> </ul> </div> </div> </if> <if test="registerHasInlineErrors:|:is_array( $inline_errors ) && ( $inline_errors['username'] || $inline_errors['dname'] || $inline_errors['email'] || $inline_errors['password'] )"> <p class='message error'>{$this->lang->words['reg_errors_found']}</p> <br /> </if> <fieldset> <ul class='ipsForm ipsForm_horizontal'> <li class='ipsField'> <p class='ipsField_content'> <span class='ipsForm_required ipsType_smaller'>* {$this->lang->words['required_field']}</span> </p> </li> <li class='ipsField clear <if test="ieDnameClass:|:$inline_errors['dname']">error</if>'> <label for='display_name' class='ipsField_title'>{$this->lang->words['reg_choose_dname']} <span class='ipsForm_required'>*</span></label> <p class='ipsField_content'> <input type='text' class='input_text' id='display_name' size='45' maxlength='{$this->settings['max_user_name_length']}' value='{$this->request['members_display_name']}' name='members_display_name' /><br /> <span class='desc primary lighter'> <if test="ieDname:|:$inline_errors['dname']"><span class='error'>{$inline_errors['dname']}<br /></span></if> {parse expression="sprintf( $this->lang->words['dname_desc'], $this->settings['max_user_name_length'])"} </span> </p> </li> <li class='ipsField clear <if test="ieEmailClass:|:$inline_errors['email']">error</if>'> <label for='email_1' class='ipsField_title'>{$this->lang->words['reg_enter_email']} <span class='ipsForm_required'>*</span></label> <p class='ipsField_content'> <input type='text' id='email_1' class='input_text email' size='45' maxlength='150' name='EmailAddress' value='{$this->request['EmailAddress']}' /><br /> <if test="ieEmail:|:$inline_errors['email']"><span class='desc'><span class='error'>{$inline_errors['email']}</span></span></if> </p> </li> <li class='ipsField clear <if test="iePasswordClass:|:$inline_errors['password']">error</if>'> <label for='password_1' class='ipsField_title'>{$this->lang->words['reg_choose_password']} <span class='ipsForm_required'>*</span></label> <p class='ipsField_content'> <input type='password' id='password_1' class='input_text password' size='45' maxlength='32' value='{$this->request['PassWord']}' name='PassWord' /><br /> <span class='desc lighter'><if test="iePassword:|:$inline_errors['password']"><span class='error'>{$inline_errors['password']}<br /></span></if>{$this->lang->words['reg_choose_password_desc']}</span> </p> </li> <li class='ipsField clear'> <label for='password_2' class='ipsField_title'>{$this->lang->words['reg_reenter_password']} <span class='ipsForm_required'>*</span></label> <p class='ipsField_content'> <input type='password' id='password_2' class='input_text password' size='45' maxlength='32' value='{$this->request['PassWord_Check']}' name='PassWord_Check' /><br /> </p> </li> </ul> </fieldset> <if test="hasNexusFields:|:!empty( $nexusFields )"> <script type='text/javascript'> var _countriesWithStates = []; <foreach loop="statesJs:$nexusStates as $k => $v"> _countriesWithStates["{$k}"] = 1; </foreach> </script> <hr /> <fieldset> <ul class='ipsForm ipsForm_horizontal'> <foreach loop="fields:$nexusFields as $f"> <if test="isAddressOrPhone:|:in_array( $f['f_column'], array( 'cm_address_1', 'cm_phone' ) )"> <br /> </if> <if test="isText:|:$f['f_type'] == 'text'"> <li class='ipsField clear'> <label for='{$f['f_column']}' class='ipsField_title'><if test="isAddress1:|:$f['f_column'] == 'cm_address_1'">{$this->lang->words['cm_address']}<else /><if test="isAddress2:|:$f['f_column'] == 'cm_address_2'"> <else />{$f['f_name']}</if></if> <if test="textRequired:|:$f['f_reg_require']"><span class='ipsForm_required'>*</span></if></label> <p class='ipsField_content'> <input type='text' class='input_text' id='{$f['f_column']}' size='25' maxlength='255' value='{$this->request[ $f['f_column'] ]}' name='{$f['f_column']}' /> </p> <if test="textErrorMessage:|:$f['f_reg_require'] and $this->request['do'] == 'process_form' and !$this->request[ $f['f_column'] ]"> <span class='error'>{$this->lang->words['err_complete_form']}</span> </if> </li> </if> <if test="isDropdown:|:$f['f_type'] == 'dropdown'"> <li class='ipsField clear'> <label for='{$f['f_column']}' class='ipsField_title'>{$f['f_name']} <if test="dropdownRequired:|:$f['f_reg_require']"><span class='ipsForm_required'>*</span></if></label> <div class='ipsField_content'> <select name='{$f['f_column']}' id='{$f['f_column']}' <if test="isCountry:|:$f['f_column'] == 'cm_country'">onchange='states()'</if>> <foreach loop="options:explode( "n", $f['f_extra'] ) as $k => $v"> {parse variable="selected" default="" oncondition="$k == $this->request[ $f['f_column'] ] or $v == $this->request[ $f['f_column'] ]" value=" selected='selected'"} <option value='<if test="isCountrySelect:|:$f['f_column'] == 'cm_country'">{$v}<else />{$k}</if>'{parse variable="selected"}><if test="isCountryWords:|:$f['f_column'] == 'cm_country'">{$this->lang->words['nc_'.$v]}<else />{$v}</if></option> </foreach> </select> </div> <if test="dropdownErrorMessage:|:$f['f_reg_require'] and $this->request['do'] == 'process_form' and !$this->request[ $f['f_column'] ]"> <span class='error'>{$this->lang->words['err_complete_form']}</span> </if> </li> </if> <if test="isSpecial:|:$f['f_type'] == 'special'"> <li class='ipsField clear'> <label for='cm_state' class='ipsField_title'>{$this->lang->words['cm_state']} <if test="specialRequired:|:$f['f_reg_require']"><span class='ipsForm_required'>*</span></if></label> <div class='ipsField_content'> <input type='text' class='input_text' id='text-states' size='25' name='cm_state' value='{$this->request['cm_state']}' /> <foreach loop="statesCountries:$nexusStates as $country => $_states"> <select name='_cm_state' id='{$country}-states' class='input_select' style='display:none'> <foreach loop="states:$_states as $s"> {parse variable="selected" default="" oncondition="$s[0] == $this->request['cm_state']" value=" selected='selected'"} <option value='{$s[0]}'{parse variable="selected"}>{$s[1]}</option> </foreach> </select> </foreach> </div> <if test="specialErrorMessage:|:$f['f_reg_require'] and $this->request['do'] == 'process_form' and !$this->request[ $f['f_column'] ]"> <span class='error'>{$this->lang->words['err_complete_form']}</span> </if> </li> </if> </foreach> </ul> </fieldset> <script type='text/javascript'> function states() { var c = $('cm_country').value; if ( c in _countriesWithStates ) { $( _display ).style.display = 'none'; $( _display ).name = '_cm_state'; $( c + '-states' ).style.display = ''; $( c + '-states' ).name = 'cm_state'; _display = c + '-states'; } else { $( _display ).style.display = 'none'; $( _display ).name = '_cm_state'; $( 'text-states' ).style.display = ''; $( 'text-states' ).name = 'cm_state'; _display = 'text-states'; } } var _display = 'text-states'; states(); </script> </if> <if test="hasCfields:|<img src='__ipbmafia.ru/public/style_emoticons/<#EMO_DIR#>/7.gif' class='bbc_emoticon' alt=':)' /> is_array( $custom_fields['required'] ) && count( $custom_fields['required'] ) ) || ( is_array( $custom_fields['optional'] ) && count( $custom_fields['optional'] ) )"> <hr /> <fieldset> <ul class='ipsForm ipsForm_horizontal'> <if test="reqCfields:|:is_array( $custom_fields['required'] ) && count( $custom_fields['required'] )"> <foreach loop="custom_required:$custom_fields['required'] as $_field"> <li class='ipsField clear ipsField_{$_field['type']}'> <label for='cprofile_{$_field['id']}' class='ipsField_title'>{$_field['name']} <span class='ipsForm_required'>*</span></label> <div class='ipsField_content'> {$_field['field']} <if test="reqCfieldDescSpan:|:$_field['desc'] != ''"><br /><span class='desc'>{$_field['desc']}</span></if> </div> </li> </foreach> </if> <if test="optCfields:|:is_array( $custom_fields['optional'] ) && count( $custom_fields['optional'] )"> <foreach loop="custom_optional:$custom_fields['optional'] as $_field"> <li class='ipsField clear ipsField_{$_field['type']}'> <label for='cprofile_{$_field['id']}' class='ipsField_title'>{$_field['name']}</label> <div class='ipsField_content'> {$_field['field']} <if test="optCfieldDescSpan:|:$_field['desc'] != ''"><br /><span class='desc'>{$_field['desc']}</span></if> </div> </li> </foreach> </if> </fieldset> </if> <hr /> {$data['qandaHTML']} {$data['captchaHTML']} <hr /> <fieldset> <ul class='ipsForm ipsForm_horizontal'> <li class='ipsField clear ipsField_checkbox'> <input type="checkbox" name="allow_admin_mail" id="allow_admin_mail" value="1" class="input_check" <if test="defaultAAE:|:$this->request['allow_admin_mail'] || !isset( $this->request['allow_admin_mail'] )">checked='checked'</if> /> <p class='ipsField_content'> <label for='allow_admin_mail'>{$this->lang->words['receive_admin_emails']}</label> </p> </li> <li class='ipsField clear ipsField_checkbox'> <input type='checkbox' name='agree_tos' id='agree_tos' value='1' class='input_check' <if test="checkedTOS:|:$this->request['agree_tos']">checked="checked"</if> /> <p class='ipsField_content'> <label for='agree_tos' <if test="ieDnameClass:|:$inline_errors['dname']">error</if>> <strong>{$this->lang->words['agree_to_tos']} <a href='#' id='tou_link'>{$this->lang->words['terms_of_use']}</a></strong> <if test="ieTOS:|:$inline_errors['tos']"><br /><span class='error'>{$inline_errors['tos']}</span></if> </label> <textarea id='tou' class='input_text' style='width: 350px; height: 100px; display: block;'> {$this->settings['_termsAndConditions']} </textarea> </p> </li> </ul> <script type='text/javascript'> $('tou').hide(); </script> </fieldset> <br /> <fieldset> <input type='submit' class='ipsButton' id='register_submit' value='{$this->lang->words['register']}' /> </fieldset> </div> </div></form><script type='text/javascript'> ipb.templates['registration_terms'] = new Template("<h3>{$this->lang->words['reg_terms_popup_title']}</h3><div class='ipsPad' id='tou_popup'>#{content}</div>");</script>{parse template="registerCoppaStart" group="register" params=""}</div>
  19. Переходим в админцентр форума --> Внешний Вид --> Управление стилями --> Ваш стиль --> Список форумов --> boardIndexTemplate Найти: <div id='board_statistics' class='statistics clearfix'>Заменить на: <if test="$this->memberData['member_id']"><div id='board_statistics' class='statistics general_box clearfix'Далее в самом низу шаблона найдите последний закрывающийся оператор </if>, и добавьте рядом с ним такой же оператор..
  20. Ciko опублікував тема в 3.3.x
    Доброго времени суток. Бывает случается так, что вся информация на каком-нибудь стиле смещена влево, в этой статье мы исправим этот небольшой "косяк" для ipb 3.2.x Заходим в: Админцентр > Внешний вид > Управление стилями и шаблонами > Ваш шаблон > CSS > ipb_common.css Находим следующий кусок кода: span.bbc_center, div.bbc_center { text-align: center; display: block; }span.bbc_left, div.bbc_left { text-align: left; display: block; }span.bbc_right , div.bbc_right { text-align: right; display: block; }Заменяем его на: span.bbc_center, div.bbc_center, p.bbc_center {text-align: center; display: block; }span.bbc_left, div.bbc_left, p.bbc_left {text-align: left; display: block; }span.bbc_right, div.bbc_right, p.bbc_right {text-align: right; display: block; }
  21. Открытая форма входа на главной странице форума Данная инструкция поможет вам вывести форму входа на главую страницу форума, как на рисунке. Для этого необходимо внести изменения в globalTemplate, а иенно вынести в него форму входа из showLogInForm. Находим в globalTemplate следующий код: <a href="{parse url="app=core&module=global&section=login" base="public"}" title="{$this->lang->words[" sign_in']}'="" id="sign_in">Заменяем на: <input id="ips_username" type="text" class="input_text" name="ips_username" size="10"" onclick="this.value='';" onfocus="this.select()" onblur="this.value=!this.value?'':this.value;" value="Username"><input id="ips_password" type="password" class="input_text" name="ips_password" size="10" onclick="this.value='';" onfocus="this.select()" onblur="this.value=!this.value?'':this.value;" value="Password"><input type="submit" class="input_submit" value="{$this->lang->words['sign_in']}"><fieldset><input type="hidden" name="auth_key" value="{$this->member->form_hash}"><input type="checkbox" id="remember" checked="checked" name="rememberMe" value="1" class="input_check"></fieldset>
  22. Некоторые обновив версию форума сталкиваются с этим Исправляем вот так! АЦ - Внешний вид - Ваш стиль - globalTemplate Увидеть {parse variable="forumActive" default="" oncondition="IPS_APP_COMPONENT == 'forums'" value="active"}{parse variable="membersActive" default="" oncondition="IPS_APP_COMPONENT == 'members'" value="active"}{parse variable="helpActive" default="" oncondition="IPS_APP_COMPONENT == 'core' AND $this->request['module'] == 'help'" value="active"}<if test="!ipsRegistry::$applications['forums']['app_hide_tab'] && !count(ipsRegistry::$applications['forums']['app_tab_groups']) && !IPSMember::isInGroup( $this->memberData, ipsRegistry::$applications['forums']['app_tab_groups'] )"><li id='nav_discussion' class='left {parse variable="forumActive"}'><a href='{parse url="act=idx" seotitle="false" base="public"}' title='{$this->lang->words['go_to_discussion']}'>{IPSLib::getAppTitle( 'forums' )}</a></li></if><if test="!ipsRegistry::$applications['members']['app_hide_tab'] && !count(ipsRegistry::$applications['members']['app_tab_groups']) && !IPSMember::isInGroup( $this->memberData, ipsRegistry::$applications['members']['app_tab_groups'] )"><li id='nav_members' class='left {parse variable="membersActive"}'><a href='{parse url="app=members&module=list" base="public" template="members_list" seotitle="false"}' title='{$this->lang->words['go_to_memberlist']}'>{IPSLib::getAppTitle( 'members' )}</a></li></if><if test="applicationsloop:|:is_array($header_items['applications']) AND count($header_items['applications'])"> <foreach loop="applications:$header_items['applications'] as $data"> <if test="showingapp:|:$data['app_show']"> {parse variable="appActive" default="" oncondition="$data['app_active']" value="active"} <li id='nav_app_{$data['app_dir']}' class="left {parse variable="appActive"}"><a href='{parse url="{$data['app_link']}" seotitle="false" base="public"}' title='{parse expression="sprintf( $this->lang->words['go_to_prefix'], IPSLib::getAppTitle($data['app_dir']) )"}'>{IPSLib::getAppTitle($data['app_dir'])}</a></li> </if> </foreach></if>Заменить : <if test="hasCustomPrimaryNavigation:|:!empty($header_items['primary_navigation_menu'])"> {$header_items['primary_navigation_menu']}<else /> <if test="applicationsloop:|:is_array($header_items['applications']) AND count($header_items['applications'])"> <foreach loop="applications:$header_items['applications'] as $data"> <if test="showingapp:|:$data['app_show']"> {parse variable="appActive" default="" oncondition="$data['app_active']" value="active"} <li id='nav_app_{$data['app_dir']}' class="left {parse variable="appActive"}"><a href='{parse url="{$data['app_link']}" seotitle="{$data['app_seotitle']}" template="{$data['app_template']}" base="{$data['app_base']}"}' title='{parse expression="sprintf( $this->lang->words['go_to_prefix'], IPSLib::getAppTitle($data['app_dir']) )"}'>{IPSLib::getAppTitle($data['app_dir'])}</a></li> </if> </foreach> </if></if>
  23. При включенной функции слияния сообщений, можно разделить два сообщения картинкой или текстом. Делаем это так. Открыть: /admin/applications/forums/sources/classes/post/classPost.php Найти: $new_post = $last_post['post'].'<br /><br />'.$post['post'];Заменить на: $new_post = $last_post['post'].'<br /><br /><img src="http://ссылка на кртинку" /><br />'.$post['post'];
  24. При нажатии на кнопку Администрация на форуме ipb Может произойти такая ошибка Catchable fatal error: Object of class ipsRegistry could not be converted to string in /home/***/public_html/cache/skin_cache/cacheid_12/skin_stats.php on line 92 Или ошибка сервера 500 Для того чтобы исправить переходим в ACP - Внешний вид - Ваш стиль - Статистика - group_strip Найти: <li><a href="{parse url="showforum={$id}" base="public" template="showforum" seotitle="$this->registry->class_forums->forum_by_id[ $id ]['name_seo']"}">{$name}</a></li>Заменить на: <php>$seoName = $this->registry->class_forums->forum_by_id[$id]['name_seo'];</php>
  25. В данной статье, вы узнаете как сделать подсветку пользователей в чате Shoutbox. Переходим в Ваш шаблон > skin_shoutbox > shout_row и заменяем это: <a href="#" class="at_member" data-store="{$d['members_display_name']}" title="{$this->lang->words['insert_name']}">@</a>на это: <a href="#" class="at_member" data-store="[member={$d['members_display_name']}]" title="{$this->lang->words['insert_name']}">@</a>ББ-коды должны быть включены.

Акаунт

Навігація

Пошук

Пошук

Налаштування push-сповіщень браузера

Chrome (Android)
  1. Натисніть значок замка поруч з адресним рядком.
  2. Натисніть Дозволи → Сповіщення.
  3. Налаштуйте свої налаштування.
Chrome (Комп'ютер)
  1. Натисніть значок замка в адресному рядку.
  2. Виберіть Налаштування сайту.
  3. Знайдіть Сповіщення та налаштуйте потрібні параметри.