Таблица лидеров
Популярные публикации
Отображаются публикации с наибольшей репутацией начиная с 07/01/10 во всех областях
-
13 балловКогда-то давно я пришла на ibresource и выложила бесплатные скины под 1.3. Свои, без копирайтов даже, мне приятно было, если кому-то они пригодятся..... Просто так. Без корысти. Это было в 2005-м. В общем, тогда для меня предметом гордости было, что спустя три месяца перевели в группу ipb specialist. Потом там группу упразднили. Но мы ее реанимировали. Здесь.
-
5 баллов{{if !isset(\IPS\Output::i()->metaTags['og:image'])}} {{preg_match('~<img[^>]*?src="(<fileStore.core_Attachment>([^"]*))"[^>]*>~i', $comment->content(), $matches); }} {{if isset($matches[1])}} {{\IPS\Output::i()->parseFileObjectUrls($matches[1]);}} {{\IPS\Output::i()->metaTags['og:image'] = $matches[1];}} {{endif}} {{endif}}
-
5 балловИногда на форуме требуется создание индивидуальных статических страниц, сохраняя оформление форума. Для этого советуют использовать (DP31) Custom Pages или IP.Content. Это оправдано, когда пользовательские страницы необходимо в определенном количестве. Для одной одной или двух страниц, покупать IP.Content или разбирается с (DP31) Custom Pages не совсем оправданно. Есть два способа быстрого создания таких страничек. Правильный способ, через регистрацию своего приложения через административную панель но есть другой "неправильный" способ. Быстрый и простой. Для начала рассмотрим неправильный способ. Стоит задача сделать свою страницу по адресу "ваш форум/MyCustomPage/". Создаем папку MyCustomPage. В папку кладем файл, например index.php со следующим содержанием: <?php define( 'IPB_THIS_SCRIPT', 'public' ); require_once( '../initdata.php' ); require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' ); require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' ); $registry = ipsRegistry::instance(); $registry->init(); $registry->output->setTitle('Ваше название'); $registry->output->addContent('Ваш контент'); $registry->output->sendOutput(); ?> 'Ваш контент' - содержание вашей страницы. Здесь может быть любой текст или простой html код. Главное что бы в нем не присутствовала одиночная кавычка ( ' ). Если код html сложный, используется пользовательский CSS и javascript, то в $registry->output->addContent('Ваш контент') меняем 'Ваш контент' на переменную $content. $content может содержать массив, результат из базы данных или другие данные. Получаем следующий пример. <?php define( 'IPB_THIS_SCRIPT', 'public' ); require_once( '../initdata.php' ); require_once( IPS_ROOT_PATH . 'sources/base/ipsRegistry.php' ); require_once( IPS_ROOT_PATH . 'sources/base/ipsController.php' ); $content = <<<BLK Ваш контент BLK; $registry = ipsRegistry::instance(); $registry->init(); $registry->output->setTitle('Название'); $registry->output->addContent($content); $registry->output->sendOutput(); ?> Здесь $content информация которая находится в блоге между BLK. Ваша первая "Пользовательские страница" на IP.Board 3 готова. Осталось поместить ее в меню: Добавление своих ссылок в верхнее меню форума IPB 3.0 Важно: ссылка на вашу страницу, должна быть полной. Если вы создали файл index.php в папке MyCustomPage, то короткая ссылка "ваш форум/MyCustomPage/" вызовет ошибку. А ссылка "ваш форум/MyCustomPage/index.php" откроет нужную страницу. Название папки и имя файла может быть произвольным. Источник: community.invisionpower.com и моя обработка полученных знаний :) Продолжение: Регистрируем персональные страницы для IP.Board 3
-
5 балловВ тегах русская буква б воспринимается как запятая. И поэтому тег с этой буквой делится на два бессмысленных. Исправляем. (не работает) admin\applications\forums\extensions\search\engines\sql.php найти if( $search_tags ) { IPSSearchRegistry::set('opt.noPostPreview', true); } заменить на if( $search_tags ) { IPSSearchRegistry::set('opt.noPostPreview', true); IPSSearchRegistry::set('set.returnType', 'tids' ); } Исправляем глюк с ъ в визуальном редакторе. Это проявляется в Опере public\js\3rd_party\ckeditor\ips_config.js ищем if ( inACP ) { config.extraPlugins = 'ipsbbcode,ipsquote,ipscode,ipsmedia,ipsoptions'; } else { config.extraPlugins = 'ipsbbcode,ipsquote,ipscode,ipsmedia,ipsautosave,ipsswitch,pastefromword,ipsemoticon'; } добавляем после if(CKEDITOR.env.opera){ delete config.blockedKeystrokes[config.blockedKeystrokes.indexOf(CKEDITOR.CTRL + 66)]; for(var r in config.keystrokes) if(config.keystrokes[r][0]==CKEDITOR.CTRL + 66 && config.keystrokes.splice(r,1))break; } Топорное исправление для 3.2.3 public\js\3rd_party\ckeditor\ckeditor.js ищем i.blockedKeystrokes=[1000+66,1000+73,1000+85]; меняем на i.blockedKeystrokes=[1000+73,1000+85]; ищем и удаляем [1000+66,'bold'], Все. Руссификация При подписке на уведомление, приходят битые ссылки. Заходим в АЦ - Управление языками Ищем строку строку с ключом: subs_with_post Заменить <#BOARD_ADDRESS#>?showtopic=<#TOPIC_ID#>&view=getnewpost на <#URL#> В IE8 вылезает такой глюк. Причина в тексте "ПОПУЛЯРНАЯ ТЕМА" - ломает верстку. И "ЗАФИКСИРОВАНО" - не удачный перевод. Для сравнение английский вариант Исправляет, подбирая новые короткие слова на свой вкус :)
-
5 балловПосле создание темы в блоге "Пользовательские страницы на IP.Board 3", постоянно получаю в личку просьбу продолжить тему. Для простых страничек, лучше использовать старый совет. Если надо сделать, что-то сложное, с PHP логикой, работа с базой данной, то можно использовать следующее решения: Создаем новое, простое приложение MyCustomPage. В admin/applications_addon/other/ создаем папку mycustompage Как правило приложения включают в себя следующие разделы (папки): extensions modules_admin modules_public setup skin_cp Для начала, мы создадим две папки. modules_public skin_cp В skin_cp положим иконку appIcon.png. Иконку можно взять в любом приложение, хотя все будет работать и без нее. Иконка применяется в АдминЦентре в списке приложений. В modules_public создаем одну папку, назовем ее например modulename В этой папке создаем два файла. Первый основной (он должен быть всегда): defaultSection.php <?php $DEFAULT_SECTION = 'firstname'; ?> firstname - имя второго файла. Относительный путь на сайте у него будет admin/applications_addon/other/mycustompage/modules_public/modulename/firstname.php Это важно: mycustompage - Директория всего приложения modulename - Имя директории, содержащей файлы модуля (Ключ модуля) firstname.php - Имя файла Это название отражается и в главном классе файла firsname.php class public_mycustompage_modulename_firstname extends ipsCommand Понятно, что название могут быть любые. Но замена название в одном месте, должно быть заменено везде, где оно фигурирует. И сам файл firstname.php <?php if ( ! defined( 'IN_IPB' ) ) { print "<h1>Incorrect access</h1>You cannot access this file directly. If you have recently upgraded, make sure you upgraded all the relevant files."; exit(); } class public_mycustompage_modulename_firstname extends ipsCommand { public function doExecute( ipsRegistry $registry ) { $this->output = "Текущая дата: " .strftime('%d %B %Y'); // Здесь формируем контент $this->registry->output->setTitle( "Название" ); $this->registry->output->addContent( $this->output ); $this->registry->output->sendOutput(); } } ?> Можно сказать это необходимый минимум. Мы не описали lang - файлы, не подключили свой шаблон. Но уже такое решение, вполне рабочее. Теперь надо только рассказать IP.Board, что у нас есть "готовое" приложение. Для этого идем в АЦ Панель управления > Приложения > Управление модулями > Список модулей > Приложения -> Добавить приложение My Control Panel > Applications & Modules > Manage Applications & Modules > Applications -> Add New Application В этой форме, важны два поля Публичное имя приложения ( Application Public Title ) - имя под котором приложение будет присутствовать в меню. Директория приложения ( Application Directory ) - место где находится наше приложение. И он же адрес странички: /index.php?app=mycustompage Но в данный момент приложение доступно только по прямой ссылке, в меню ссылка еще не работает. Регистрируем публичный модуль нашего приложения. Добавить публичный модуль Здесь важно правильно написать Ключ модуля (Module Key) и естественно включить модуль: Модуль включен? (Module Enabled). Для безопасности во все вновь созданные директории, можно положить защитные (пустые) файлы index.html Вот и все. Будет ли продолжение? Не знаю. Не сделано многое. Нет администраторского модуля, нет своих языковых файлов. Одним словом нечего нет. Буду делать, конкретное приложение для себя, то выложу его исходники и опишу. Если не будет задачи, описывать сферического коня в вакууме, не очень интересно Повторюсь, для простых вещей, гораздо удобнее решение описанное здесь: Пользовательские страницы на IP.Board 3 Для сложных решений, проще использовать IP.Content. Проще и быстрей. Он стоит своих денег.
-
4 балла
-
4 баллаУ разработчиков IPB (http://www.invisionpower.com/) любая локализация бесплатна, так как делается добровольцами всего мира. И я в том числе что-то немного перевожу для себя, и делюсь этим с другими (трекер, документация к ip.content, другие переводы дополняю). Мы все так делаем, во всех странах. Только IBResourcе продают локализацию, единственные в мире. Но они не разработчики форума, они перепродают лицензии, купленные оптом на свой аккаунт (оптом – раза в три дешевле), переводят с английского силами гастербайтеров фрилансеров, организуют плохонькую техподдержку и немного тюнят движок (часто лучше бы этого не делали, с вконтакте вначале была полная лажа в виде переопределения базовых шаблонов, что делало форум несовместимым со сторонними скинами). При этом все больше приятных новшеств IPS действуют только для купивших напрямую, а IBR трет на форуме темы с вопросом, обеспечивает ли русская лицензия доступ к ресурсам из админки через IPS Marketplace App. Потому что ни фига не обеспечивает. С продаж они имеют профит, но реально заинтересованы в денежных клиентах (которые купят VIP обслуживание), а не в школоте, сэкономившей на школьных завтраках на покупку форума и не собирающейся приобретать услуги сверх (активная лицензия предполагает бесплатный набор действий техподдержки – но, когда мелких много, нужен большой штат саппорта – а на какие шиши...). IBResourcе не являются официальными представителями, они просто легальные барыжники (любой может много купить и 26-я лицензия уже будет стоить 49 вместо 149). Можете спросить на форуме http://community.invisionpower.com/forum/305-pre-sales-questions/. Кстати, там их практически никто не знает, так как ведут себя тихо и не светятся. Персонал вначале отвечает на вопрос, можно ли покупать у русских представителей, что не слышали о таких и вообще через третьи руки покупать не рекомендуют. Потом Бфарбер появляется и вспоминает, что да, когда-то давно ИБРы скупили много лицензий оптом, а теперь их продают. Возможно, и он уже забыл. Вот аккаунт, через который куплены все "русские лицензии". Всего навсего малозаметный клиент, даже без статуса developer. Надо ли с ними связываться, каждый решает сам. Многие покупают "русскую лицензию" только ради русской техподдержки. Но устройте опрос, довольны ли они ею потом. Самые хитрые покупают английскую лицензию (на самом деле других и не бывает), а перевод, ради русской админки (хотя он жуткий), вытаскивают из варезных дистрибутивов ибров. Источник: Купить форум у IBR, а модули у IPS
-
4 баллаЭтот шаблон используется в архиве и ip.content. В блогах используется свой шаблон, вконтактик нормально вставить не вышло. Пример тут.
-
3 баллаhttps://invisioncommunity.com/files/file/8547-sd-image-host/ Даже смог изображение с старой версии перенести без каких либо проблем на новую, правда пришлось это делать вручную. (Делал бекап старой таблицы, правил код ручками и импортировал обратно)
-
3 баллаОбращались за помощью с адаптацией старого приложения под последнюю версию форума. Все выполнено очень грамотно, приложение было переписано с нуля, добавлен весь необходимый функционал. Огромное спасибо!
-
3 баллаhttps://dev.twitch.tv/docs/embed/video-and-clips/ В 4.5.0 это исправлено. Можете взять оттуда html-код. Шаблон core - global - embed - twitch
-
3 балла{{$dbId = 1;}} {{$recordsClass = '\IPS\cms\Records' . $dbId;}} {{$records = $recordsClass::getItemsWithPermission( array( array( 'category_id=?', 2 ) ) );}} 1 - ID базы, из которой выводить записи 2 - ID категории, из которой выводить записи
-
3 баллаГлавный админ портала захотел определять рекламный блок в шапке для каждого подфорума в отдельности, а не только глобальный. Немного полазив по исходникам IPB 3.1.4 было решено сделать такую возможность. На всю реализацию затеи ушло 1,5 часа (вместе с проверкой). Для начала полазил по Админской Панели и нашёл место, в котором указываются стандартные рекламные блоки: Выяснил, что код рекламных блоков хранится в таблице core_sys_conf_settings. За рекламные блоки в шапке отвечают следующие записи: ad_code_global_header , ad_code_board_index_header , ad_code_forum_view_header. Именно параметр ad_code_forum_view_header отвечает за отрисовку баннера в форумах. Руководство к действию. Через phpMyAdmin добавляем в таблицу forums новое поле banner (тип TEXT, сравнение utf8_general_ci): Проверьте, что данное поле появилось. Открываем на редактирование файл /admin/applications/forums/modules_admin/forums/forums.php и ищем следующий код: 'description' => '', 'status' => 0, который заменяем на такой кодес: 'description' => '', 'banner' => '', 'status' => 0, Чуть ниже находим кодес такого содержания: 'description' => '', 'status' => 1, который заменяем на такой кодес: 'description' => '', 'banner' => '', 'status' => 1, Ещё ниже находм следующий участок: $form['sub_can_post'] = $this->registry->output->formYesNo( 'sub_can_post', ( isset($_POST['sub_can_post']) AND $_POST['sub_can_post'] ) ? $_POST['sub_can_post'] : ( $forum['sub_can_post'] == 1 ? 0 : 1 ) ); и заменяем его на: $form['sub_can_post'] = $this->registry->output->formYesNo( 'sub_can_post', ( isset($_POST['sub_can_post']) AND $_POST['sub_can_post'] ) ? $_POST['sub_can_post'] : ( $forum['sub_can_post'] == 1 ? 0 : 1 ) ); $form['banner'] = $this->registry->output->formTextarea("banner" , IPSText::br2nl( ( isset( $_POST['banner']) AND $_POST['banner'] ) ? $_POST['banner'] : $forum['banner'] ) , 120, 5 ); Как раз тут указываются размеры поля ввода кода рекламного баннера в шапке (ширина: 120, высота: 5). Далее находим кодес: 'description' => IPSText::getTextClass('bbcode')->xssHtmlClean( nl2br( IPSText::stripslashes( $_POST['description'] ) ) ), 'use_ibc' => intval($this->request['use_ibc']), который меняем на такой: 'description' => IPSText::getTextClass('bbcode')->xssHtmlClean( nl2br( IPSText::stripslashes( $_POST['description'] ) ) ), 'banner' => nl2br( IPSText::stripslashes($_POST['banner']) ), 'use_ibc' => intval($this->request['use_ibc']), Сохраняем файл /admin/applications/forums/modules_admin/forums/forums.php и копируем его на WEB-сервер. Открываем на редактирование файл /admin/applications/forums/modules_public/forums/forums.php и ищем следующий код: /* Set Ad code for the board index */ if( $this->registry->getClass('IPSAdCode')->userCanViewAds() ) { $this->registry->getClass('IPSAdCode')->setGlobalCode( 'header', 'ad_code_forum_view_header' ); $this->registry->getClass('IPSAdCode')->setGlobalCode( 'footer', 'ad_code_forum_view_footer' ); } заменяем его на ткой кодес: /* Set Ad code for the board index */ if( $this->registry->getClass('IPSAdCode')->userCanViewAds() ) { if ($this->forum['parent_id'] == 'root') { // category $fbanner = $this->DB->buildAndFetch( array( 'select' => 'banner', 'from' => 'forums', 'where' => "id=".$this->forum['id']) ); if ($fbanner['banner']) $this->forum['banner'] = $fbanner['banner']; } if (strlen($this->forum['banner']) > 3) { $this->registry->getClass('IPSAdCode')->headerCode = $this->forum['banner']; } else { $this->registry->getClass('IPSAdCode')->headerCode = $this->settings['ad_code_forum_view_header']; } $this->registry->getClass('IPSAdCode')->setGlobalCode( 'footer', 'ad_code_forum_view_footer' ); } Сохраняем файл /admin/applications/forums/modules_public/forums/forums.php и копируем его на WEB-сервер. Открываем на редактирование файл /admin/applications/forums/modules_public/forums/topics.php и ищем следующий код: /* Set Ad code for the board index */ if( $this->registry->getClass('IPSAdCode')->userCanViewAds() ) { $this->registry->getClass('IPSAdCode')->setGlobalCode( 'header', 'ad_code_forum_view_header' ); $this->registry->getClass('IPSAdCode')->setGlobalCode( 'footer', 'ad_code_forum_view_footer' ); } и заменяем его на такой кодес: /* Set Ad code for the board index */ if( $this->registry->getClass('IPSAdCode')->userCanViewAds() ) { if (strlen($this->forum['banner']) > 3) { $this->registry->getClass('IPSAdCode')->headerCode = $this->forum['banner']; } else { $this->registry->getClass('IPSAdCode')->headerCode = $this->settings['ad_code_topic_view_header']; } $this->registry->getClass('IPSAdCode')->setGlobalCode( 'footer', 'ad_code_topic_view_footer' ); } Сохраняем файл topics.php и копируем его на WEB-сервер. Открываем на редактирование файл /admin/applications/forums/skin_cp/cp_skin_forums.php и ищем следующую строчку: <li><label class='head'>{$this->lang->words['frm_f_basic']}</label></li> Перед этой строкой нужно вставить следующие строчки: <li><label class='head'>Header Banner</label></li> <li> {$form['banner']} </li> Сохраняем файл cp_skin_forums.php и копируем его на WEB-сервер. Все изменения внесены. Кеш обновлять не нужно. В админке теперь видим новое поле для ввода (настройки конкретно форума): В настройках категории новое поле тоже есть:
-
3 баллаНе знаю какого черта IPS делает свой скин таким корявым...в плане того что не во всю ширину. Исправляем сеЕ безобразие в Look & Feel > Manage Skin Sets & Templates > Manage Templates > Ваш скин > CSS > ipb_styles.css Находим секцию /* LAYOUT */ #content, .main_width { margin: 0 auto; /* Uncomment for fixed */ /*width: 980px;*/ /* Fluid */ width: 87% !important; min-width: 960px; } Меняем 87% на 98 Это делает главную страницу форума во всю ширину. Все остальные страницы будут во всю длину если вы нажмете кнопку F5 :)
-
3 баллаНаверное, многие невзлюбили панель смайлов при переходе с 3.1.х до 3.2.х-3.3.х До: После: Начнём АЦ > Внешний вид > Управление стилями и шаблонами > Управление шаблонами в IP.Board > CSS > ipb_ckeditor.css Ищем: /* Emo slide out tray */ .ipsSmileyTray { position: relative; text-align: center; overflow: auto; margin: 0px auto 0px auto; padding: 4px 24px 4px 24px; min-width: 600px; width: 75%; height: 32px; border: 1px solid #D5DDE5; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; Заменяем: /* Emo slide out tray */ .ipsSmileyTray { position: relative; text-align: center; overflow: auto; margin: 0px auto 0px auto; padding: 4px 24px 4px 24px; min-width: 600px; width: 85%; height: auto; border: 1px solid #D5DDE5; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; Ищем: .ipsSmileyTray img.bbc_emoticon { opacity: 0.8; cursor: pointer; margin: 6px 3px 0px 3px; max-width: 30px; max-height: 30px; } Заменяем: .ipsSmileyTray img.bbc_emoticon { opacity: 0.8; cursor: pointer; margin: 6px 3px 0px 3px; max-width: auto; max-height: auto; }
-
3 баллаПо умолчанию почему-то урезали нумерацию страниц в темах. И очень не удобно просматривать темы с большим количеством страниц. Безобразие исправляем в шаблоне Paginationtemplate глобального темплейта мобильного скина. Заменяем содержимое на это <if test="haspages:|:$work['pages'] > 1"> <if test="firstpage:|:1 < ($work['current_page'] - $data['dotsSkip'])"> <a class="button page-button" href='{parse url="{$data['baseUrl']}&{$data['startValueKey']}=0" base="{$data['base']}" seotitle="{$data['seoTitle']}" template="{$data['seoTemplate']}"}' title='{$this->lang->words['tpl_gotofirst']}' rel='start'>|{$this->lang->words['_laquo']}</a> </if> <if test="normalpages:|:is_array( $work['_pageNumbers'] ) && count( $work['_pageNumbers'] )"> <foreach loop="pagination:$work['_pageNumbers'] as $_real => $_page"> <a class="button page-button<if test="activepage:|:$_real == $data['currentStartValue']"> current</if>" href="{parse url="{$data['baseUrl']}&{$data['startValueKey']}={$_real}" base="public" seotitle="{$data['seoTitle']}" template="{$data['seoTemplate']}"}" title="$_page">{$_page}</a> </foreach> </if> <if test="lastpage:|:isset( $work['_showEndDots'] ) && $work['_showEndDots']"> <a class="button page-button" href="{parse url="{$data['baseUrl']}&{$data['startValueKey']}={parse expression="intval( ( $work['pages'] - 1 ) * $data['itemsPerPage'] )"}" base="public" seotitle="{$data['seoTitle']}" template="{$data['seoTemplate']}"}" title="{$this->lang->words['tpl_gotolast']}" rel='last'>|{$this->lang->words['_raquo']}|</a> </if> </if>
-
3 баллаРазобрался с проблеммой и оказалось все гениальное просто. Вот кому надо выкладываю решение данной проблеммы. Идем по адресу: /hooks/boardIndexGalleryImages_xxxxxxxxxxxx.php где xxxxxxxxxxx это набор произвольных символов. Настройка сортировки производится следующим образом: $img_list->getListingData( array( 'st' => 0, 'show' => 6, 'approve' => 1, 'sort_key' => 'i.idate', 'album' => 0, 'category' => 0, 'allow_cats' => $allow_cats, 'allow_albums' => $allow_albums, ) ); Где: 'show' => 6, - количество выводимых изображений, 'sort_key' => 'i.idate', - параметр сортировки, для вывода в случайном порядке необходимо заменить i.date на rand() 'album' => 0, - id альбома 'category' => 0, - id категории В версии галереи 4.0.0 и выше настройки перенесены сюда: /admin/applications_addon/ips/gallery/sources/classes/hooks.php /* Fetch 20 recent images */ if ( $this->memberData['g_gallery_use'] ) { $recents = $this->registry->gallery->helper('image')->fetchImages( $this->memberData['member_id'], array( 'limit' => 20, 'sortKey' => 'date', 'sortOrder' => 'desc', 'unixCutOff' => GALLERY_A_YEAR_AGO ) ); } Где: 'limit' => 20 - количество выводимых изображений, 'sortKey' => 'date' - порядок вывода, по умолчание по дате, если хочется чтобы выводились изображения в случайном порядке, то 'date' нужно заменить на 'rand'
-
3 баллаКнопка "Нравится" не связана с приложениями. Она просто там используется. И в архиве, и в блогах. Частично есть ленги для like – Открыть язык, смотреть прямо на первой странице – public_like А частично приходится переводить в шаблонах. Привожу свой вариант кода с переводом. Other Global Templates (другие или разные в дурацкой русской админке вроде) > likeMoreDialogue {parse striping="faverave" classes="row1,row2"} <h3>Им понравилось</h3> <div class='general_box likepop'> <foreach loop="$data as $mid => $data"> <div class='{parse striping="faverave"}'> <em class='desc'>Добавлено: {parse date="$data['like_added']" format="short"}</em> <img src='{$data['pp_thumb_photo']}' width='{$data['pp_thumb_width']}' height='{$data['pp_thumb_height']}' class='photo' /> <div> <strong>{$data['members_display_name']}</strong> <p class='desc'> {parse expression="IPSLib::makeNameFormatted( $data['g_title'], $data['g_id'] )"} <br /> Регистрация: {parse date="$data['joined']" format="joined"} </p> </div> </div> </foreach> </div> likeSetDialogue <h3>{$this->lang->words['fave_title']}</h3> <div class='general_box'> <fieldset> <ul> <li class='field checkbox'> <input type="checkbox" name="notify" id="like_notify" class="input_check" value="1" /> <label for="like_notify">{parse expression="sprintf($this->lang->words['label_notify'], $data['notifyType'][1])"}</label> </li> <li class='field'> <label for="like_freq">{$this->lang->words['label_freq']} <select name="freq" id="like_freq" class="input_select"> <foreach loop="$data['frequencies'] as $freq"> <option value="$freq">{$this->lang->words[ 'freq_' . $freq ]}</option> </foreach> </select> </label> </li> <li class='field checkbox'> <input type="checkbox" name="anon" id="like_anon" class="input_check" value="1" /> <label for="like_anon">{$this->lang->words['label_anon']}<br /><span class='desc'>{$this->lang->words['label_anon_desc']}</span></label> </li> <li class="submit" style="float:right"> <input type="submit" value="В избранное" class="input_submit _fsubmit" /> </li> </fieldset> </div> likeSummaryContents <if test="$data['formatted']">{$data['formatted']}<else /> </if> <if test="likeOnlyMembers:|:$this->memberData['member_id']"> <a href='#' title="<if test="$data['iFave']">Уже не нравится. Отменить уведомления.<else />Нравится? Уведомлять об обновлениях?</if>" class='ftoggle <if test="$data['iFave']"> on</if><if test="$opts['button-new-line']"> _newline</if>'><if test="$data['iFave']">Уже не нравится<else /><b style='font-size: 1.3em; color: #418308'>Нравится!</b></if></a> </if> Источник: Русский язык для IP.Downloads
-
3 баллаМинимальная длина отправляемого сообщения на движке IP.Board - 1 символ. Не пробел. Это зашито в код и не выводится в Панель управления. Что не совсем удобно. Не секрет, что многих админов достают пользователи которые не прекращая посылают сообщения +1 или UP. В правила это можно прописывать много и долго, но работать не будет. У меня же правило простое, любое техническое ограничение должно поддерживается движком форума, иначе оно не работает. Как же быть. Ограничиваем длину сообщения admin\applications\forums\sources\classes\post\classPost.php ищем //----------------------------------------- // Do we have a valid post? // alt+255 = chr(160) = blank space //----------------------------------------- if ( strlen( trim( IPSText::removeControlCharacters( IPSText::br2nl( $post['post'] ) ) ) ) < 1 AND !$this->getIsPreview() ) { $this->_postErrors = 'post_too_short'; } 1 - меняем на нужное количество символов. Ограничиваем длину первого сообщения в новой теме ищем //----------------------------------------- // Do we have a valid post? //----------------------------------------- if ( strlen( trim( IPSText::removeControlCharacters( IPSText::br2nl( $post['post'] ) ) ) ) < 1 ) { $this->_postErrors = 'post_too_short'; //$this->registry->getClass('output')->showError( 'post_too_short', 103143 ); } Аналогично. Внимание. Данное изменение нарушают идеологию движка IP.Board 3.x, где любое изменение функций, должно выполнятся через хук, не затрагивая исходный код форума. Важно. При апгрейде форума изменение потеряется и надо будет его восстанавливать.
-
3 баллаВсе искал решение как сделать блоки сворачиваемыми (как на форуме). И вот оно нашлось. 1. Идем в АЦП >IP.Content>Page Templates> изменяем шаблон по умолчанию. В 2.1.2 его уже нет. Добавляем над строкой </head> следующий код <script src="ССЫЛКА НА ВАШ ФОРУМ/public/js/ips.board.js" type="text/javascript"></script> 2. Далее оборачиваем содержимое вашего блока следующим кодом. <div class='category_block block_wrap'> <h3 id='category_{$title}' class='maintitle'><a class='toggle right' href='#' title='{$this->lang->words['toggle_cat']}'>{$this->lang->words['toggle_cat']}{$title}</a>{$title}</h3> <table class='ipb_table' summary="{$title}"> <tr> <td> Тут содержимое вашего блока <td> </tr> </table> </div> 3. Радуемся.
-
2 балла
-
2 баллаЯ уже дал ответ - у Вас Let`s Encrypt Бесплатный - https://letsencrypt.org/ru/docs/certificate-compatibility/ Известные несовместимые платформы Blackberry < v10.3.3 Android < v2.3.6 Nintendo 3DS Windows XP до SP3 не умеет работать с подписанными SHA-2 сертификатами Java 7 < 7u111 Java 8 < 8u101 Windows Live Mail (почтовый клиент от 2012, не веб-почта) не умеет работать с сертификатами без CRL Игровая консоль PS3 Игровая консоль PS4 с версией прошивки < 5.00 На форуме касперского платный SSL - https://www.digicert.com/
-
2 баллаПриветствую! DELETE FROM posts WHERE author_id = 1; А если много тем: DELETE FROM topics WHERE starter_id = 1; Вместо 1 естественно нужно подставить ID пользователя, ну и перед названием таблицы может быть префикс, например ibf_posts и т.п. Если так много данных, лучше удалять через sql консоль, а не через phpMyAdmin или Инструменты управления SQL который есть а АЦ, т.к. время исполнения php может быть ограничено, как раз поэтому и виснет "удалить все сообщения ";
-
2 баллаДля редактирования блоков проверяется модераторские права - \IPS\Member::loggedIn()->modPermission('can_manage_sidebar') Пользователь должен быть либо модератором, либо состоять в группе с модераторскими правами. Модераторские и админские права редактируется отдельно. Когда вы создаете новую группу с админскими правами, нужно для нее также настроить и модераторские права.
-
2 балла
-
2 балла@Trotor если правкой кода могу подсказать. По поводу ипбскинс. Лесовски абсолютно прав, у Вас очень устаревшая версия. Я, нюбай еще вам помогаем кодом в рамках своих возможностей и свободного времени, потому что мы застали и знаем этот движок. Но людей с такими знаниями становятся все меньше, кто-то отходит от ипб, кому-то уже не интересно в нем копаться, а новички сейчас бесплатно изучать его не побегут, они и по четверке на общественных началах вряд ли что-то напишут, - ушло то старое альтруистское время. Так что вам надо быть терпеливым и вежливым ожидая помощи для доработки вашего форума, мы ее оказываем бесплатно и в свое свободное время, а иногда даже строчки нет никакого желания написать.
-
2 баллаЗдравствуйте. Если правильно вас понял. В любом случает вам нужно настроить на сервере, чтобы все дополнительные домены ссылались на директорию с форумом. В conf_global.php значение параметра base_url заменить на: 'base_url' => 'https://'.$_SERVER['HTTP_HOST'], Тогда форум будет открываться с двух адресов, раньше как правило это использовали для ресурсов которые работали в локальной сети провайдера и были доступны в интернете. Учтите, могут возникнуть проблемы с seo, при индексации второго сайта, возникнут своего рода дубли страниц.
-
2 баллаВыдал вам предупреждение, текст предупреждения, чтобы ознакомились ВСЕ, не только команда и вы: + IP.Board 3.x уже не ходовая версия и главное официально не поддерживаемая уже много лет, и если у вас она используется, нужно задуматься о поддержке безопасности системы, и для решения задач, в рамках форума и бампинга тем, этого просто не сделать. В дополнение к предыдущему сообщению (позже объединю с ним, чтобы увидели). Это не означает, что вам и другим людям в последующем не ответят\помогут, просто если если не отвечают или отвечают как вы думаете не достаточно, значит простым советом или решением это не решить, всё просто.
-
2 баллаВыключите реврайты. Просто удалить .HTACCESS и проверить.
-
2 баллаМногие форумы почистили разделы про 3 версию, и естественно инфы нет. https://www.tapatalk.com/ https://www.tapatalk.com/download_IPBoard
-
2 балла{{if member.canAccessModule( \IPS\Application\Module::get( 'feedback', 'feedback' ) )}} {{$member = $offer->author();}} <div class='cProfileFeedbackBlock ipsBox ipsSpacer_bottom'> <a href="{url="app=core&module=members&controller=profile&id={$member->member_id}&tab=node_feedback_Feedback" seoTemplate="profile" seoTitle="$member->members_seo_name"}"> <div class='cProfileFeedback ipsPad_half {{if $member->feedb_percent >= 90}}cProfileFeedback_positive{{elseif $member->feedb_percent < 50 AND $member->feedb_neg}}cProfileFeedback_negative{{else}}cProfileFeedback_neutral{{endif}}'> <h2 class='ipsType_minorHeading'>{lang="feedback_profile_score_title"}</h2> <div class='cProfileFeedbackScore'> <span data-ipsTooltip title="{lang="feedback_profile_positive"}"><i class="fa cFeedbackIcon_positive"></i> {number="$member->feedb_pos"}</span> <span data-ipsTooltip title="{lang="feedback_profile_neutral"}"><i class="fa cFeedbackIcon_neutral"></i> {number="$member->feedb_neu"}</span> <span data-ipsTooltip title="{lang="feedback_profile_negative"}"><i class="fa cFeedbackIcon_negative"></i> {number="$member->feedb_neg"}</span> </div> </div> <p class='ipsType_reset ipsPad_half ipsType_right ipsType_light ipsType_small'> {lang="feedback_profile_link"} <i class='fa fa-caret-right'></i> </p> </a> </div> {{endif}} либо {{if \IPS\Application::appIsEnabled('feedback')}} {template="feedbackScore" group="profile" app="feedback" params="$offer->author()"} {{endif}}
-
2 балла$stats['totalSubmitters'] = \IPS\Db::i()->select( 'COUNT(DISTINCT video_author_id)', 'videos_videos', array( 'video_status=1' ) )->first(); заменить на $stats['totalSubmitters'] = \IPS\Db::i()->select( 'COUNT(DISTINCT cid)', 'videos_videos' )->first(); Или на (количество всех категорий) $stats['totalSubmitters'] = \IPS\Db::i()->select( 'COUNT(*)', 'videos_cat' )->first();
-
2 баллаМожет есть возможность у наших ребят создать свои модули оплаты? Ну само собой в платных архив, то рокопопкные как-то не внушают доверия.
-
2 балла1. Открыть applications/bookmark/hooks/template_front_global.php Найти: {lang="my_bookmarks"} Заменить на: <i class="fa fa-bookmark"></i> {lang="my_bookmarks"} Выключить\включить приложение Bookmarks. 2. Открыть Ваш стиль/core/front/global/userBar Найти: <li class='ipsMenu_item' data-menuItem='promote'><a href='{url="app=core&module=promote&controller=promote&do=view" seoTemplate="promote_manage"}'>{lang="promote_manage_link"}</a></li> Заменить на: <li class='ipsMenu_item' data-menuItem='promote'><a href='{url="app=core&module=promote&controller=promote&do=view" seoTemplate="promote_manage"}'><i class="fa fa-ad"></i> {lang="promote_manage_link"}</a></li>
-
2 балла
-
2 балла\system\Content\Item.php /** * Build review form * * @return string */ public function reviewForm() { Например, после $form->add( new \IPS\Helpers\Form\Rating( static::$formLangPrefix . 'rating_value', NULL, TRUE, array( 'max' => \IPS\Settings::i()->reviews_rating_out_of ) ) ); добавляете if ( $this instanceof \IPS\cms\Records ) { $form->add( new \IPS\Helpers\Form\Text( static::$formLangPrefix . 'something', NULL, TRUE ) ); } Далее выше /* Disable read/write separation */ можете использовать $values['content_record_form_something'] Только проверяйте, что в $values есть ключ content_record_form_something
-
2 баллаМожно только сократить текст до определенного кол-ва символов У метода truncated есть 2 параметра /** * Text for use with data-ipsTruncate * Returns the post with paragraphs turned into line breaks * * @param bool $oneLine If TRUE, will use spaces instead of line breaks. Useful if using a single line display. * @param int|null $length If supplied, and $oneLine is set to TRUE, the returned content will be truncated to this length * @return string * @note For now we are removing all HTML. If we decide to change this to remove specific tags in future, we can use \IPS\Text\Parser::removeElements( $this->content() ) */ public function truncated( $oneLine=FALSE, $length=500 )
-
2 балла{{if $topic->container()->_id == 5}} Показывать рекламу в форуме с ID 5 {{endif}}
-
2 баллаВы не знаете, какой шаблон отвечает за вывод темы? Не поверю. topicViewTemplate Нашли его в \admin\applications\forums\modules_public\forums\topics.php $template = $this->registry->output->getTemplate('topic')->topicViewTemplate( $this->forum, $this->topic, $post_data, $displayData ); $post_data содержит данные о постах, включая авторов. Получаем ID'шники Вместо foreach( $members as $member ) { $ids[] = $member['member_id']; } Используем foreach( $post_data as $post ) { if ( $post['author']['member_id'] ) { $ids[$post['author']['member_id']] = $post['author']['member_id']; } } Вместо foreach( $members as $name => $member ) { $members[$name]['post_week'] = isset($weekStats[$member['member_id']]) ? $weekStats[$member['member_id']] : 0; } Используем foreach( $post_data as $pid => $post ) { if ($post['author']['member_id']) { $post_data[$pid]['author']['post_week'] = isset($weekStats[$post['author']['member_id']]) ? $weekStats[$post['author']['member_id']] : 0; } } В шаблоне userInfoPane используем <if test="isset($author['post_week'])">{$author['post_week']}</if>
-
2 баллаНужно делать sql-запрос <php>$result = $this->DB->buildAndFetch( array( 'select' => 'COUNT(*) as post_week', 'from' => 'posts', 'where' => "author_id={$member['member_id']} AND post_date > " . (time() - 604800) ) );</php> <if test="$result['post_week'] > 10"> Контент отображается, если у данного пользователя есть 10 сообщений на форуме за неделю. </if>
-
2 балла{{if member.member_id}} {{$restrictions = json_decode(\IPS\Member::loggedIn()->group['idm_restrictions'], TRUE);}} {{if $restrictions['daily_dl'] > 0}} {{$downloads = \IPS\Db::i()->select( 'COUNT(*)', 'downloads_downloads', array( array( 'dmid=? AND dtime>?', \IPS\Member::loggedIn()->member_id, \IPS\DateTime::create()->sub( new \DateInterval( 'P1D' ) )->getTimestamp() ) ) )->first();}} Осталось {expression="$restrictions['daily_dl'] - $downloads"} скачиваний {{endif}} {{endif}}
-
2 балла
-
2 баллаМногие спрашивают про расширение ряда кнопок в темах с добавлением новых. Пример здесь. Сейчас в share links добавлены кнопки для Твиттера и Вконтакте. Ну и для того, чтобы не индексировался мусор, все кнопочное хозяйство засунуто в noindex. Global Templates > shareLinks Весь код заменяем этим. <noindex> <script type="text/javascript" src="http://vkontakte.ru/js/api/share.js?10" charset="windows-1251"></script> <style type="text/css"> tbody { background: transparent; } td { padding: 0; } </style> {parse js_module="sharelinks"} <if test="gotLinks:|:is_array( $links )"> <ul class='{$cssClass} shareButtons'> <foreach loop="cacheLoop:$links as $id => $data"> <if test="isEnabled:|:$data['share_enabled']"> <li><a href="{parse url="sharelink={$data['share_key']};{$data['_url']};{$title}" base="public"}" rel="nofollow" target="_blank" title="<if test="!in_array( $data['share_key'], array( 'print', 'download' ) )">{$this->lang->words['gbl_sharelink_with']} </if>{$data['share_title']}" class='_slink' id='slink_{$data['share_key']}'><img src="{$this->settings['public_dir']}style_extra/sharelinks/{$data['share_key']}.png" /></a></li> </if> </foreach> <li> <!-- Put this script tag to the place, where the Share button will be --> <script type="text/javascript"><!-- document.write(VK.Share.button(false,{type: "button", text: "Сохранить"})); --></script> </li> <li> <a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" data-via="fisana">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></li> </ul> <script type="text/javascript"> ipb.sharelinks.url = "{parse expression="IPSText::base64_decode_urlSafe($url)"}"; ipb.sharelinks.title = "{parse expression="IPSText::base64_decode_urlSafe($title)"}"; ipb.sharelinks.bname = "{parse expression="trim($this->settings['board_name'])"}"; </script> </if> </noindex> В коде для твиттера data-via="fisana" слово "fisana" замените на имя своего аккаунта. При желании выше можно добавлять новые кнопки в виде <li> код кнопки </li> Но есть проблема, когда какой-нибудь вконтактик лежит, медленно загружается и низ тем на форуме, пытаясь достучаться до сервера...
-
2 баллаИм нужно носить такие футболки кто в этой партии: Они стараются сделать однопартийную систему, что ужасно не хорошо, опять начинается история как и с КПСС, в рот им ноги!
-
2 баллаВот живой пример :) Кроссворд на форуме. Удалите если расцените как рекламу. И вопрос. А что пишет система в профиле пользователя когда он сидит на одной из таких самодельных страниц? "Смотрит главную страницу" ? - это реально подправить? скажем на "играет в кроссворд".
-
2 балладля случайных изображений придется брать хук (SOS30) Enhanced Gallery Images v1.0.0 Displays gallery images on your board index Версия 1.0.0 Автор хука Adriano тогда настройка рандомности появляется в админке и менять в hooksos_RecentGalleryImages на содержимое первой страницы. :)
-
2 баллаТогда попробуйте <div id='attach_wrap' class='rounded clearfix'> Заменить на <div id='attach_wrap' class='rounded clearfix' style='overflow: hidden'> Рэндомность не настроить стандартными средствами. Нужно модифицировать хук.
-
2 баллаПроще весь шаблон выложить. Версия 3.1.1-3.1.2 Профили > statusUpdates
-
2 баллаЗдравствуйте, Fisana! Извините за беспокойство, но в связи с обновлением Оперы в скинах 3.0.5 тоже вылезли баги. В стилях ibr, delicate и light меню профиля пользователя в панели входа съезжает вправо и расширяет границы форума. Вот таким образом Адрес форума http://tyorok.net/forum/index.php? Не могли бы Вы подсказать, где исправить этот недостаток. Извините за беспокойство еще раз. Спасибо.
-
2 балла