Leaderboard


Popular Content

Showing most liked content since 03/28/2017 in all areas

  1. 112 likes
    This is very simple chat system with the basic features: Ajax chat, auto update. Display as IPS widgets, so you can place it in sidebar or top page. Sound notification. User can toggle on/off. Block users. Announcement (on Top or Tab). Support emoticons, URL, Image URL (gif, png, jpg) @mention by clicking on usernames. Flood control. Time format. Display newer messages in top or bottom. Permissions for viewing, chatting & management. Edit/Delete messages. Demo: [Hidden Content] DOWNLOAD [Hidden Content] (BIM41) Chatbox 1.3.4.zip
  2. 32 likes
    Như đã hứa, làm cái stats nhỏ này tặng các bạn với các chức năng chính như sau: Hiển thị thống kê với 2 tab duy nhất: Bài viết mới nhất và Chủ đề mới nhất. Sử dụng ajax update (chế độ tự động hoặc manually tùy chỉnh). Sử dụng widget để hiển thị. DOWNLOAD: (BIM41) Forums Stats 1.1.2.zip
  3. 18 likes
    Nay mình tìm được một jquery khá hay nên viết thành plugin cho các bạn. Plugin này cho phép bạn ẩn nội dung trong thẻ , thành viên sẽ bấm Like hoặc Tweet để xem nội dung ẩn. Đây là một cách hiệu quả để tăng lượt like cho page xã hội của bạn. Demo ngay tại phần download của topic này nhé. Bạn cần hiểu qua cách hoạt động của nó, ý tưởng plugin này khá đơn giản là dùng javascript sdk để kiểm tra like/tweet khi load trang, sau đó lưu lại cookie ở trình duyệt. Do đó nó có một vài điểm hạn chế như sau: Sau khi like nội dung sẽ hiển thị, khi bạn cố kiểm tra bằng cách unlike page thì nội dung vẫn ko bị ẩn đi lần nữa là do cookie. Nếu chưa có (lưu) cookie, và bạn đã like page rồi thì nội dung vẫn bị ẩn, cần unlike rồi like lại sẽ hiện. Dùng javascript để ẩn nội dung, cho nên bạn đừng báo lỗi là viewsource thấy nội dung gốc. Người dùng khi họ cần tìm nội dung họ muốn thì ko tiếc gì một like đâu. Lưu ý là plugin này không hoạt động chung được với plugin Sliding Facebook Fanpage nhé. DOWNLOAD [lock](BIM41) Social Content Locker 1.1.0.zip[/lock]
  4. 17 likes
    Plugin nhỏ gọn tiện ích. Chức năng: Ẩn liên kết Ẩn code Ẩn nội dung trong thẻ hide DOWNLOAD: (BIM40) Hide link and code 1.0.0.zip
  5. 13 likes
    Plugin này sử dụng jquery Contact Buttons Plugin hiển thị một thanh trượt bên tay trái để link tới các trang fanpage. Hiện ứng trượt lên xuống theo trang đẹp mắt và tinh tế. Hỗ trợ các mạng xã hội: Facebook, Google, LinkedIn, Twitter, Pinterest, Youtube và có một nút hiển thị đường dẫn đến trang contact. DOWNLOAD: (BIM40) Floating Social Sidebar 1.0.0.zip CÀI ĐẶT & SỬ DỤNG: [Hidden Content]
  6. 12 likes
    Plugin nhỏ gọn, hiển thị nút mũi tên ở góc dưới bên phải giống ở ipsviet.com , dễ dàng click và nhảy lên đầu trang Settings của nó cũng đơn giản với nút bật/tắt và chọn màu sắc. DOWNLOAD: (IPSViet) Scroll to top 1.0.0.zip
  7. 11 likes
    Đây là widget thống kê bài viết mới ở diễn đàn, chỉ mới hỗ trợ đặt widget ở đầu và cuối site, chưa hỗ trợ site bar. Các chức năng chính: Tùy chọn số lượng chủ đề hiển thị. Thời gian (giây) auto update (sử dụng AJAX) Số bài viết (nội dung) tối thiểu thành viên cần đạt để có thể thấy widget. Tùy chọn loại trừ forums. Chọn theo trạng thái chủ đề (đóng, mở, chú ý, ẩn,...). Nhóm thành viên có thể xem. DOWNLOAD (SOS40) Recent Topics 4.0.1.zip Nguồn: [Hidden Content]
  8. 11 likes
    Mặc định khi bạn share một bài viết từ forum lên Facebook thì hình ảnh từ link ngoài sẽ ko dc hiển thị (hình ảnh gửi kèm thì ok). Lý do là vì IPS sẽ tự động để og:image là đường dẫn logo nếu như bài viết không có bất kỳ hình gửi kèm nào. Để khắc phục vấn đề đó, plugin này sẽ tự động tìm và thêm đường dẫn hình ảnh liên kết ngoài vào <meta property="og:image" content="duongdanhinhanh.jpg">Như vậy khi share lên Facebook sẽ hiện được hình ảnh đẹp mắt. Cách hoạt động của nó là lấy đường dẫn hình ảnh từ trong nội dung của bài viết đầu tiên. Đặc biệt có thể lấy cả hình ảnh thumbnail của youtube và vimeo. Lưu ý: sau khi cài đặt, viewsource sẽ thấy og:image là hình ảnh đầu tiên trong bài viết như vậy là plugin hoạt động tốt. Nếu như share lên Facebook vẫn ko hiện hình thì là do Facebook chưa lấy được dữ liệu mới cập nhật web bạn, vào [Hidden Content] sau đó copy url bài viết rồi bấm nút Debug, xong bấm Fetch new scrape information sẽ thấy hình ảnh mới thay vì logo của website. DOWNLOAD: (IPSViet) Image meta tag 1.0.1.zip (IPSViet) Image meta tag 1.0.0.zip Cài đặt xong là sử dụng ngay, không hề có bất cứ Setting nào. Không dùng nữa thì Uninstall hoặc Disable nó thôi.
  9. 11 likes
    Plugin này kiểm tra password nhập vào khi đăng ký thành viên, dựa vào độ dài và các ký tự để đưa ra trạng thái nhắc nhở thành viên về mức độ an toàn của mật khẩu: yếu, trung bình, mạnh. Ngoài ra còn có chức năng toggle ẩn/hiện mật khẩu. Download (BIM41) Password Strength Meter 1.1.0.zip
  10. 11 likes
    Plugin này tạo một widget hiển thị thông báo với hiệu ứng chạy lên hoặc xuống đẹp mắt, thay thế cho widget Announcement có sẵn nhàm chán. Có thể tùy chỉnh số thông báo hiển thị, hiệu ứng (up/down), tốc độ. Live demo các bạn có thể xem tại fcine.net Để tạo thông báo thì vào sitecuaban.com/modcp/announcements/ chứ không phải thông báo từ 1 box của forums nha. Chỉnh sửa màu sắc và chữ trên tiêu đề thì vào edit skin -> CSS -> core -> Custom -> ipsvietscrollingannouncements.css DOWNLOAD: (IPSViet) Scrolling Announcements 1.0.0.zip
  11. 9 likes
    Plugin hiển thị facebook fanpage dạng trượt khi rê chuột vào, có thể chỉnh vị trí trái/phải, import vào xài ngay ko cần upload css, js hay image gì cả Live Demo: [Hidden Content] DOWNLOAD: (BIM40) Sliding Facebook Fanpage 1.0.2.zip (IPSViet) Sliding Facebook Fanpage 1.0.1.zip
  12. 8 likes
    Widget hiển thị thành viên mới đăng ký. DOWNLOAD [lock](SOS40)_Latest_Registered_Members_1.0.0.zip[/lock] Nguồn: [Hidden Content]
  13. 8 likes
    May I suggest a little custom upgrade of this wonderful plugin? If these changes are not welcome, please delete this post. So, here is the changed template bim_forumStats_row: <li id='{$row->tid}'class='ipsClearfix ipsDataItem{{if $row->unread()}} ipsDataItem_unread{{endif}}{{if $row->hidden()}} ipsModerated{{endif}}'> {{if $row->unread()}} <div class='ipsDataItem_icon ipsPos_top'> <span class='ipsItemStatus'><i class="fa fa-circle"></i></span> </div> {{else}} <div class='ipsDataItem_icon'><span class='read'><i class="fa fa-circle-o"></i></span></div> {{endif}} <div class='ipsDataItem_main'> {{if $row->prefix()}}{template="prefix" group="global" app="core" params="$row->prefix( TRUE ), $row->prefix()"}{{endif}} <a href="{$row->url()->setQueryString( 'do', 'getLastComment' )}" title='{lang="view_this_topic" sprintf="$row->title"}' class='ipsDataItem_title ipsType_break'> {wordbreak="$row->title"} </a> {{if $row->mapped('featured') || $row->hidden() === -1 || $row->hidden() === 1}} <span> {{if $row->hidden() === -1}} <span class="ipsBadge ipsBadge_icon ipsBadge_small ipsBadge_warning" data-ipsTooltip title='{$row->hiddenBlurb()}'><i class='fa fa-eye-slash'></i></span> {{elseif $row->hidden() === 1}} <span class="ipsBadge ipsBadge_icon ipsBadge_small ipsBadge_warning" data-ipsTooltip title='{lang="pending_approval"}'><i class='fa fa-warning'></i></span> {{endif}} {{if $row->mapped('featured')}} <span class="ipsBadge ipsBadge_icon ipsBadge_small ipsBadge_positive" data-ipsTooltip title='{lang="featured"}'><i class='fa fa-star'></i></span> {{endif}} </span> {{endif}} <p class='ipsType_reset ipsType_large ipsType_light'> {{if \IPS\Request::i()->controller != 'forums'}} {lang="in"} <a href="{$row->container()->url()}">{$row->container()->_title}</a> {{endif}} </p> </div> <ul class="ipsDataItem_lastPoster ipsClearfix ipsResponsive_hidePhone"> <div class="elBimipsPos_right"> <li>{{if $name=='fsNewTopics'}} {template="userPhoto" app="core" group="global" params="$row->author(), 'tiny'"} {template="userLinkFromData" group="global" app="core" params="$row->starter_id, $row->author()->name, $row->author()->seo_name, $row->author()->member_group_id"} {{else}} {{$mem = \IPS\Member::load( $row->last_poster_id );}} {template="userPhoto" app="core" group="global" params="$row->lastCommenter(), 'tiny'"} {template="userLinkFromData" group="global" app="core" params="$row->last_poster_id, $mem->name, $mem->seo_name, $mem->member_group_id"} {{endif}}</li> <li class="ipsType_light"> <a href='{$row->url( 'getLastComment' )}' title='{lang="get_last_post"}' class='ipsType_blendLinks'>{{if $row->mapped('last_comment')}}{datetime="$row->mapped('last_comment')"}{{else}}{datetime="$row->mapped('date')"}{{endif}}</a></li> </div> </ul> </li>Then, in bimforumstats.css add this: .elBimipsPos_right{ float:right; width: 55%; max-width: 60%; min-width: 170px; list-style: none; margin: 0; padding: 0; }Here is the result:
  14. 8 likes
    Thống kê diễn đàn theo dạng tab rất gọn và đẹp mắt. Hook nhỏ, ko cần edit file Tối đa 4 tab thôi nha các bạn, muốn thêm phải làm thủ công ở file hook. Màu sắc thì chỉ cần sửa css của nó bằng cách vào ACP -> Look & Feel -> chọn skin -> Board Index -> hook_bim_tabstats (BIM34)_Tab_stats_1.0.0.zip
  15. 8 likes
    Trước mình dùng cái này làm trang demo cho mấy cái mod bán bên IPS, vừa nâng cấp lên cho 4.0 sẵn chia sẽ cho ai cần. App bé nhỏ có chức năng tạo trang, dùng code HTML và PHP cho nội dung. Hỗ trợ meta keywords và description. URL thân thiện và xinh xắn dạng: [Hidden Content] DOWNLOAD: (BIM40) Simple Pages 1.0.2.zip (BIM40) Simple Pages 1.0.1.zip (BIM40) Simple Pages 1.0.0.zip
  16. 7 likes
    About This File This is a custom .htaccess to use on the IPS Community Suite Forums. It helps to improve your forums Google Page Speed and YSlow scores. The top segment is the same .htaccess that is generated by the IPS Forum software. This segment is Invision Power Services code and I do not claim it as my own. All rights and credit for this segment of the .htaccess are Invision Power Services. The bottom segment is based upon research of several websites and the references listed below. Please be careful when using this file because the contents may be incompatible with your server setup. Preventative measures have been taken to ensure that it should be safe to use in any Apache based environment. Google recommends a minimum of one week: [Hidden Content] GTmetrix recommends a minimum of one month: [Hidden Content] Download: [Hidden Content]
  17. 7 likes
  18. 7 likes
    File việt hóa IPS 4.x của bạn @Nesbit , chỉ cần vào ACP > Customization > Language import để xài. DOWNLOAD: IPS 4.1 Tiếng Việt_4.1_2015-11-12.xml IPS 4.0 Tiếng Việt_2015-08-26.xml Tiếng Việt.xml (old)
  19. 6 likes
    Plugin đơn giản làm widget với nội dung tùy thích, hỗ trợ HTML và PHP cho nội dung. DOWNLOAD: (BIM40) Blank Widget 1.0.0.zip
  20. 5 likes
    This plugin will hide links, code, images in forum posts automatically. Members can like or reply to see the hidden content. Features: - Select content to hide: images, external links, code, [hide] tag - Option to specify groups can bypass the hidden content. - Like or Reply to see the hidden content. BUY IT NOW
  21. 5 likes
    Bài viết này sẽ hướng dẫn các bạn cài đặt và tối ưu IPS4 trên VPS dùng VPSSIM. Thật ra với những bạn mới làm quen IPS có thể chọn giải pháp hosting, nhưng mình thấy có khá nhiều bạn gặp vấn đề về lỗi host không hỗ trợ tốt cho IPS. Trong khi giá của vps hiện giờ cũng khá là rẻ và các web panel miễn phí cho vps cũng khá nhiều, newbie cũng dễ dàng cài đặt. Về vps, các bạn có thể chọn lựa các nhà cung cấp vps: Linode, Vultr, Digitalocean, Ramnode, Hostus (IPSViet đang dùng Linode). Về panel cho vps, có nhiều loại như vestacp, centminmod, centos-webpanel, zpanel,... nhưng ở đây mình chọn VPSSIM vì nó gọn nhẹ, đầy đủ chức năng cần thiết, và quan trọng hơn hết là hỗ trợ tốt cho IPS. Giới thiệu về VPSSIM: Không như các Panel chạy trên nền web như Cpanel, Direct Admin, Vesta, Zpanel… thường tiêu thụ từ 400 – 800 MB RAM và 1 phần không nhỏ CPU khi hoạt động. VPSSIM bao gồm các Bash script chạy trên SSH, bình thường VPSSIM luôn tắt và chỉ hoạt động khi bạn gọi lên bằng lệnh “vpssim”, VPSSIM không hề sử dụng tài nguyên (CPU & RAM) của VPS dù là nhỏ nhất. Không thể mắc lỗi bảo mật do chỉ chạy trên SSH. Chạy trên nền SSH nên mặc dù VPSSIM tích hợp rất nhiều chức năng tiện ích cũng không hề tiêu thụ tài nguyên VPS. Đã tích hợp đầy đủ chức năng cần thiết để cài đặt và quản lý VPS. Bạn chỉ cần thời gian rất ngắn để làm quen và sử dụng thành thạo. Hỗ trợ Centos 6 và 7 – Full hoặc minimal. Cả hai phiên bản Centos 32 bít hoặc 64 bít VPSSIM đều chạy ổn định. VPSSIM hỗ trợ 2 ngôn ngữ: tiếng Việt và Tiếng Anh. Version tiếng Việt hỗ trợ trên HostingAZ.VN và version tiếng Anh cài đặt tại VPSSIM.COM Cài đặt VPSSIM: Yêu cầu VPS RAM tối thiểu 512 MB và sử dụng hệ điều hành Centos 6 hoặc Centos 7. Sau khi đã có VPS thì download phần mềm PuTTY logn SSH vào VPS (Mình bỏ qua bước này vì nó khá đơn giản). Sau đó chạy một lệnh sau để cài đặt VPSSIM yum -y install wget && wget [Hidden Content] && chmod +x install && ./install Làm theo hướng dẫn trên màn hình, nó sẽ yêu cầu bạn chọn phiên bản PHP (chọn 5.6) và port cho phpmyadmin,... cứ làm theo cho đến khi xong quá trình cài đặt vps sẽ reboot lại. Để truy cập menu VPSSIM chỉ cần vào SSH gõ lệnh vpssim Bạn thấy có nhiều chức năng được liệt kê một cách rõ ràng trong menu. Trong phạm vi bài viết này mình sẽ nói đến những gì cần thiết để hỗ trợ tốt cho IPS. Cài đặt IPS4: Trước tiên vào menu VPSSIM, lựa chọn số 1 để thêm Website & Code. Bạn sẽ nhập domain vào, hệ thống sẽ tự tạo database cho bạn: Copy thông tin database đó vào một file text. Bây giờ đến bước upload source IPS, có thể dùng Winscp hoặc Filezilla, connect qua SFTP sẽ cần user và mật khẩu của root, nếu không bạn có thể vào menu VPSSIM -> chọn 16 -> chọn 11 để cài đặt FTP server rồi login vào. Upload tất cả file của IPS vào /home/domaincuaban.com/public_html/ Sau khi upload xong bạn cần sửa lỗi trang trắng và chmod/chown bằng cách vào menu VPSSIM -> chọn 16 -> chọn 4 để Fix lỗi trang trắng, xong chọn 5 để fix lỗi chmod/chown Tiếp theo truy cập vào [Hidden Content] Giao diện cài đặt IPS xuất hiện, nó sẽ kiểm tra cấu hình hệ thống trước, bạn thấy xanh lè thế này là ok Bấm Continue để tiếp tục cài đặt, các bước sau bạn chỉ cần cung cấp License của bạn, thông tin database mà VPSSIM đã tạo ở bước trên, cài đặt user, pass, email cho admin rồi cứ bấm next chờ nó cài đặt hoàn chỉnh. Sau khi cài đặt xong, ở menu VPSSIM bạn làm ngay những việc sau: Cài đặt CSF Firewall (12) Tắt phpmyadmin (cho an toàn, khi dùng mới bật) (6) Bật Zend Opcache (7) Bật Memcache (9) (IPS hoạt động tốt nhất với memcache) Bật Google Pagespeed (8) (nếu bạn dùng cloudflare thì khỏi bật nó cũng được) Tạo swap (10) (Nếu bạn dùng vps KMV hoặc XEN, Openvz không hỗ trợ, swap tối đa gấp đôi RAM) Ngoài ra, bạn tham khảo bài viết này để biết cách tối ưu cho IPS đã cài Làm hết các bước trên IPS của bạn đã có thể chạy mượt mà. Bây giờ chỉ việc vào ACP cấu hình một số thông tin cho phù hợp. System -> Settings -> General Configuration: Thêm Site Name của bạn vào, và nếu như bạn chưa sẵn sàng mở cửa website thì hãy tạm off nó đi. System -> Settings -> Email Settings: Cấu hình gửi/nhận mail rất quan trọng cho một website. Bạn có thể dùng phpmail() hoặc smtp tùy chọn. Nếu không gửi mail được thì bạn cài thêm sendmail yum install sendmail -y Vậy là xong, bạn đã cài đặt hoàn chỉnh VPS và IPS4. Chúc website của bạn phát triển. P/s: nếu làm với mục đích thí nghiệm, vọc phá thì có lựa chọn Hostus 5$ cho 3 tháng với con VPS 512mb ram, 10GB Disc, server LA. Bim vừa mua thử 1 con để chạy cái [Hidden Content] thấy cũng khá tốt
  22. 5 likes
    Plugin nhỏ hiển thị widget chuyển đổi đơn vị tiền tệ. DOWNLOAD (BIM40) Currency Converter 1.0.1.zip
  23. 4 likes
    IPS sử dụng trình soạn thảo CKEditor hỗ trợ WYSIWYG (What you see is what you get), cho phép ta có thể thấy ngay những thay đổi trong khi viết bài nhằm tiết kiệm thời gian chỉnh sửa các lỗi hay những điểm không ưng ý một cách dễ dàng và nhanh chóng. Ở các phiên bản 3x, chúng ta có thể tạo BBCode/Media tags, nhưng qua IPS4 đã bỏ BBCode, chúng ta sẽ có thể dùng plugin của CKEditor hoặc HTML để add button. Bài viết này sẽ hướng dẫn các bạn cách quản lý và sử dụng Editor hiệu quả nhất. Tùy chỉnh thanh công cụ Trước tiên hãy truy cập vào ACP > Customization -> Editor > Toolbars. Tại đây bạn có thể tùy chỉnh thanh công cụ của Editor rất linh hoạt bằng cách kéo thả để sắp xếp hoặc xóa một button. Buttons not on editor là những buttons chưa được thêm vào Editor. Nắm và kéo lên trên để thêm. 3 tabs: Large, Medium, Small là kích thước của Editor, dùng kỹ thuật responsive để có thể xem tốt trên mọi thiết bị. Large = Desktop Medium = Tablet/Small Desktop Small = Phone Bạn nhìn thấy thế nào thì ở giao diện sử dụng sẽ như vậy. Ngoài ra còn có 2 nút màu xanh bên trên: Add Separator: Thêm gạch phân cách Add Toobar: Thêm hàng Để khôi phục mặc định thì bấm nút Restore Default Configuration Thiết lập quyền sử dụng và vùng hiển thị: Chỉ cần bấm trực tiếp vào button sẽ có thể chỉnh được phân quyền cho nhóm thành viên và khu vực hiển thị: Mặc định phân quyền sẽ cho tất cả nhóm thành viên và không giới hạn khu vực. Để chỉnh sửa bạn chỉ cần bỏ chọn Everyone hoặc Everywhere rồi chọn các tùy chọn trên, giữ ctrl để chọn nhiều. Lưu ý: một vài buttons như bold, italics, underline vẫn còn sử dụng bbcode cũ, cho nên giới phân quyền và tùy chọn khu vực hiển thị sẽ không tác dụng. Thêm button sử dụng plugin CKEditor Từ IPS4 trở lên, CKEditor đã được tích hợp sâu hơn. Do vậy bạn có thể sử dụng plugin của ckeditor để thêm button cho Editor. Kho plugin của CKEditor vô cùng phong phú, bạn có thể truy cập tại đây: [Hidden Content] Sau khi tìm được plugin vừa ý, bấm Add button > chọn tab CKEditor plugin > browse đến plugin vừa tải về để import. Cần chọn đúng phiên bản plugin mà IPS thông báo, như ví dụ hình dưới chúng ta cần phiên bản plugin 4.5.4 Sau khi import xong bạn sẽ thấy biểu tượng button mới ở phần Buttons Not On Editor, chỉ cần nắm kéo nó lên editor để sử dụng, click để thiết lập phân quyền và vùng hiển thị nếu cần thiết. Có thể trong quá trình cài đặt plugin bạn sẽ gặp các thông báo lỗi như sau: It doesn't add a button Hiện tại IPS chỉ hỗ trợ các plugin có hiển thị button trên editor, các plugin khác như skin, dev, clipboard,... sẽ ko hỗ trợ. It doesn't support the installed version of CKEditor Bị sai phiên bản plugin, kiểm tra lại trước khi import. Your CKEditor directory doesn't have write permissions Thư mục /applications/core/interface/ckeditor/ckeditor/plugins bị sai chmod. Chmod lại 777 hoặc 755. Thêm button tùy chỉnh Nếu trong trường hợp bạn không tìm được plugin ở kho plugin ckeditor, hoặc bạn chỉ muốn thêm một hỗ trợ định dạng đơn giản cho editor. Bạn có thể ứng dụng chức năng custom button thay thế. Custom button cho phép bạn tạo một block HTML để định dạng văn bản nhập vào. Vào Customization > Editor > Toolbars > click Add Button > chọn tab Custom: Button title Tên của button Icon Upload biểu tượng của button Type Có 3 kiểu: Inline - dùng cho những nội dung không cần phải xuống hàng (tương tự như bold, underline, link,...). Single line block - một block mới với 1 hàng duy nhất. Block - block với nhiều hàng. Use option Đây là tùy chọn cho button, nếu dùng thì khi click button sẽ hiện 1 bảng với 1 form để nhập tùy chọn này vào. Option label Đặt tên cho tùy chọn HTML Dùng HTML định dạng {option} Thay thế cho tùy chọn {content} Nội dung chính Để trang trí bằng CSS, bạn có thể thêm CSS vào custom.css (Customization > Themes > click </> để sửa > chọn tab CSS > core > front > custom > custom.css) Để cho dễ hiểu, mình lấy 1 ví dụ đơn giản làm 1 button để hiển thị block Tip giống thế này Button title Tip Icon Type Block Use option No HTML <div class='docsBox docsBox_tip'> <div class='docsBox_header'>Tip</div> <div class='docsBox_body'> <div class='ipsType_richText ipsType_break ipsContained'> {content} </div> </div> </div> Lưu lại, tiếp tục thêm CSS cho nó đẹp, Customization > Themes > click </> để sửa > chọn tab CSS > core > front > custom > custom.css .docsBox_header { padding: 5px 10px; color: #fff; font-weight: 500; font-size: 15px; } .docsBox_body { padding: 10px; font-size: 13px; line-height: 1.4; } .docsBox_tip .docsBox_header { background: #2E7D32; } .docsBox_tip .docsBox_body { background: #E8F5E9; } .docsBox_tip .docsBox_body .ipsType_richText { color: #1B5E20; } Hoàn chỉnh.
  24. 4 likes
    Đây là một application cho phép bạn lưu lại các liên kết trong ACP để dễ dàng truy cập một cách nhanh nhất. Nó hỗ trợ block ở Dashboard, chỉ cần kéo thả ra. DOWNLOAD (SOS41) Admin CP Useful Links 1.0.0.zip
  25. 4 likes
    Plugin nhỏ gọn, thêm một nút "Who read this topic" ở đầu topic khi bấm vào sẽ hiển thị danh sách những người đã xem chủ đề. DOWNLOAD (SOS40)_Topic_Viewed_by_Users_1.0.3.zip Nguồn: [Hidden Content]
  26. 4 likes
    ​Hello, I think They customize from IPS soure, not only app
  27. 3 likes
    Lần trước mình có giới thiệu đến các bạn VPSSIM là một script tự động cài đặt và tối ưu vps, quản lý trên nền SSH. Hôm nay tiếp tục giới thiệu đến các bạn Webuzo, một control panel miễn phí nhưng đầy đủ chức năng hơn. Webuzo cho phép bạn tự lựa chọn các thành phần cho webserver một cách linh hoạt, bạn có thể chọn lựa LEMP Stack (Nginx, MySQL, PHP), LAMP Stack (Apache, MySQL, PHP), LLMP Stack (Lighttpd, MySQL, PHP). Hoặc bạn muốn sử dụng MariaDB thay thế cho MySQL, hay là cài thêm các thành phần như Memcache, Varnish, Sphinx, CSF Firewall,... Rất đơn giản, mọi thứ đều có trong Webuzo cho bạn tùy chọn để thiết lập một cấu hình tối ưu nhất cho webserver của bạn. Ngoài ra, Webuzo còn hỗ trợ tự động cài đặt các mã nguồn mở như Prestashop, SMF,... Phiên bản miễn phí chỉ hỗ trợ 56 mã nguồn mở. Nếu muốn đầy đủ hơn bạn có thể mua license. Bạn có thể xem qua demo tại đây: [Hidden Content] Webuzo có thể chạy tốt trên CentOS , Ubuntu. Trước khi cài đặt Webuzo, hãy đảm bảo máy chủ của bạn không cài bất kì ứng dụng nào (apache, nginx, mysql, PHP,...). Quá trình cài đặt gồm các bước như sau: Đăng nhập vào SSH (có thể dùng PuTTY). Chạy lệnh để tải về Webuzo wget -N [Hidden Content] Chmod hmod 0755 install.sh Cài đặt ./install.sh Quá trình cài đặt bắt đầu, mặc định sẽ cài đặt các thành phần cơ bản nhất của một webserver: LAMP stack, DNS, FTP,... (Bạn có thể tùy chỉnh lại sau). Sau khi cài đặt xong, bạn tiếp tục dùng browser truy cập vào control panel để cấu hình các thông tin như tên truy cập, email, license (nếu có) Ở phần Primary Domain bạn có thể nhập vào domain hoặc IP của máy chủ. NameServer nếu không có thì bạn nhập đại cũng được. Xong bấm nút Install và đợi Hoàn thành sẽ hiển thị thông tin truy cập Control Panel Url với cổng 2004 là control panel chính, tại đó có thể thay đổi thông tin server như nameserver, email, theme, các mã nguồn mở,... Còn url với cổng 2002 (Enduser Panel), nó hiển thị đầy đủ từ thông tin server cho đến các biểu tượng cho các chức năng quan trọng: Add domain, File manager, FPT, Database, Email... cũng tương tự như cPanel, bạn nào quen dùng cPanel sẽ ko gặp khó khăn với Webuzo. Ở phần Apps, bạn có thể lựa chọn cài đặt các thành phần cần thiết như giới thiệu đầu bài. Nhìn chung, Webuzo là một control panel miễn phí, tuy đơn giản nhưng mạnh mẽ, dễ dàng tùy chỉnh và quản lý, rất phù hợp với những người chưa có kinh nghiệm tự cài đặt và những người lười biếng (như mình)
  28. 3 likes
    Đó demo đó : [Hidden Content]
  29. 3 likes
    ​I will add an option to change the height. But you can do it right now by editting template bit. Go to ACP -> Customization -> click </> to edit your theme -> bimchatbox -> front -> chat -> main. You can change the height in this code <div id='chatboxWrap' style='height: 300px; overflow-y: scroll;'>Save ​I confirm this bug, will fix in the next version.
  30. 2 likes
    Hi all, I don't know if I post in the good forum ................. So I've a request for you, is it possible for you to code the Hook Topic Title Colored for IPS 4 ? I've ask to the original coder, but I don't have a feedback :( Please find below the Hook for IPS 3.4: <?xml version="1.0" encoding="UTF-8"?> -<hookexport> -<hookdata> -<config> <hook_name>(SOS32) Цветные название тем</hook_name> <hook_desc>Позволяет пользователю создавать темы с цветными название</hook_desc> <hook_author>Adriano Faria</hook_author> <hook_email>administracao@sosinvision.com.br</hook_email> <hook_website>[Hidden Content]; <hook_update_check/> -<hook_requirements> <![CDATA[a:4:{s:20:"hook_ipb_version_min";i:31007;s:20:"hook_ipb_version_max";i:0;s:20:"hook_php_version_min";s:0:"";s:20:"hook_php_version_max";s:0:"";}]]> </hook_requirements> <hook_version_human>2.2.0</hook_version_human> <hook_version_long>22000</hook_version_long> -<hook_extra_data> <![CDATA[a:4:{s:7:"display";a:3:{s:9:"templates";s:33:"From skin_post: topicTitleColored";s:8:"language";s:92:"From forums_public_post: ttc_backgroundcolor, ttc_bold, ttc_fontcolor, ttc_italic, ttc_title";s:8:"database";s:264:"ALTER TABLE topics ADD ttc_fontcolor varchar(32)<br />ALTER TABLE topics ADD ttc_backgroundcolor varchar(32)<br />ALTER TABLE topics ADD ttc_bold tinyint(1)<br />ALTER TABLE topics ADD ttc_italic tinyint(1)<br />ALTER TABLE forums ADD last_title_style varchar(255)";}s:8:"language";a:1:{s:18:"forums_public_post";a:5:{s:0:"";s:19:"ttc_backgroundcolor";i:1;s:8:"ttc_bold";i:2;s:13:"ttc_fontcolor";i:3;s:10:"ttc_italic";i:4;s:9:"ttc_title";}}s:9:"templates";a:1:{s:9:"skin_post";a:1:{s:0:"";s:17:"topicTitleColored";}}s:8:"database";a:1:{s:5:"alter";a:5:{i:0;a:6:{s:9:"altertype";s:3:"add";s:5:"table";s:6:"topics";s:5:"field";s:13:"ttc_fontcolor";s:8:"newfield";s:0:"";s:9:"fieldtype";s:11:"varchar(32)";s:7:"default";s:0:"";}i:1;a:6:{s:9:"altertype";s:3:"add";s:5:"table";s:6:"topics";s:5:"field";s:19:"ttc_backgroundcolor";s:8:"newfield";s:0:"";s:9:"fieldtype";s:11:"varchar(32)";s:7:"default";s:0:"";}i:2;a:6:{s:9:"altertype";s:3:"add";s:5:"table";s:6:"topics";s:5:"field";s:8:"ttc_bold";s:8:"newfield";s:0:"";s:9:"fieldtype";s:10:"tinyint(1)";s:7:"default";s:0:"";}i:3;a:6:{s:9:"altertype";s:3:"add";s:5:"table";s:6:"topics";s:5:"field";s:10:"ttc_italic";s:8:"newfield";s:0:"";s:9:"fieldtype";s:10:"tinyint(1)";s:7:"default";s:0:"";}i:4;a:6:{s:9:"altertype";s:3:"add";s:5:"table";s:6:"forums";s:5:"field";s:16:"last_title_style";s:8:"newfield";s:0:"";s:9:"fieldtype";s:12:"varchar(255)";s:7:"default";s:0:"";}}}}]]> </hook_extra_data> <hook_key>SOS33_ttc</hook_key> </config> </hookdata> -<hookfiles> -<file> <hook_file_real>SOS33_ttc_newtopic.php</hook_file_real> <hook_type>dataHooks</hook_type> <hook_classname>SOS33_ttc_newtopic</hook_classname> -<hook_data> <![CDATA[a:8:{s:12:"dataLocation";s:12:"postAddTopic";s:14:"libApplication";s:0:"";s:15:"classToOverload";s:0:"";s:9:"skinGroup";N;s:12:"skinFunction";N;s:4:"type";N;s:2:"id";N;s:8:"position";N;}]]> </hook_data> -<hooks_source> <![CDATA[<?php class SOS33_ttc_newtopic { /** * Product Title: (SOS34) Topic Title Colored * Product Version: 2.2.0 * Author: Adriano Faria * Website: SOS Invision * Website URL: [Hidden Content] * Email: administracao@sosinvision.com.br */ protected $request; public function __construct() { $this->registry = ipsRegistry::instance(); $this->memberData =& $this->registry->member()->fetchMemberData(); $this->settings =& $this->registry->fetchSettings(); $this->request =& $this->registry->fetchRequest(); } public function handleData( $data ) { if ( in_array( $this->memberData['member_group_id'], explode( ',', $this->settings['SOS33_ttc_grupos'] ) ) AND in_array( $this->request['f'], explode( ',', $this->settings['SOS33_ttc_forums'] ) ) ) { $data['ttc_fontcolor'] = $this->request['ttc_fontcolor']; $data['ttc_backgroundcolor'] = $this->request['ttc_backgroundcolor']; $data['ttc_bold'] = ( $this->request['ttc_bold'] == 1 ) ? 1: 0; $data['ttc_italic'] = ( $this->request['ttc_italic'] == 1 ) ? 1 : 0; } return $data; } }]]> </hooks_source> </file> -<file> <hook_file_real>SOS33_ttc_dataHook_forums.php</hook_file_real> <hook_type>dataHooks</hook_type> <hook_classname>SOS33_ttc_dataHook_forums</hook_classname> -<hook_data> <![CDATA[a:8:{s:12:"dataLocation";s:23:"updateForumLastPostData";s:14:"libApplication";s:0:"";s:15:"classToOverload";s:0:"";s:9:"skinGroup";N;s:12:"skinFunction";N;s:4:"type";N;s:2:"id";N;s:8:"position";N;}]]> </hook_data> -<hooks_source> <![CDATA[<?php class SOS33_ttc_dataHook_forums { /** * Product Title: (SOS34) Topic Title Colored * Product Version: 2.2.0 * Author: Adriano Faria * Website: SOS Invision * Website URL: [Hidden Content] * Email: administracao@sosinvision.com.br */ public function handleData( $forum_data ) { $topic = ipsRegistry::instance()->cache()->getCache( 'topicData' ); $styleArray = array(); if ( $topic['ttc_fontcolor'] OR $topic['ttc_backgroundcolor'] OR $topic['ttc_bold'] OR $topic['ttc_italic'] ) { $styleArray = array( 'styleForTid' => $topic['tid'], 'ttc_fontcolor' => $topic['ttc_fontcolor'], 'ttc_backgroundcolor' => $topic['ttc_backgroundcolor'], 'ttc_bold' => $topic['ttc_bold'], 'ttc_italic' => $topic['ttc_italic'], ); } $forum_data['last_title_style'] = serialize( $styleArray ); return $forum_data; } }]]> </hooks_source> </file> -<file> <hook_file_real>SOS33_ttc_profileTabs.php</hook_file_real> <hook_type>skinHooks</hook_type> <hook_classname>SOS33_ttc_profileTabs</hook_classname> -<hook_data> <![CDATA[a:8:{s:12:"dataLocation";s:0:"";s:14:"libApplication";s:0:"";s:15:"classToOverload";s:12:"skin_profile";s:9:"skinGroup";N;s:12:"skinFunction";N;s:4:"type";N;s:2:"id";N;s:8:"position";N;}]]> </hook_data> -<hooks_source> <![CDATA[class SOS33_ttc_profileTabs extends skin_profile(~id~) { /** * Product Title: (SOS34) Topic Title Colored * Product Version: 2.2.0 * Author: Adriano Faria * Website: SOS Invision * Website URL: [Hidden Content] * Email: administracao@sosinvision.com.br */ function tabSingleColumn($row=array(), $read_more_link='', $url='', $title='') { if ( $this->settings['SOS33_ttc_profiletab'] ) { $style = ""; if ( $row['ttc_fontcolor'] OR $row['ttc_backgroundcolor'] OR $row['ttc_bold'] OR $row['ttc_italic'] ) { $style .= " style='"; if ( $row['ttc_backgroundcolor'] ) { $style .= "-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding-left:5px;padding-right:5px;padding-top:2px;padding-bottom:2px;"; } $style .= ( $row['ttc_fontcolor'] ) ? "color: {$row['ttc_fontcolor']}; " : ''; $style .= ( $row['ttc_backgroundcolor'] ) ? "background-color: {$row['ttc_backgroundcolor']}; " : ''; $style .= ( $row['ttc_italic'] ) ? "font-style: italic; " : ''; $style .= ( $row['ttc_bold'] ) ? "font-weight: bold; " : ''; $style .= "'"; $title = "<span{$style}>".IPSText::truncate($title,90)."</span>"; } return parent::ttc_tabSingleColumn( $row, $read_more_link, $url, $title ); } else { return parent::tabSingleColumn( $row, $read_more_link, $url, $title ); } } }]]> </hooks_source> </file> -<file> <hook_file_real>SOS33_ttc_topicView.php</hook_file_real> <hook_type>templateHooks</hook_type> <hook_classname>SOS33_ttc_topicView</hook_classname> -<hook_data> <![CDATA[a:8:{s:12:"dataLocation";s:0:"";s:14:"libApplication";s:0:"";s:15:"classToOverload";s:0:"";s:9:"skinGroup";s:10:"skin_topic";s:12:"skinFunction";s:17:"topicViewTemplate";s:4:"type";s:2:"if";s:2:"id";s:11:"allowRating";s:8:"position";s:11:"pre.startif";}]]> </hook_data> -<hooks_source> <![CDATA[<?php /** * Product Title: (SOS34) Topic Title Colored * Product Version: 2.2.0 * Author: Adriano Faria * Website: SOS Invision * Website URL: [Hidden Content] * Email: administracao@sosinvision.com.br */ class SOS33_ttc_topicView { public function __construct() { $this->registry = ipsRegistry::instance(); $this->DB = $this->registry->DB(); $this->request =& $this->registry->fetchRequest(); $this->lang = $this->registry->getClass('class_localization'); } public function getOutput() { $topic = $this->registry->output->getTemplate('topic')->functionData['topicViewTemplate'][0]['topic']; $style = ""; if ( $topic['ttc_fontcolor'] OR $topic['ttc_backgroundcolor'] OR $topic['ttc_bold'] OR $topic['ttc_italic'] ) { $style .= ".ipsType_pagetitle {" . PHP_EOL; if ( $topic['ttc_backgroundcolor'] ) { $style .= "-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding-left:5px;padding-right:5px;padding-top:2px;padding-bottom:2px;display: inline;"; } $style .= ( $topic['ttc_fontcolor'] ) ? "\tcolor: {$topic['ttc_fontcolor']};" . PHP_EOL : ''; $style .= ( $topic['ttc_backgroundcolor'] ) ? "\tbackground-color: {$topic['ttc_backgroundcolor']};" . PHP_EOL : ''; $style .= ( $topic['ttc_italic'] ) ? "\tfont-style: italic;" . PHP_EOL : ''; $style .= ( $topic['ttc_bold'] ) ? "\tfont-weight: bold;" . PHP_EOL : ''; $style .= "}" . PHP_EOL; } return ( ! empty( $style ) ) ? "<style type='text/css'>{$style}</style>" : ''; } }]]> </hooks_source> </file> -<file> <hook_file_real>SOS33_ttc_modLibrary.php</hook_file_real> <hook_type>libraryHooks</hook_type> <hook_classname>SOS33_ttc_modLibrary</hook_classname> -<hook_data> <![CDATA[a:8:{s:12:"dataLocation";s:0:"";s:14:"libApplication";s:6:"forums";s:15:"classToOverload";s:16:"moderatorLibrary";s:9:"skinGroup";N;s:12:"skinFunction";N;s:4:"type";N;s:2:"id";N;s:8:"position";N;}]]> </hook_data> -<hooks_source> <![CDATA[<?php /** * Product Title: (SOS34) Topic Title Colored * Product Version: 2.2.0 * Author: Adriano Faria * Website: SOS Invision * Website URL: [Hidden Content] * Email: administracao@sosinvision.com.br */ class SOS33_ttc_modLibrary extends (~extends~) { /** * Recount a forum * * @return boolean */ public function forumRecount( $fid="" ) { $fid = intval($fid); if ( ! $fid ) { if ( $this->forum['id'] ) { $fid = $this->forum['id']; } else { return false; } } //----------------------------------------- // Get the topics.. //----------------------------------------- $topics = $this->DB->buildAndFetch( array( 'select' => 'COUNT(*) as count', 'from' => 'topics', 'where' => "approved=1 and forum_id={$fid}" ) ); //----------------------------------------- // Get the QUEUED topics.. //----------------------------------------- $queued_topics = $this->DB->buildAndFetch( array( 'select' => 'COUNT(*) as count', 'from' => 'topics', 'where' => "approved=0 and forum_id={$fid}" ) ); //----------------------------------------- // Get the DELETED topics.. //----------------------------------------- $deleted_topics = $this->DB->buildAndFetch( array( 'select' => 'COUNT(*) as count', 'from' => 'topics', 'where' => "approved=-1 and forum_id={$fid}" ) ); //----------------------------------------- // Get the posts.. //----------------------------------------- $posts = $this->DB->buildAndFetch( array( 'select' => 'SUM(posts) as replies', 'from' => 'topics', 'where' => "approved=1 and forum_id={$fid}" ) ); //----------------------------------------- // Get the QUEUED posts.. //----------------------------------------- $queued_posts = $this->DB->buildAndFetch( array( 'select' => 'SUM(topic_queuedposts) as replies', 'from' => 'topics', 'where' => "forum_id={$fid}" ) ); //----------------------------------------- // Get the DELETED posts.. //----------------------------------------- $deleted_posts = $this->DB->buildAndFetch( array( 'select' => 'SUM(topic_deleted_posts) as replies', 'from' => 'topics', 'where' => "forum_id={$fid}" ) ); //----------------------------------------- // Get the forum last poster.. //----------------------------------------- $last_post = $this->DB->buildAndFetch( array( 'select' => 'tid, title, last_poster_id, last_poster_name, seo_last_name, last_post', 'from' => 'topics', 'where' => "approved=1 and forum_id={$fid}", 'order' => 'last_post DESC', 'limit' => array( 1 ) ) ); $newest_topic = $this->DB->buildAndFetch( array( 'select' => 'title, tid, seo_first_name, ttc_fontcolor, ttc_backgroundcolor, ttc_bold, ttc_italic', 'from' => 'topics', 'where' => 'forum_id=' . $fid . ' and approved=1', 'order' => 'start_date desc', 'limit' => array( 1 ) ) ); $styleArray = array(); if ( $newest_topic['ttc_fontcolor'] OR $newest_topic['ttc_backgroundcolor'] OR $newest_topic['ttc_bold'] OR $newest_topic['ttc_italic'] ) { $styleArray = array( 'styleForTid' => $newest_topic['tid'], 'ttc_fontcolor' => $newest_topic['ttc_fontcolor'], 'ttc_backgroundcolor' => $newest_topic['ttc_backgroundcolor'], 'ttc_bold' => $newest_topic['ttc_bold'], 'ttc_italic' => $newest_topic['ttc_italic'], ); } $lastXTopics = $this->registry->class_forums->lastXFreeze( $this->registry->class_forums->buildLastXTopicIds( $fid, FALSE ) ); //----------------------------------------- // Reset this forums stats //----------------------------------------- $dbs = array( 'name_seo' => IPSText::makeSeoTitle( $this->registry->class_forums->allForums[ $fid ]['name'] ), 'last_poster_id' => intval($last_post['last_poster_id']), 'last_poster_name' => $last_post['last_poster_name'], 'seo_last_name' => IPSText::makeSeoTitle( $last_post['last_poster_name'] ), 'last_post' => intval($last_post['last_post']), 'last_title' => $last_post['title'], 'seo_last_title' => IPSText::makeSeoTitle( $last_post['title'] ), 'last_id' => intval($last_post['tid']), 'topics' => intval($topics['count']), 'posts' => intval($posts['replies']), 'queued_topics' => intval($queued_topics['count']), 'queued_posts' => intval($queued_posts['replies']), 'deleted_posts' => intval($deleted_posts['replies']), 'deleted_topics' => intval($deleted_topics['count']), 'newest_id' => intval($newest_topic['tid']), 'newest_title' => $newest_topic['title'], 'last_x_topic_ids' => $lastXTopics, 'last_title_style' => serialize( $styleArray ), ); if ( $this->registry->class_forums->allForums[ $fid ]['_update_deletion'] ) { $dbs['forum_last_deletion'] = time(); } $this->DB->force_data_type = array( 'last_poster_name' => 'string', 'last_title' => 'string', 'newest_title' => 'string', 'seo_last_title' => 'string', 'seo_last_name' => 'string' ); $this->DB->update( 'forums', $dbs, "id=" . $fid ); return true; } }]]> </hooks_source> </file> -<file> <hook_file_real>SOS33_ttc_newfileds.php</hook_file_real> <hook_type>templateHooks</hook_type> <hook_classname>SOS33_ttc_newfileds</hook_classname> -<hook_data> <![CDATA[a:8:{s:12:"dataLocation";s:0:"";s:14:"libApplication";s:0:"";s:15:"classToOverload";s:0:"";s:9:"skinGroup";s:9:"skin_post";s:12:"skinFunction";s:16:"postFormTemplate";s:4:"type";s:2:"if";s:2:"id";s:11:"pollboxHtml";s:8:"position";s:11:"pre.startif";}]]> </hook_data> -<hooks_source> <![CDATA[<?php /** * Product Title: (SOS34) Topic Title Colored * Product Version: 2.2.0 * Author: Adriano Faria * Website: SOS Invision * Website URL: [Hidden Content] * Email: administracao@sosinvision.com.br */ class SOS33_ttc_newfileds { public $registry; public $DB; public $request; public $lang; public function __construct() { $this->registry = ipsRegistry::instance(); $this->memberData =& $this->registry->member()->fetchMemberData(); $this->settings =& $this->registry->fetchSettings(); $this->request =& $this->registry->fetchRequest(); $this->DB = $this->registry->DB(); $this->cache = $this->registry->cache(); $this->caches =& $this->registry->cache()->fetchCaches(); } public function getOutput() { if ( $this->request['do'] == 'reply_post' ) { return false; } if ( !in_array( $this->memberData['member_group_id'], explode( ',', $this->settings['SOS33_ttc_grupos'] ) ) OR !in_array( $this->request['f'], explode( ',', $this->settings['SOS33_ttc_forums'] ) ) ) { return false; } return $this->registry->getClass('output')->getTemplate( 'post' )->topicTitleColored( $this->caches['topicTitleColored'] ); } }]]> </hooks_source> </file> -<file> <hook_file_real>SOS33_ttc_postModule.php</hook_file_real> <hook_type>libraryHooks</hook_type> <hook_classname>SOS33_ttc_postModule</hook_classname> -<hook_data> <![CDATA[a:8:{s:12:"dataLocation";s:0:"";s:14:"libApplication";s:6:"forums";s:15:"classToOverload";s:14:"classPostForms";s:9:"skinGroup";N;s:12:"skinFunction";N;s:4:"type";N;s:2:"id";N;s:8:"position";N;}]]> </hook_data> -<hooks_source> <![CDATA[<?php /** * Product Title: (SOS34) Topic Title Colored * Product Version: 2.2.0 * Author: Adriano Faria * Website: SOS Invision * Website URL: [Hidden Content] * Email: administracao@sosinvision.com.br */ class SOS33_ttc_postModule extends (~extends~) { private $formType = ''; public function hook_topicTitleColored() { if ( ! in_array( $this->formType, array( 'new', 'edit' ) ) ) { return false; } switch( $this->formType ) { case 'new': $checkFunc = 'topicSetUp'; break; case 'edit': $checkFunc = 'editSetUp'; break; } //----------------------------------------- // Global checks and functions //----------------------------------------- try { $this->globalSetUp(); } catch( Exception $error ) { $e = $error->getMessage(); if ( $this->formType == 'edit' AND $e == 'NO_POSTING_PPD' ) { } else { throw new Exception( $e ); } } //----------------------------------------- // Form specific... //----------------------------------------- try { $topic = $this->$checkFunc(); } catch( Exception $error ) { throw new Exception( $error->getMessage() ); } $styles = array(); foreach( array( 'fontcolor', 'backgroundcolor', 'italic', 'bold' ) as $style ) { $styles['ttc_' . $style ] = isset( $this->request['ttc_' . $style ] ) ? $this->request['ttc_' . $style ] : ''; } if( $this->_originalPost['new_topic'] ) { foreach( array( 'fontcolor', 'backgroundcolor', 'italic', 'bold' ) as $style ) { if ( ! isset( $styles['ttc_' . $style ] ) OR ! $styles['ttc_' . $style ] ) { if ( isset( $topic['ttc_' . $style ] ) AND $topic['ttc_' . $style ] ) { $styles['ttc_' . $style ] = $topic['ttc_' . $style ]; } } } } return $styles; } public function showEditForm() { $this->formType = 'edit'; $this->cache->updateCacheWithoutSaving( 'topicTitleColored', $this->hook_topicTitleColored() ); parent::showEditForm(); } public function showTopicForm() { $this->formType = 'new'; $this->cache->updateCacheWithoutSaving( 'topicTitleColored', $this->hook_topicTitleColored() ); parent::showTopicForm(); } public function editPost() { try { $return = parent::editPost(); if ( $return === TRUE ) { if( $this->_originalPost['new_topic'] == 1 ) { $bold = 0; $italic = 0; $toUpdate = array(); if ( isset( $this->request['ttc_fontcolor'] ) and $this->request['ttc_fontcolor'] ) { $toUpdate['ttc_fontcolor'] = $this->request['ttc_fontcolor']; } else { $toUpdate['ttc_fontcolor'] = ''; } if ( isset( $this->request['ttc_backgroundcolor'] ) and $this->request['ttc_backgroundcolor'] ) { $toUpdate['ttc_backgroundcolor'] = $this->request['ttc_backgroundcolor']; } else { $toUpdate['ttc_backgroundcolor'] = ''; } if ( isset( $this->request['ttc_bold'] ) and $this->request['ttc_bold'] == 1 ) { $bold = 1; } else { $bold = 0; } $toUpdate['ttc_bold'] = $bold; if ( isset( $this->request['ttc_italic'] ) and $this->request['ttc_italic'] == 1 ) { $italic = 1; } else { $italic = 0; } $toUpdate['ttc_italic'] = $italic; if ( count( $toUpdate ) ) { $classToLoad = IPSLib::loadLibrary( IPSLib::getAppDir( 'forums' ) . "/sources/classes/topics.php", 'app_forums_classes_topics', 'forums' ); $topicClass = new $classToLoad( $this->registry ); $topic = $topicClass->getTopicById( $this->request['t'] ); $topic = array_merge( $topic, $toUpdate ); $topicClass->updateTopic( $topic['tid'], $toUpdate ); /* Needs this in case someone but the topic starter edits the topic */ $this->setAuthor( $topic['starter_id'] ); $dbs = array(); $this->registry->cache()->updateCacheWithoutSaving( 'topicData', $topic ); $this->DB->setDataType( array( 'last_poster_name', 'seo_last_name', 'seo_last_title', 'last_title' ), 'string' ); /* Data Hook Location */ IPSLib::doDataHooks( $dbs, 'updateForumLastPostData' ); $this->DB->update( 'forums', $dbs, "id=".intval($topic['forum_id']) ); } } } return $return; } catch( Exception $error ) { throw new Exception( $error->getMessage() ); } } protected function updateForumAndStats( $topic, $type='new') { $this->registry->cache()->updateCacheWithoutSaving( 'topicData', $topic ); return parent::updateForumAndStats( $topic, $type ); } }]]> </hooks_source> </file> -<file> <hook_file_real>SOS33_ttc_newtopic_forumview.php</hook_file_real> <hook_type>templateHooks</hook_type> <hook_classname>SOS33_ttc_newtopic_forumview</hook_classname> -<hook_data> <![CDATA[a:8:{s:12:"dataLocation";s:0:"";s:14:"libApplication";s:0:"";s:15:"classToOverload";s:0:"";s:9:"skinGroup";s:10:"skin_forum";s:12:"skinFunction";s:18:"forumIndexTemplate";s:4:"type";s:2:"if";s:2:"id";s:10:"showtopics";s:8:"position";s:12:"post.startif";}]]> </hook_data> -<hooks_source> <![CDATA[<?php /** * Product Title: (SOS34) Topic Title Colored * Product Version: 2.2.0 * Author: Adriano Faria * Website: SOS Invision * Website URL: [Hidden Content] * Email: administracao@sosinvision.com.br */ class SOS33_ttc_newtopic_forumview { protected $registry; protected $DB; protected $request; protected $lang; protected $prefixes; public function __construct() { $this->registry = ipsRegistry::instance(); $this->DB = $this->registry->DB(); $this->request =& $this->registry->fetchRequest(); $this->lang = $this->registry->getClass('class_localization'); } public function getOutput() { $data = $this->registry->output->getTemplate('forum')->functionData['forumIndexTemplate'][0]; $style = ""; foreach( $data['topic_data'] as $topic ) { if ( ! $topic['ttc_fontcolor'] AND ! $topic['ttc_backgroundcolor'] AND ! $topic['ttc_bold'] AND ! $topic['ttc_italic'] ) { continue; } $style .= "#tid-link-{$topic['tid']} {" . PHP_EOL; if ( $topic['ttc_backgroundcolor'] ) { $style .= "-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding-left:5px;padding-right:5px;padding-top:2px;padding-bottom:2px;"; } $style .= ( $topic['ttc_fontcolor'] ) ? "\tcolor: {$topic['ttc_fontcolor']};" . PHP_EOL : ''; $style .= ( $topic['ttc_backgroundcolor'] ) ? "\tbackground-color: {$topic['ttc_backgroundcolor']};" . PHP_EOL : ''; $style .= ( $topic['ttc_italic'] ) ? "\tfont-style: italic;" . PHP_EOL : ''; $style .= ( $topic['ttc_bold'] ) ? "\tfont-weight: bold;" . PHP_EOL : ''; $style .= "}" . PHP_EOL; } return ( ! empty( $style ) ) ? "<style type='text/css'>{$style}</style>" : ''; } /*public function replaceOutput( $output, $key ) { $data = $this->registry->output->getTemplate('forum')->functionData['forumIndexTemplate'][0]; $tag = '<!--hook.'.$key.'-->'; $lastFound = 0; $fc = ""; $bg = ""; foreach( $data['topic_data'] as $tid => $topic ) { $tag2 = '"topic-'.$tid.'"'; $pos = strpos( $output, $tag, $lastFound ); $pos = $pos ? $pos : strpos( $output, '"topic-'.$tid.'"', $lastFound ) + strlen( $tag2 ) + 1; if ( $topic['ttc_fontcolor'] ) { $fc = 'color:'.$topic['ttc_fontcolor'].';'; } if ( $topic['ttc_backgroundcolor'] ) { $bg = 'background-color:'.$topic['ttc_backgroundcolor'].';'; } if ( $topic['ttc_bold'] ) { $bold = 'font-weight:bold;'; } if ( $topic['ttc_italic'] ) { $italic = 'font-style: italic;'; } if ( $fc OR $bg OR $bold or $italic ) { $strToInsert = '<div style="float:left;'.$fc.$bg.$bold.$italic.'">'; } if( $pos ) { $output = substr_replace( $output, $strToInsert, $pos, 0 ); $lastFound = $pos + strlen( $tag . $strToInsert ); } } return $output; }*/ } ]]> </hooks_source> </file> -<file> <hook_file_real>SOS33_ttc_search.php</hook_file_real> <hook_type>templateHooks</hook_type> <hook_classname>SOS33_ttc_search</hook_classname> -<hook_data> <![CDATA[a:8:{s:12:"dataLocation";s:0:"";s:14:"libApplication";s:0:"";s:15:"classToOverload";s:0:"";s:9:"skinGroup";s:11:"skin_search";s:12:"skinFunction";s:20:"searchResultsAsForum";s:4:"type";s:7:"foreach";s:2:"id";s:16:"NCresultsAsForum";s:8:"position";s:9:"outer.pre";}]]> </hook_data> -<hooks_source> <![CDATA[<?php class SOS33_ttc_search { /** * Product Title: (SOS34) Topic Title Colored * Product Version: 2.2.0 * Author: Adriano Faria * Website: SOS Invision * Website URL: [Hidden Content] * Email: administracao@sosinvision.com.br */ public function __construct() { $this->registry = ipsRegistry::instance(); $this->DB = $this->registry->DB(); $this->request =& $this->registry->fetchRequest(); $this->lang = $this->registry->getClass('class_localization'); $this->cache = $this->registry->cache(); $this->caches =& $this->registry->cache()->fetchCaches(); $this->settings =& $this->registry->fetchSettings(); } public function getOutput() { $data = $this->caches['resultSet']; $selectorTitle = $this->lang->words['view_result']; $style = ""; if ( is_array( $data ) AND count( $data ) ) { foreach( $data as $topic ) { if ( ! $topic['ttc_fontcolor'] AND ! $topic['ttc_backgroundcolor'] AND ! $topic['ttc_bold'] AND ! $topic['ttc_italic'] ) { continue; } if ( !$this->settings['SOS33_ttc_searchresults'] ) { continue; } $style .= "#trow_{$topic['tid']} a[title='{$selectorTitle}'] {" . PHP_EOL; if ( $topic['ttc_backgroundcolor'] ) { $style .= "-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding-left:5px;padding-right:5px;padding-top:2px;padding-bottom:2px;"; } $style .= ( $topic['ttc_fontcolor'] ) ? "\tcolor: {$topic['ttc_fontcolor']};" . PHP_EOL : ''; $style .= ( $topic['ttc_backgroundcolor'] ) ? "\tbackground-color: {$topic['ttc_backgroundcolor']};" . PHP_EOL : ''; $style .= ( $topic['ttc_italic'] ) ? "\tfont-style: italic;" . PHP_EOL : ''; $style .= ( $topic['ttc_bold'] ) ? "\tfont-weight: bold;" . PHP_EOL : ''; $style .= "}" . PHP_EOL; } } return ( ! empty( $style ) ) ? "<style type='text/css'>{$style}</style>" : ''; } }]]> </hooks_source> </file> -<file> <hook_file_real>SOS33_ttc_search_dummy.php</hook_file_real> <hook_type>skinHooks</hook_type> <hook_classname>SOS33_ttc_search_dummy</hook_classname> -<hook_data> <![CDATA[a:8:{s:12:"dataLocation";s:0:"";s:14:"libApplication";s:0:"";s:15:"classToOverload";s:11:"skin_search";s:9:"skinGroup";N;s:12:"skinFunction";N;s:4:"type";N;s:2:"id";N;s:8:"position";N;}]]> </hook_data> -<hooks_source> <![CDATA[ /** * Product Title: (SOS34) Topic Title Colored * Product Version: 2.2.0 * Author: Adriano Faria * Website: SOS Invision * Website URL: [Hidden Content] * Email: administracao@sosinvision.com.br */ /* This is just a dummy hook to get access to the data I need in a different templatehook */ class SOS33_ttc_search_dummy extends skin_search(~id~) { function topicPostSearchResultAsForum( $data, $resultAsTitle=false ) { $cache = $this->caches['resultSet']; $cache[ $data['tid'] ] = $data; $this->cache->updateCacheWithoutSaving( 'resultSet', $cache ); return parent::topicPostSearchResultAsForum( $data, $resultAsTitle ); } }]]> </hooks_source> </file> -<file> <hook_file_real>SOS33_ttc_boardIndex.php</hook_file_real> <hook_type>libraryHooks</hook_type> <hook_classname>SOS33_ttc_boardIndex</hook_classname> -<hook_data> <![CDATA[a:8:{s:12:"dataLocation";s:0:"";s:14:"libApplication";s:6:"forums";s:15:"classToOverload";s:12:"class_forums";s:9:"skinGroup";N;s:12:"skinFunction";N;s:4:"type";N;s:2:"id";N;s:8:"position";N;}]]> </hook_data> -<hooks_source> <![CDATA[<?php /** * Product Title: (SOS34) Topic Title Colored * Product Version: 2.2.0 * Author: Adriano Faria * Website: SOS Invision * Website URL: [Hidden Content] * Email: administracao@sosinvision.com.br */ class SOS33_ttc_boardIndex extends (~extends~) { public function forumsFormatLastinfo( $forum_data ) { if ( !$this->settings['SOS33_ttc_boardindex'] ) { return parent::forumsFormatLastInfo( $forum_data ); } $forum_data = parent::forumsFormatLastInfo( $forum_data ); if ( $forum_data['last_topic_title'] AND $forum_data['_hide_last_date'] != TRUE ) { $topic = unserialize( $forum_data['last_title_style'] ); if ( ( ! $topic['styleForTid'] OR $topic['styleForTid'] == $forum_data['last_id'] ) AND ( $topic['ttc_fontcolor'] OR $topic['ttc_backgroundcolor'] OR $topic['ttc_bold'] OR $topic['ttc_italic'] ) ) { $style .= " style='"; $style .= "-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding-left:5px;padding-right:5px;padding-top:2px;padding-bottom:2px;"; $style .= ( $topic['ttc_fontcolor'] ) ? "color: {$topic['ttc_fontcolor']}; " : ''; $style .= ( $topic['ttc_backgroundcolor'] ) ? "background-color: {$topic['ttc_backgroundcolor']}; " : ''; $style .= ( $topic['ttc_italic'] ) ? "font-style: italic; " : ''; $style .= ( $topic['ttc_bold'] ) ? "font-weight: bold; " : ''; $style .= "'"; $forum_data['last_topic_title'] = "<a{$style} href='" . $this->registry->getClass('output')->formatUrl( $this->registry->getClass('output')->buildUrl( "showtopic={$forum_data['last_id']}&amp;view=getnewpost", 'public' ), $forum_data['seo_last_title'], 'showtopic' ) . "' title='" . $this->lang->words['tt_gounread'] . ": {$forum_data['full_last_title']}'>{$forum_data['last_title']}</a>"; } } return $forum_data; } public function forumsCalcChildren( $root_id, $forum_data=array(), $done_pass=0 ) { //----------------------------------------- // Markers //----------------------------------------- $rtime = $this->registry->classItemMarking->fetchTimeLastMarked( array( 'forumID' => $forum_data['id'] ), 'forums' ); if( !isset($forum_data['_has_unread']) ) { $forum_data['_has_unread'] = ( $forum_data['last_post'] && $forum_data['last_post'] > $rtime ) ? 1 : 0; } if ( isset( $this->forum_cache[ $root_id ]) AND is_array( $this->forum_cache[ $root_id ] ) ) { foreach( $this->forum_cache[ $root_id ] as $data ) { if ( $data['last_post'] > $forum_data['last_post'] AND ! $data['hide_last_info'] ) { $forum_data['last_post'] = $data['last_post']; $forum_data['fid'] = $data['id']; $forum_data['last_id'] = $data['last_id']; $forum_data['last_title'] = $data['last_title']; $forum_data['seo_last_title'] = $data['seo_last_title']; $forum_data['password'] = isset( $data['password'] ) ? $data['password'] : ''; $forum_data['password_override'] = isset( $data['password_override'] ) ? $data['password_override'] : ''; $forum_data['last_poster_id'] = $data['last_poster_id']; $forum_data['last_poster_name'] = $data['last_poster_name']; $forum_data['seo_last_name'] = $data['seo_last_name']; $forum_data['_has_unread'] = $forum_data['_has_unread']; $forum_data['last_title_style'] = $data['last_title_style']; // TTC } //----------------------------------------- // Markers. We never set false from inside loop. //----------------------------------------- $rtime = $this->registry->classItemMarking->fetchTimeLastMarked( array( 'forumID' => $data['id'] ), 'forums' ); $data['_has_unread'] = 0; if( $data['last_post'] && $data['last_post'] > $rtime ) { $forum_data['_has_unread'] = 1; $data['_has_unread'] = 1; } //----------------------------------------- // Topics and posts //----------------------------------------- $forum_data['posts'] += $data['posts']; $forum_data['topics'] += $data['topics']; $_mod = ( isset( $this->_memberData['forumsModeratorData'] ) ) ? $this->_memberData['forumsModeratorData'] : array(); if ( $this->_memberData['g_is_supmod'] or ( $_mod && !empty( $_mod[ $data['id'] ]['post_q'] ) ) ) { $forum_data['queued_posts'] += $data['queued_posts']; $forum_data['queued_topics'] += $data['queued_topics']; } if ( ! $done_pass ) { $forum_data['subforums'][ $data['id'] ] = array($data['id'], $data['name'], $data['name_seo'], intval( $data['_has_unread'] ), 0 ); } $forum_data = $this->forumsCalcChildren( $data['id'], $forum_data, 1 ); } } return $forum_data; } public function hooks_recentTopics( $topicCount=5, $output=true ) { /* INIT */ $topicIDs = array(); $topic_rows = array(); $timesUsed = array(); $bvnp = explode( ',', $this->settings['vnp_block_forums'] ); $this->registry->class_localization->loadLanguageFile( array( 'public_topic' ), 'forums' ); /* Grab last X data */ foreach( $this->forum_by_id as $forumID => $forumData ) { if ( ! $forumData['can_view_others'] ) { continue; } if ( $forumData['password'] ) { continue; } if ( ! $this->registry->permissions->check( 'read', $forumData ) ) { continue; } if ( is_array( $bvnp ) AND count( $bvnp ) ) { if ( in_array( $forumID, $bvnp ) ) { continue; } } if ( $this->settings['forum_trash_can_id'] AND $forumID == $this->settings['forum_trash_can_id'] ) { continue; } /* Still here? */ $_topics = $this->lastXThaw( $forumData['last_x_topic_ids'] ); if ( is_array( $_topics ) ) { foreach( $_topics as $id => $time ) { if( in_array( $time, $timesUsed ) ) { while( in_array( $time, $timesUsed ) ) { $time +=1; } } $timesUsed[] = $time; $topicIDs[ $time ] = $id; } } } $timesUsed = array(); if ( is_array( $topicIDs ) && count( $topicIDs ) ) { krsort( $topicIDs ); /* We get up to double in case some of the latest are moved_to links - we do another array_slice afterwards to limit to right limit */ $_topics = array_slice( $topicIDs, 0, $topicCount * 2 ); if ( is_array( $_topics ) && count( $_topics ) ) { /* Query Topics */ $this->registry->DB()->build( array( 'select' => 't.tid, t.title as topic_title, t.title_seo, t.start_date, t.starter_id, t.starter_name, t.moved_to, t.views, t.posts, t.ttc_fontcolor, t.ttc_backgroundcolor, t.ttc_bold, t.ttc_italic', 'from' => array( 'topics' => 't' ), 'where' => 't.tid IN (' . implode( ',', array_values( $_topics ) ) . ')', 'add_join' => array( array( 'select' => 'm.*', 'from' => array( 'members' => 'm' ), 'where' => 'm.member_id=t.starter_id', 'type' => 'left', ), array( 'select' => 'pp.*', 'from' => array( 'profile_portal' => 'pp' ), 'where' => 'm.member_id=pp.pp_member_id', 'type' => 'left', ), ) ) ); $this->registry->DB()->execute(); while( $r = $this->registry->DB()->fetch() ) { if( !is_null($r['moved_to']) ) { continue; } $time = $r['start_date']; if( in_array( $time, $timesUsed ) ) { while( in_array( $time, $timesUsed ) ) { $time +=1; } } if ( $this->settings['SOS33_ttc_sidebar'] ) { $style = ""; if ( $output AND ( $r['ttc_fontcolor'] OR $r['ttc_backgroundcolor'] OR $r['ttc_bold'] OR $r['ttc_italic'] ) ) { $style .= " style='"; if ( $r['ttc_backgroundcolor'] ) { $style .= "-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;padding-left:5px;padding-right:5px;padding-top:2px;padding-bottom:2px;"; } $style .= ( $r['ttc_fontcolor'] ) ? "color: {$r['ttc_fontcolor']}; " : ''; $style .= ( $r['ttc_backgroundcolor'] ) ? "background-color: {$r['ttc_backgroundcolor']}; " : ''; $style .= ( $r['ttc_italic'] ) ? "font-style: italic; " : ''; $style .= ( $r['ttc_bold'] ) ? "font-weight: bold; " : ''; $style .= "'"; $r['topic_title'] = "<span{$style}>{$r['topic_title']}</span>"; } } $timesUsed[] = $time; $topics_rows[ $time ] = IPSMember::buildDisplayData( $r ); } /* Got any results? */ if ( count($topics_rows) ) { krsort( $topics_rows ); $topics_rows = array_slice( $topics_rows, 0, $topicCount ); } } } if( $output ) { return $this->registry->output->getTemplate( 'boards' )->hookRecentTopics( $topics_rows ); } else { return $topics_rows; } } }]]> </hooks_source> </file> </hookfiles> -<hookextras_settings> -<setting> <conf_is_title>1</conf_is_title> <conf_title_title>(SOS34) Цветные названия тем</conf_title_title> <conf_title_desc>Настройки для хука</conf_title_desc> <conf_title_noshow>0</conf_title_noshow> <conf_title_keyword>SOS33_ttc</conf_title_keyword> <conf_title_app>forums</conf_title_app> <conf_title_tab>IZ_mod</conf_title_tab> </setting> -<setting> <conf_id>392</conf_id> <conf_title>Использовать цвет фона?</conf_title> <conf_description/> <conf_group>36</conf_group> <conf_type>yes_no</conf_type> <conf_key>SOS33_ttc_backgroundcolor</conf_key> <conf_value/> <conf_default>1</conf_default> <conf_extra/> <conf_evalphp/> <conf_protected>1</conf_protected> <conf_position>1</conf_position> <conf_start_group>Общие настройки</conf_start_group> <conf_end_group>0</conf_end_group> <conf_add_cache>1</conf_add_cache> <conf_keywords/> <conf_title_keyword>SOS33_ttc</conf_title_keyword> <conf_is_title>0</conf_is_title> </setting> -<setting> <conf_id>393</conf_id> <conf_title>Показать окрашеные названия тем на главной странице</conf_title> <conf_description/> <conf_group>36</conf_group> <conf_type>yes_no</conf_type> <conf_key>SOS33_ttc_boardindex</conf_key> <conf_value/> <conf_default>1</conf_default> <conf_extra/> <conf_evalphp/> <conf_protected>1</conf_protected> <conf_position>2</conf_position> <conf_start_group/> <conf_end_group>0</conf_end_group> <conf_add_cache>1</conf_add_cache> <conf_keywords/> <conf_title_keyword>SOS33_ttc</conf_title_keyword> <conf_is_title>0</conf_is_title> </setting> -<setting> <conf_id>394</conf_id> <conf_title>Показать окрашенные названия тем в боковом блоке?</conf_title> <conf_description/> <conf_group>36</conf_group> <conf_type>yes_no</conf_type> <conf_key>SOS33_ttc_sidebar</conf_key> <conf_value/> <conf_default>1</conf_default> <conf_extra/> <conf_evalphp/> <conf_protected>1</conf_protected> <conf_position>3</conf_position> <conf_start_group/> <conf_end_group>0</conf_end_group> <conf_add_cache>1</conf_add_cache> <conf_keywords/> <conf_title_keyword>SOS33_ttc</conf_title_keyword> <conf_is_title>0</conf_is_title> </setting> -<setting> <conf_id>395</conf_id> <conf_title>Показать окрашенные название темы в результатах поиска?</conf_title> <conf_description/> <conf_group>36</conf_group> <conf_type>yes_no</conf_type> <conf_key>SOS33_ttc_searchresults</conf_key> <conf_value/> <conf_default>1</conf_default> <conf_extra/> <conf_evalphp/> <conf_protected>1</conf_protected> <conf_position>4</conf_position> <conf_start_group/> <conf_end_group>0</conf_end_group> <conf_add_cache>1</conf_add_cache> <conf_keywords/> <conf_title_keyword>SOS33_ttc</conf_title_keyword> <conf_is_title>0</conf_is_title> </setting> -<setting> <conf_id>396</conf_id> <conf_title>Показать окрашенные название темы в профиле вкладок (тем и сообщений)?</conf_title> <conf_description/> <conf_group>36</conf_group> <conf_type>yes_no</conf_type> <conf_key>SOS33_ttc_profiletab</conf_key> <conf_value/> <conf_default>1</conf_default> <conf_extra/> <conf_evalphp/> <conf_protected>1</conf_protected> <conf_position>5</conf_position> <conf_start_group/> <conf_end_group>0</conf_end_group> <conf_add_cache>1</conf_add_cache> <conf_keywords/> <conf_title_keyword>SOS33_ttc</conf_title_keyword> <conf_is_title>0</conf_is_title> </setting> -<setting> <conf_id>395</conf_id> <conf_title>Группы которые смогут создавать цветные темы</conf_title> <conf_description/> <conf_group>36</conf_group> <conf_type>multi</conf_type> <conf_key>SOS33_ttc_grupos</conf_key> <conf_value/> <conf_default/> <conf_extra>#show_groups#</conf_extra> -<conf_evalphp> <![CDATA[if ( $save == 1) { if ( is_array($_POST['SOS33_ttc_grupos']) ) { $_POST['SOS33_ttc_grupos'] = implode(",",$_POST['SOS33_ttc_grupos']); } else { $_POST['SOS33_ttc_grupos'] = ""; } $key = 'SOS33_ttc_grupos'; } if ( $show == 1 ) { $key = 'SOS33_ttc_grupos[]'; }]]> </conf_evalphp> <conf_protected>1</conf_protected> <conf_position>6</conf_position> <conf_start_group/> <conf_end_group>0</conf_end_group> <conf_add_cache>1</conf_add_cache> <conf_keywords/> <conf_title_keyword>SOS33_ttc</conf_title_keyword> <conf_is_title>0</conf_is_title> </setting> -<setting> <conf_id>396</conf_id> <conf_title>Форум, где пользователи могут создавать темы с цветными названиями</conf_title> <conf_description/> <conf_group>36</conf_group> <conf_type>multi</conf_type> <conf_key>SOS33_ttc_forums</conf_key> <conf_value/> <conf_default/> <conf_extra>#show_forums#</conf_extra> -<conf_evalphp> <![CDATA[if ( $save == 1) { if ( is_array($_POST['SOS33_ttc_forums']) ) { $_POST['SOS33_ttc_forums'] = implode(",",$_POST['SOS33_ttc_forums']); } else { $_POST['SOS33_ttc_forums'] = ""; } $key = 'SOS33_ttc_forums'; } if ( $show == 1 ) { $key = 'SOS33_ttc_forums[]'; }]]> </conf_evalphp> <conf_protected>1</conf_protected> <conf_position>7</conf_position> <conf_start_group/> <conf_end_group>0</conf_end_group> <conf_add_cache>1</conf_add_cache> <conf_keywords/> <conf_title_keyword>SOS33_ttc</conf_title_keyword> <conf_is_title>0</conf_is_title> </setting> </hookextras_settings> -<hookextras_language> -<language> <word_app>forums</word_app> <word_pack>public_post</word_pack> <word_key>ttc_backgroundcolor</word_key> <word_default>Фон</word_default> <word_custom/> <word_js>0</word_js> </language> -<language> <word_app>forums</word_app> <word_pack>public_post</word_pack> <word_key>ttc_title</word_key> <word_default>Цвета</word_default> <word_custom/> <word_js>0</word_js> </language> -<language> <word_app>forums</word_app> <word_pack>public_post</word_pack> <word_key>ttc_italic</word_key> -<word_default> <![CDATA[<em>Курсив</em>]]> </word_default> <word_custom/> <word_js>0</word_js> </language> -<language> <word_app>forums</word_app> <word_pack>public_post</word_pack> <word_key>ttc_fontcolor</word_key> <word_default>Цвет текста</word_default> <word_custom/> <word_js>0</word_js> </language> -<language> <word_app>forums</word_app> <word_pack>public_post</word_pack> <word_key>ttc_bold</word_key> -<word_default> <![CDATA[<strong>Жирный</strong>]]> </word_default> <word_custom/> <word_js>0</word_js> </language> </hookextras_language> <hookextras_modules/> <hookextras_help/> -<hookextras_templates> -<templates> <template_set_id>0</template_set_id> <template_group>skin_post</template_group> -<template_content> <![CDATA[<script type='text/javascript' src='{$this->settings['public_dir']}/js/3rd_party/colorpicker/jscolor.js'></script> <div class='ipsPostForm_sidebar_block'> <h3 class='bar'>{$this->lang->words['ttc_title']} <span class='desc'>{$this->lang->words['post_optional']}</span></h3> <ul class='ipsPad ipsForm ipsForm_vertical'> <li class='ipsField'> <label for='ttc_fontcolor' class=''>{$this->lang->words['ttc_fontcolor']}</label> <p class='ipsField_content'> <input id='ttc_fontcolor' class='input_text color {pickerPosition:"top",hash:true,required:false}' type="text" size="17" maxlength="10" name="ttc_fontcolor" value="{$formData['ttc_fontcolor']}" tabindex="0" /> </p> </li> <if test="$this->settings['SOS33_ttc_backgroundcolor']"> <li class='ipsField'> <label for='ttc_backgroundcolor' class=''>{$this->lang->words['ttc_backgroundcolor']}</label> <p class='ipsField_content'> <input id='topic_bg' class='input_text color {pickerPosition:"top",hash:true,required:false}' type="text" size="17" maxlength="10" name="ttc_backgroundcolor" value="{$formData['ttc_backgroundcolor']}" tabindex="0" /> </p> </li> </if> <li class='ipsField ipsField_checkbox'> <input type="checkbox" name="ttc_bold" id="ttc_bold" value="1" class="input_check" <if test="$formData['ttc_bold']">checked='checked'</if> /> <p class='ipsField_content'> <label for="ttc_bold"><strong>{$this->lang->words['ttc_bold']}</strong></label> </p> </li> <li class='ipsField ipsField_checkbox'> <input type="checkbox" name="ttc_italic" id="ttc_italic" value="1" class="input_check" <if test="$formData['ttc_italic']">checked='checked'</if> /> <p class='ipsField_content'> <label for='ttc_italic'><em>{$this->lang->words['ttc_italic']}</em></label> </p> </li> </ul> </div>]]> </template_content> <template_name>topicTitleColored</template_name> <template_data>$formData=array()</template_data> <template_updated>1305660883</template_updated> <template_removable>0</template_removable> <template_added_to>0</template_added_to> <template_user_added>0</template_user_added> <template_user_edited>0</template_user_edited> <template_master_key>root</template_master_key> <template_set_type/> </templates> -<templates> <template_group>skin_profile</template_group> -<template_content> <![CDATA[<div class='post_block no_sidebar'> <div class='post_wrap'> <if test="singleColumnTitle:|:$title"> <if test="singleColumnUrl:|:$url"> <h3 class='row2'><a href="$url" title="{$this->lang->words['view_topic']}">$title</a></h3> <else /> <h3 class='row2'>$title</h3> </if> </if> <div class='post_body'> <p class='posted_info'> <if test="date:|:$row['_raw_date']">{parse date="$row['_raw_date']" format="long"}<else />{$this->lang->words['posted']} {$row['_date_array']['mday']} {$row['_date_array']['smonth']} {$row['_date_array']['year']}</if> </p> <div class='post'> {$row['post']} </div> </div> </div> <br /> </div>]]> </template_content> <template_name>ttc_tabSingleColumn</template_name> -<template_data> <![CDATA[$row=array(), $read_more_link='', $url='', $title='']]> </template_data> <template_updated>1313408200</template_updated> <template_removable>1</template_removable> <template_added_to>1</template_added_to> <template_user_added>1</template_user_added> <template_user_edited>1</template_user_edited> <template_master_key>root</template_master_key> </templates> </hookextras_templates> <hookextras_css/> <hookextras_tasks/> <hookextras_database_create/> -<hookextras_database_alter> -<alter> <altertype>add</altertype> <table>topics</table> <field>ttc_fontcolor</field> <newfield/> <fieldtype>varchar(32)</fieldtype> <default>null</default> </alter> -<alter> <altertype>add</altertype> <table>topics</table> <field>ttc_backgroundcolor</field> <newfield/> <fieldtype>varchar(32)</fieldtype> <default>null</default> </alter> -<alter> <altertype>add</altertype> <table>topics</table> <field>ttc_bold</field> <newfield/> <fieldtype>tinyint(1)</fieldtype> <default>0</default> </alter> -<alter> <altertype>add</altertype> <table>topics</table> <field>ttc_italic</field> <newfield/> <fieldtype>tinyint(1)</fieldtype> <default>0</default> </alter> -<alter> <altertype>add</altertype> <table>forums</table> <field>last_title_style</field> <newfield/> <fieldtype>varchar(255)</fieldtype> <default>null</default> </alter> </hookextras_database_alter> <hookextras_database_update/> <hookextras_database_insert/> </hookexport> Thank in advance for your help and your feedback
  31. 2 likes
    Missing ? <setting><key>scsb_discord</key><default></default></setting>
  32. 2 likes
    HI there, Is it possible to get some help in how to add a new Social media button? I have added Discord, but when I put in the link to the new discord box, it doesn't save the link. Please have a look at the code I have added to the plugin if is correct. I cannot find any errors with is. <?xml version="1.0" encoding="UTF-8"?> <plugin name="Floating Social Sidebar" version_long="10000" version_human="1.0.0" author="onlyME" website="[Hidden Content]" update_check=""><hooks><hook type="S" class="\IPS\Theme\class_core_front_global"><![CDATA[//<?php class hook289 extends _HOOK_CLASS_ { /* !Hook Data - DO NOT REMOVE */ public static function hookData() { return array_merge_recursive( array ( 'globalTemplate' => array ( 0 => array ( 'selector' => '#ipsLayout_footer', 'type' => 'add_after', 'content' => '{{if settings.scsb_on == 1}}<script>$.contactButtons({ effect : "slide-on-scroll", buttons : { {{if settings.scsb_facebook}}"facebook": { class: "facebook", use: true, link: "{setting="scsb_facebook"}", extras: "target=_blank" },{{endif}} {{if settings.scsb_google}}"google": { class: "gplus", use: true, link: "{setting="scsb_google"}", extras: "target=_blank" },{{endif}} {{if settings.scsb_linkedin}}"linkedin": { class: "linkedin", use: true, link: "{setting="scsb_linkedin"}", extras: "target=_blank" },{{endif}} {{if settings.scsb_twitter}}"twitter": { class: "twitter", use: true, icon: "twitter", link: "{setting="scsb_twitter"}", extras: "target=_blank" },{{endif}} {{if settings.scsb_youtube}}"youtube": { class: "youtube", use: true, icon: "youtube", link: "{setting="scsb_youtube"}", extras: "target=_blank" },{{endif}} {{if settings.scsb_pinterest}}"pinterest": { class: "pinterest", use: true, icon: "pinterest", link: "{setting="scsb_pinterest"}", extras: "target=_blank" },{{endif}} {{if settings.scsb_discord}}"discord": { class: "discord", use: true, link: "discord", link: "{setting="scsb_discord"}", extras: "target=_blank" },{{endif}} {{if settings.scsb_contact}}"email": { class: "email separated", use: true, link: "{url="app=core&module=contact&controller=contact" seoTemplate="contact"}" },{{endif}} } });</script>{{endif}}', ), ), ), parent::hookData() ); } /* End Hook Data */ }]]></hook></hooks><settings><setting><key>scsb_on</key><default>1</default></setting><setting><key>scsb_facebook</key><default></default></setting><setting><key>scsb_google</key><default></default></setting><setting><key>scsb_linkedin</key><default></default></setting><setting><key>scsb_twitter</key><default></default></setting><setting><key>scsb_pinterest</key><default></default></setting><setting><key>scsb_contact</key><default></default></setting><setting><key>scsb_youtube</key><default></default></setting></settings><setting><key>scsb_discord</key><default></default></setting><settingsCode><![CDATA[//<?php $form->add( new \IPS\Helpers\Form\YesNo( 'scsb_on', \IPS\Settings::i()->scsb_on ) ); $form->add( new \IPS\Helpers\Form\Url( 'scsb_facebook', \IPS\Settings::i()->scsb_facebook ) ); $form->add( new \IPS\Helpers\Form\Url( 'scsb_google', \IPS\Settings::i()->scsb_google ) ); $form->add( new \IPS\Helpers\Form\Url( 'scsb_linkedin', \IPS\Settings::i()->scsb_linkedin ) ); $form->add( new \IPS\Helpers\Form\Url( 'scsb_twitter', \IPS\Settings::i()->scsb_twitter ) ); $form->add( new \IPS\Helpers\Form\Url( 'scsb_youtube', \IPS\Settings::i()->scsb_youtube ) ); $form->add( new \IPS\Helpers\Form\Url( 'scsb_pinterest', \IPS\Settings::i()->scsb_pinterest ) ); $form->add( new \IPS\Helpers\Form\Url( 'scsb_discord', \IPS\Settings::i()->scsb_discord ) ); $form->add( new \IPS\Helpers\Form\YesNo( 'scsb_contact', \IPS\Settings::i()->scsb_contact ) ); if ( $values = $form->values() ) { $form->saveAsSettings(); return TRUE; } return $form;]]></settingsCode><tasks/><widgets/><htmlFiles/><cssFiles><css filename="floatingSocialSidebar.css">LyohCiAqIENvbnRhY3QgQnV0dG9ucyBQbHVnaW4gRGVtbyAwLjEuMAogKiBodHRwczovL2dpdGh1Yi5jb20vam9lZ2UvY29udGFjdC1idXR0b25zLXBsdWdpbgogKgogKiBDb3B5cmlnaHQgMjAxNSwgSm9zw6kgR29uw6dhbHZlcwogKgogKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2U6CiAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUCiAqLwogCiAjY29udGFjdC1idXR0b25zLWJhciB7CiAgcG9zaXRpb246IGZpeGVkOwogIHRvcDogMTIwcHg7CiAgbGVmdDogLTUwcHg7CiAgd2lkdGg6IDUwcHg7Cn0KCgojY29udGFjdC1idXR0b25zLWJhci5zbGlkZS1vbi1zY3JvbGwgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKfQoKLmNvbnRhY3QtYnV0dG9uLWxpbmsgIHsKICBkaXNwbGF5OiBibG9jazsKICB3aWR0aDogNTBweDsKICBoZWlnaHQ6IDUwcHg7CiAgcGFkZGluZzogMDsKICBtYXJnaW4tYm90dG9tOiAxcHg7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIGxpbmUtaGVpZ2h0OiA1MHB4OwogIGZvbnQtc2l6ZTogMjJweDsKICBiYWNrZ3JvdW5kOiAjOGU4ZTkzOwogIGNvbG9yOiAjZmZmOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBsZWZ0OiAwOwogIHotaW5kZXg6IDEwMDAwMDAwOwogIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIAogIC13ZWJraXQtdHJhbnNpdGlvbjogYWxsIDI1MG1zOwogICAgIC1tb3otdHJhbnNpdGlvbjogYWxsIDI1MG1zOwogICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDI1MG1zOwp9Ci5jb250YWN0LWJ1dHRvbi1saW5rOmhvdmVyLAouY29udGFjdC1idXR0b24tbGluazpmb2N1cywKLmNvbnRhY3QtYnV0dG9uLWxpbms6YWN0aXZlIHsKICBjb2xvcjogI2ZmZjsKICBwYWRkaW5nLWxlZnQ6IDIwcHg7CiAgd2lkdGg6IDcwcHg7Cn0KLmNvbnRhY3QtYnV0dG9uLWxpbmsuY2ItaGlkZGVuIHsKICBsZWZ0OiAtNTBweDsKfQouY29udGFjdC1idXR0b24tbGluay5mYWNlYm9vayB7CiAgYmFja2dyb3VuZDogIzNiNTk5ODsKfQoKLmNvbnRhY3QtYnV0dG9uLWxpbmsudHdpdHRlciB7CiAgYmFja2dyb3VuZDogIzQwOTlmZjsKfQoKLmNvbnRhY3QtYnV0dG9uLWxpbmsucGludGVyZXN0IHsKICBiYWNrZ3JvdW5kOiAjYzgyMzJjOwp9CgouY29udGFjdC1idXR0b24tbGluay55b3V0dWJlIHsKICBiYWNrZ3JvdW5kOiAjYzQzMDJiOwp9CgouY29udGFjdC1idXR0b24tbGluay5saW5rZWRpbiB7CiAgYmFja2dyb3VuZDogIzAwNzdiNTsKfQouY29udGFjdC1idXR0b24tbGluay5ncGx1cyB7CiAgYmFja2dyb3VuZDogI2RiNDQzNzsKfQoKLmNvbnRhY3QtYnV0dG9uLWxpbmsuc2VwYXJhdGVkIHsKICBtYXJnaW4tdG9wOiAxZW07Cn0KCi5zaG93LWhpZGUtY29udGFjdC1iYXIsCi5jb250YWN0LWJ1dHRvbi1saW5rLnNob3ctaGlkZS1jb250YWN0LWJhcjpmb2N1cywKLmNvbnRhY3QtYnV0dG9uLWxpbmsuc2hvdy1oaWRlLWNvbnRhY3QtYmFyOmFjdGl2ZSB7CiAgYmFja2dyb3VuZDogIzAwMDsKICBjb2xvcjogI2ZmZjsKICBib3JkZXI6IDA7CiAgb3V0bGluZTogMDsKICBwYWRkaW5nOiAwOwogIHdpZHRoOiA1MHB4Owp9Ci5jb250YWN0LWJ1dHRvbi1saW5rLnNob3ctaGlkZS1jb250YWN0LWJhcjpob3ZlciB7CiAgY29sb3I6ICMwMDA7CiAgYmFja2dyb3VuZDogI2NjYzsKICBwYWRkaW5nOiAwOwogIHdpZHRoOiA1MHB4Owp9</css></cssFiles><jsFiles><js filename="jquery.contact-buttons.js">LyohCiAqIENvbnRhY3QgQnV0dG9ucyBQbHVnaW4gRGVtbyAwLjEuMAogKiBodHRwczovL2dpdGh1Yi5jb20vam9lZ2UvY29udGFjdC1idXR0b25zLXBsdWdpbgogKgogKiBDb3B5cmlnaHQgMjAxNSwgSm9zw6kgR29uw6dhbHZlcwogKgogKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2U6CiAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUCiAqLwogCihmdW5jdGlvbiAoJCkgewogICd1c2Ugc3RyaWN0JzsKCiAgLy8gTWFpbiBmdW5jdGlvbgogICQuY29udGFjdEJ1dHRvbnMgPSBmdW5jdGlvbiggb3B0aW9ucyApewogICAgCiAgICAvLyBEZWZpbmUgdGhlIGRlZmF1bHRzCiAgICB2YXIgZGVmYXVsdHMgPSB7IAogICAgICBlZmZlY3QgIDogJycsIC8vIHNsaWRlLW9uLXNjcm9sbAogICAgICBidXR0b25zIDogewogICAgICAgICdmYWNlYm9vayc6ICAgeyBjbGFzczogJ2ZhY2Vib29rJywgIHVzZTogZmFsc2UsIGljb246ICdmYWNlYm9vaycsICAgIGxpbms6ICcnLCB0aXRsZTogJ0ZvbGxvdyBvbiBGYWNlYm9vaycgfSwKICAgICAgICAnZ29vZ2xlJzogICAgIHsgY2xhc3M6ICdncGx1cycsICAgICB1c2U6IGZhbHNlLCBpY29uOiAnZ29vZ2xlLXBsdXMnLCBsaW5rOiAnJywgdGl0bGU6ICdWaXNpdCBvbiBHb29nbGUgUGx1cycgfSwKICAgICAgICAnbGlua2VkaW4nOiAgIHsgY2xhc3M6ICdsaW5rZWRpbicsICB1c2U6IGZhbHNlLCBpY29uOiAnbGlua2VkaW4nLCAgICBsaW5rOiAnJywgdGl0bGU6ICdWaXNpdCBvbiBMaW5rZWRJbicgfSwKICAgICAgICAndHdpdHRlcic6ICAgIHsgY2xhc3M6ICd0d2l0dGVyJywgICB1c2U6IGZhbHNlLCBpY29uOiAndHdpdHRlcicsICAgICBsaW5rOiAnJywgdGl0bGU6ICdGb2xsb3cgb24gVHdpdHRlcicgfSwKICAgICAgICAneW91dHViZSc6ICAgIHsgY2xhc3M6ICd5b3V0dWJlJywgdXNlOiBmYWxzZSwgaWNvbjogJ3lvdXR1YmUnLCAgIAkgbGluazogJycsIHRpdGxlOiAnT3VyIENoYW5uZWwgb24gWW91dHViZScgfSwJCQogICAgICAgICdwaW50ZXJlc3QnOiAgeyBjbGFzczogJ3BpbnRlcmVzdCcsIHVzZTogZmFsc2UsIGljb246ICdwaW50ZXJlc3QnLCAgIGxpbms6ICcnLCB0aXRsZTogJ0ZvbGxvdyBvbiBQaW50ZXJlc3QnIH0sCiAgICAgICAgJ3Bob25lJzogICAgICB7IGNsYXNzOiAncGhvbmUnLCAgICAgdXNlOiBmYWxzZSwgaWNvbjogJ3Bob25lJywgICAgICAgbGluazogJycsIHRpdGxlOiAnQ2FsbCB1cycsIHR5cGU6ICdwaG9uZScgfSwKICAgICAgICAnZW1haWwnOiAgICAgIHsgY2xhc3M6ICdlbWFpbCcsICAgICB1c2U6IGZhbHNlLCBpY29uOiAnZW52ZWxvcGUnLCAgICBsaW5rOiAnJywgdGl0bGU6ICdDb250YWN0IFVzJyB9CiAgICAgIH0KICAgIH07CgogICAgLy8gTWVyZ2UgZGVmYXVsdHMgYW5kIG9wdGlvbnMKICAgIHZhciBzLAogICAgICAgIHNldHRpbmdzID0gb3B0aW9uczsKICAgIGZvciAocyBpbiBkZWZhdWx0cy5idXR0b25zKSB7CiAgICAgIGlmIChvcHRpb25zLmJ1dHRvbnNbc10pIHsKICAgICAgICBzZXR0aW5ncy5idXR0b25zW3NdID0gJC5leHRlbmQoIGRlZmF1bHRzLmJ1dHRvbnNbc10sIG9wdGlvbnMuYnV0dG9uc1tzXSApOwogICAgICB9CiAgICB9CiAgICAKICAgIC8vIERlZmluZSB0aGUgY29udGFpbmVyIGZvciB0aGUgYnV0dG9ucwogICAgdmFyIG9Db250YWluZXIgPSAkKCIjY29udGFjdC1idXR0b25zLWJhciIpOwoKICAgIC8vIENoZWNrIGlmIHRoZSBjb250YWluZXIgaXMgYWxyZWFkeSBvbiB0aGUgcGFnZQogICAgaWYgKCBvQ29udGFpbmVyLmxlbmd0aCA9PT0gMCApIHsKICAgICAgCiAgICAgIC8vIEluc2VydCB0aGUgY29udGFpbmVyIGVsZW1lbnQKICAgICAgJCgnYm9keScpLmFwcGVuZCgnPGRpdiBpZD0iY29udGFjdC1idXR0b25zLWJhciI+Jyk7CiAgICAgIAogICAgICAvLyBHZXQgdGhlIGp1c3QgaW5zZXJ0ZWQgZWxlbWVudAogICAgICBvQ29udGFpbmVyID0gJCgiI2NvbnRhY3QtYnV0dG9ucy1iYXIiKTsKICAgICAgCiAgICAgIC8vIEFkZCBjbGFzcyBmb3IgZWZmZWN0CiAgICAgIG9Db250YWluZXIuYWRkQ2xhc3Moc2V0dGluZ3MuZWZmZWN0KTsKICAgICAgCiAgICAgIC8vIEFkZCBzaG93L2hpZGUgYnV0dG9uCiAgICAgIHZhciBzU2hvd0hpZGVCdG4gPSAnPGJ1dHRvbiBjbGFzcz0iY29udGFjdC1idXR0b24tbGluayBzaG93LWhpZGUtY29udGFjdC1iYXIiPjxzcGFuIGNsYXNzPSJmYSBmYS1hbmdsZS1sZWZ0Ij48L3NwYW4+PC9idXR0b24+JzsKICAgICAgb0NvbnRhaW5lci5hcHBlbmQoc1Nob3dIaWRlQnRuKTsKICAgICAgCiAgICAgIHZhciBpOwogICAgICBmb3IgKCBpIGluIHNldHRpbmdzLmJ1dHRvbnMgKSB7CiAgICAgICAgdmFyIGJzID0gc2V0dGluZ3MuYnV0dG9uc1tpXSwKICAgICAgICAgICAgc0xpbmsgPSBicy5saW5rLAogICAgICAgICAgICBhY3RpdmUgPSBicy51c2U7CiAgICAgICAgCiAgICAgICAgLy8gQ2hlY2sgaWYgZWxlbWVudCBpcyBhY3RpdmUKICAgICAgICBpZiAoYWN0aXZlKSB7CiAgICAgICAgICAKICAgICAgICAgIC8vIENoYW5nZSB0aGUgbGluayBmb3IgcGhvbmUgYW5kIGVtYWlsIHdoZW4gbmVlZGVkCiAgICAgICAgICBpZiAoYnMudHlwZSA9PT0gJ3Bob25lJykgewogICAgICAgICAgICBzTGluayA9ICd0ZWw6JyArIGJzLmxpbms7CiAgICAgICAgICB9IGVsc2UgaWYgKGJzLnR5cGUgPT09ICdlbWFpbCcpIHsKICAgICAgICAgICAgc0xpbmsgPSAnbWFpbHRvOicgKyBicy5saW5rOwogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICAvLyBJbnNlcnQgdGhlIGxpbmtzCiAgICAgICAgICB2YXIgc0ljb24gPSAnPHNwYW4gY2xhc3M9ImZhIGZhLScgKyBicy5pY29uICsgJyI+PC9zcGFuPicsCiAgICAgICAgICAgICAgc0J1dHRvbiA9ICc8YSBocmVmPSInICsgc0xpbmsgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAnIiBjbGFzcz0iY29udGFjdC1idXR0b24tbGluayBjYi1hbmNvciAnICsgYnMuY2xhc3MgKyAnIiAnICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGJzLnRpdGxlID8gJ3RpdGxlPSInICsgYnMudGl0bGUgKyAnIicgOiAnJykgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAoYnMuZXh0cmFzID8gYnMuZXh0cmFzIDogJycpICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgJz4nICsgc0ljb24gKyAnPC9hPic7CiAgICAgICAgICBvQ29udGFpbmVyLmFwcGVuZChzQnV0dG9uKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIC8vIE1ha2UgdGhlIGJ1dHRvbnMgdmlzaWJsZQogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgICAgb0NvbnRhaW5lci5hbmltYXRlKHsgbGVmdCA6IDAgfSk7CiAgICAgIH0sIDIwMCk7CiAgICAgIAogICAgICAvLyBTaG93L2hpZGUgYnV0dG9ucwogICAgICAkKCdib2R5Jykub24oJ2NsaWNrJywgJy5zaG93LWhpZGUtY29udGFjdC1iYXInLCBmdW5jdGlvbihlKXsKICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsKICAgICAgICAkKCcuc2hvdy1oaWRlLWNvbnRhY3QtYmFyJykuZmluZCgnLmZhJykudG9nZ2xlQ2xhc3MoJ2ZhLWFuZ2xlLXJpZ2h0IGZhLWFuZ2xlLWxlZnQnKTsKICAgICAgICBvQ29udGFpbmVyLmZpbmQoJy5jYi1hbmNvcicpLnRvZ2dsZUNsYXNzKCdjYi1oaWRkZW4nKTsKICAgICAgfSk7CiAgICB9CiAgfTsKICAKICAvLyBTbGlkZSBvbiBzY3JvbGwgZWZmZWN0CiAgJChmdW5jdGlvbigpewogICAgCiAgICAvLyBEZWZpbmUgZWxlbWVudCB0byBzbGlkZQogICAgdmFyIGVsID0gJCgiI2NvbnRhY3QtYnV0dG9ucy1iYXIuc2xpZGUtb24tc2Nyb2xsIik7CiAgICAKICAgIC8vIExvYWQgdG9wIGRlZmF1bHQKICAgIGVsLmF0dHIoJ2RhdGEtdG9wJywgZWwuY3NzKCd0b3AnKSk7CiAgICAKICAgIC8vIExpc3RlbiB0byBzY3JvbGwKICAgICQod2luZG93KS5zY3JvbGwoZnVuY3Rpb24oKSB7CiAgICAgIGNsZWFyVGltZW91dCggJC5kYXRhKCB0aGlzLCAic2Nyb2xsQ2hlY2siICkgKTsKICAgICAgJC5kYXRhKCB0aGlzLCAic2Nyb2xsQ2hlY2siLCBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBuVG9wID0gJCh3aW5kb3cpLnNjcm9sbFRvcCgpICsgcGFyc2VJbnQoZWwuYXR0cignZGF0YS10b3AnKSk7CiAgICAgICAgZWwuYW5pbWF0ZSh7CiAgICAgICAgICB0b3AgOiBuVG9wCiAgICAgICAgfSwgNTAwKTsKICAgICAgfSwgMjUwKSApOwogICAgfSk7CiAgfSk7CiAgCiB9KCBqUXVlcnkgKSk7Cg==</js></jsFiles><resourcesFiles/><lang><word key="scsb_on" js="0">Enable?</word><word key="scsb_facebook" js="0">Facebook</word><word key="scsb_google" js="0">Google</word><word key="scsb_linkedin" js="0">LinkedIn</word><word key="scsb_twitter" js="0">Twitter</word><word key="scsb_pinterest" js="0">Pinterest</word><word key="scsb_contact" js="0">Contact</word><word key="scsb_contact_desc" js="0">Link to your contact page</word><word key="scsb_youtube" js="0">Youtube</word><word key="scsb_discord" js="0">Discord</word></lang><versions><version long="10000" human="1.0.0"><![CDATA[//<?php /* To prevent PHP errors (extending class does not exist) revealing path */ if ( !defined( '\IPS\SUITE_UNIQUE_KEY' ) ) { header( ( isset( $_SERVER['SERVER_PROTOCOL'] ) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0' ) . ' 403 Forbidden' ); exit; } /** * Install Code */ class ips_plugins_setup_install { /** * ... * * @return array If returns TRUE, upgrader will proceed to next step. If it returns any other value, it will set this as the value of the 'extra' GET parameter and rerun this step (useful for loops) */ public function step1() { return TRUE; } // You can create as many additional methods (step2, step3, etc.) as is necessary. // Each step will be executed in a new HTTP request }]]></version></versions></plugin>
  33. 2 likes
  34. 2 likes
    À, mai mốt những bài yêu cầu mod thì bạn nên thêm Yêu cầu mod: .... trước tiêu đề để cho dễ dàng nhận biết khi tìm kiếm nhé. [Hidden Content]
  35. 1 like
    Nó chỉ nghe tiếng khi có chat mới cập nhật thôi bạn, chứ mình chat đi thì nó ko nghe.
  36. 1 like
  37. 1 like
    If you like this to be true in future versions of this style is much better Attachment plug tutorial Features Tutorials 2.0.2: A full-featured Tutorials/Article system for your IPS Community. Here's a quick rundown of some of the features for this application: Unlimited categories of articles, plus unlimited depth of parent-child relationships Category Icons Ability to use comments system or support topics, or both Per-category permissions to show category, read articles, submit articles, add comments, and avoid approval queues Extra Fields that can be used per-category Quick edit (ajax) of tutorial's title on category view Preview the tutorial content when you hover the tutorial link on category view Group permissions on specifc actions Integration with the Advertisements system Integration with the Bulk Mail system Integration with ACP Live Seach (Tutorials categories) Integration with Tag system Integration with Report system Integration with Search system Integration with Share Links to share, download, or print articles Integration with Sitemap system to include tutorials in your sitemap Moderator actions on articles and comments Ability to create RSS feeds of all tutorials Ability to attach files to tutorials and comments Ability to quickly convert a forum post into a new tutorial Ability to copy a tutorial from one category to another or to the same category Friendly URLs for tutorials and categories Ability to give reputation points for tutorials Ability to rate tutorials Ability to follow categories and tutorials to receive notifications on updatesupdates Tools to create topics to existing tutorials, make tutorials of topics and rebuild support topics text if you have changed the template on Tutorials settings. And much, much more! tutorials.tar
  38. 1 like
    It works! For what it's worth, I did a completely clean install and reproduced the exact same result. (This screenshot is before I applied your patch.) With your patch applied it now works. Thanks for your help. I'm interested in your videos app so I'll post some questions in that thread.
  39. 1 like
    I just downloaded the latest version of this from IPS Marketplace and the emoticons don't seem to be working. If I use Chatbox from the home page it works, but from the forum it does not. Home page (working) Forum page (not working) Great app though. Edit: I don't know if this helps, but when the emoticon is used in a post this is the image URL: <img title=":paratrooper:" alt=":paratrooper:" src="//revolucion.co.uk/test_install/applications/core/interface/file/index.php?file=/emoticons/default_paratrooper.gif">
  40. 1 like
    Mình thấy có hook dành cho những ai thích màu mè và phù hợp với Ipb 3.4.x [Hidden Content] Zuzu down về rồi up lên cho mọi người đi. Mình down ko đc. Nó báo lỗi như sau:
  41. 1 like