Jump to content
IPSViet.com

Leaderboard


Popular Content

Showing most liked content since 05/25/2017 in all areas

  1. 32 points
    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. 5 points
    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. 5 points
    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]
  4. 4 points
    URL không dấu tiếng việt cho IPS4.0, hook vô core nên tác dụng với tất cả app. Cài đặt: Vào ACP > System > Plugins > Bấm nút "Install" và chọn file xml vừa unzip ở file tải về bên dưới, bấm nút Install Sử dụng: Admin CP > Plugins > (BIM40) NonUnicode URL > Bấm nút hình cây viết chì bên tay phải để bật plugin này. (Phiên bản 1.0.1 trở đi thì import vào là xài ko cần phải thiết lập gì cả) (BIM41) NonUnicode URL 1.0.1.zip (cho IPS từ 4.1.14 trở lên) (BIM40) NonUnicode URL 1.0.0.zip (cho IPS 4 phiên bản thấp hơn 4.1.14)
  5. 3 points
    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
  6. 3 points
    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. 2 points
    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]
  8. 2 points
    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.2.zip (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. 2 points
    IPSViet vừa được nâng cấp lên phiên bản 4.2. Tuy vẫn còn là phiên bản beta nhưng mình thấy bên kia không báo lỗi gì nghiêm trọng và diễn đàn chính của IPS cũng đã sử dụng nên cũng an tâm. IPS 4.2 là một bản nâng cấp lớn nhất tính từ 4.0 đến nay (hơn 3 năm) với nhiều cải tiến về hiệu suất hoạt động cũng như rất nhiều chức năng mới, các bạn có thể tham khảo ở [Hidden Content] . Trong đó mình thích nhất là fluid forum (ở ipsviet mình ko bật vì nó ko phù hợp), clubs, reactions, hệ thống embed url hỗ trợ thêm rất nhiều dịch vụ media khác cũng như các nội dung trên site, letter profile photo,... Hiện tại, về các plugins và applications của IPSViet cũng đã được nâng cấp để tương thích với IPS 4.2, bao gồm: Featured Content Topic Thumnail Easypopup Hide link & code Testimonials Manager Forum Cover Quick Search Gallery In Post Những plugins chưa update nhưng vẫn hoạt động tốt: Article Thumbnail Required Info Chatbox Nonunicode URL Scrolling Announcements Widget Scroll to top Hide link & code Free Forums stats Sliding facebook fanpage Simple pages Blank widget Image meta tag Snow falling Currency converter Ngoài ra, 2 app lớn của IPSViet là Videobox và Musicbox cũng sẽ được update trong vài ngày tới, sẽ thông tin đến các bạn.
  10. 2 points
    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]
  11. 2 points
    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
  12. 2 points
    Plugin này sẽ tự động trả lời khi chủ đề bị di chuyển. Tương thích tốt với IPS 4.0 và 4.1. DOWNLOAD (SOS40) Automatic Post When Moving Topic 3.0.0.zip Nguồn: [Hidden Content]
  13. 2 points
    Go to ACP > Customization > Themes > click </> to edit your theme > bimchatbox > front > chat > main Find <div data-controller="bimChatBoxMain"> Replace by <div class="ipsResponsive_hidePhone" data-controller="bimChatBoxMain"> Save
  14. 2 points
    Already translators why I founded the lock from abroad, because I had DDOS attacks only what it can enter through the gateway proxy only Polish ... E.g : [Hidden Content]
  15. 2 points
    IPS 4.0.5+ không cần làm theo cách này, chỉ cần vào File Storage edit lại URL và run support tool để xóa cache. Vì một lý do nào đó mà bạn cần thay đổi URL, hoặc thay đổi cả domain website, không đơn giản chỉ vào conf_global sửa lại như IPB3. IPS 4 bạn cần làm các bước sau đây: Tải file này về: changeUrl.phpUpload nó ngang hàng conf_global.php.Mở conf_global.php sửa url bạn muốn. Truy cập vào domaincuaban.com/changeUrl.php và đợi nó cập nhật lại dữ liệu, xong hết thì bạn có thể xóa file changeUrl.php đi.Truy cập vào ACP sẽ thấy Background Processes đang hoạt động, nó sẽ tự thay đổi lại URL cho bạn.
  16. 2 points
    Hello .... I have a suggestion: Change : Templates -> bimchatbox -> main: <div class="ipsTabs ipsClearfix" id="elChatbox" data-ipstabbar data-ipstabbar-contentarea="#elChatboxContent"> to <div class="ipsType_sectionTitle ipsType_reset ipsType_blendLinks cForumTitle" id="elChatbox" data-ipstabbar data-ipstabbar-contentarea="#elChatboxContent"> Change : CSS -> bimchatbox -> chatbox.css: .cbTitle { height: 40px; color: #fff; line-height: 30px; } to .cbTitle { color: #fff; line-height: 20px; } and .ipsWidget.ipsWidget_horizontal[data-blockid^="app_bimchatbox"] { padding-top: 5px !important; } to .ipsWidget.ipsWidget_horizontal[data-blockid^="app_bimchatbox"] { padding-top: 0px !important; } so chat will be compatible with all skins
  17. 2 points
    Bài viết này sẽ hướng dẫn chi tiết và liệt kê các phương thức để đăng nhập IPS. Bạn có thể dễ dàng đăng nhập IPS bằng các dịch vụ mạng xã hội: Facebook, Google, Twitter, ... hoặc liên kết nhiều site IPS với nhau. Toàn bộ chức năng đăng nhập được liệt kê vào một trang System -> Settings -> Login Handlers Login Settings: Bạn có thể cài đặt khóa tài khoản sau bao nhiêu lần nhập pass sai, sử dụng https login và login ẩn danh. Facebook: IPS kết nối với Facebook tiện cho việc đăng nhập của người dùng, có thể đồng bộ photo, status giữa IPS và Facebook. Cách cài đặt như sau: Bước 1: Tạo Application Facebook Vào [Hidden Content] Set the URL: Đến tab Settings và click Add Platform. Chọn Website. Nhập URL của bạn vào Site URL và lưu lại. Nhập Contact Email và lưu. Set other details: Click vào tab App Details. Nhập vào mô tả trang web của bạn tại mục Long Description. Đường dẫn đến Privacy Policy URL. Ví dụ: [Hidden Content] Nhập email của bạn vào User Support Email. Upload một logo tại App Icon với kích thước 1024x1024px Save lại Permission: Click vào tab Status & Review chọn YES ở Do you want to make this app and all its live features available to the general public? Click Start A Submission Tìm đến user_status và click Add Items Click "Add Notes" và giải thích cho facebook hiểu mục đích sử dụng cái user_status làm gì. Bạn có thể copy thế này vào: Using the user_status to sync user statuses between Facebook and website. Xong chụp 4 cái hình có chức năng Facebook và status của thành viên up lên. Xong click "Submit for Review" Bước 2: cấu hình IPS Vào ACP > System > Settings > Login Handlers. Click nút Edit ở Facebook Nhập vào App ID và App Serect của application bạn đã tạo ở bước 1 Twitter: Cũng như Facebook, IPS đồng bộ với Twitter giúp người dùng dễ đăng nhập hơn. Bước 1: Tạo app Twitter Vào [Hidden Content]. Nhập địa chỉ web của bạn ở mục Website và Callback URL Sau đó: Vào tab Settings và chọn Allow this application to be used to Sign in with Twitter . Save Vào tab Permissions đổi Access là Read and Write và Save Đến tab API Keys sẽ thấy API key và API secret. Bước 2: cấu hình IPS Vào ACP > System > Settings > Login Handlers. Click nút Edit ở Twitter Nhập vào App ID và App Serect của application bạn đã tạo ở bước 1. Google Login: Bước 1: Tạo Project Vào [Hidden Content] Vào APIs & Auth > APIs bật ON cho Google+ API. Tiếp tục vào APIs & Auth > Credentials và click chọn Create new Client ID. Application Type chọn Web Application. Authorized Javascript Origins nhập vào URL. Ví dụ bạn cài IPS ở domain "[Hidden Content]" thì bạn chỉ cần nhập vào "[Hidden Content]". Authorized Redirect URI nhập vào URL tại chỗ URLs. Ví dụ: [Hidden Content]/applications/core/interface/google/auth.php Save lại, bạn sẽ nhận được Client ID và Client Secret. Bước 2: cấu hình IPS Vào ACP > System > Settings > Login Handlers. Click nút Edit ở Google Nhập vào Client ID và Client Serect đã tạo ở bước 1. Microsoft Login: Bước 1: Tạo Application Vào [Hidden Content]. Tìm đến API Settings, ở chỗ Redirect URLs nhập URL tương tự thế này: [Hidden Content]/applications/core/interface/microsoft/auth.php Đến App Settings sẽ thấy Client ID và Client Secret. Bước 2: cấu hình IPS Vào ACP > System > Settings > Login Handlers. Click nút Edit ở Google Nhập vào Client ID và Client Serect đã tạo ở bước 1. LinkedIn Login: Bước 1: Tạo Application Vào trang [Hidden Content]. Tại OAuth 2.0 Redirect URLs chỉ cần nhập vào URL tương tự như vậy: [Hidden Content]/applications/core/interface/linkedin/auth.php Sau khi tạo xong app bạn sẽ có API Key và Secret Key. Bước 2: cấu hình IPS Vào ACP > System > Settings > Login Handlers. Click nút Edit ở LinkedIn. Nhập vào API Key và API Secret của application bạn đã tạo ở bước 1 IPS Connect: Bạn có thể đăng nhập bằng tài khoản ở 1 site IPS khác. Ví dụ mình có site A và B, bây giờ sẽ dùng site A làm master, bạn chỉ cần chú ý ở trang Login Handler có hiển thị Master IPS Connect URL và Master IPS Connect Key. Bạn chỉ cần edit IPS Connect của site B, và điền vào Master IPS Connect URL và Master IPS Connect Key của site A thế là xong. Từ giờ thành viên 2 site có thể đăng nhập qua lại rất tiện lợi. Có thể nói IPS tích hợp với xu hướng mạng xã hội rất tốt, tạo cho người dùng dễ dàng kết nối với website, như vậy cũng thu hút thành viên hơn. Qutuyệt vời!
  18. 2 points
    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. 2 points
    IPS 4 trở lên đã được tích hợp chức năng Forum Icon, nó hiển thị icon cho các forum mẹ, còn các forum con thì chỉ hiện 1 danh sách nhỏ phía dưới. Đây là cách đơn giản nhất để hiển thị luôn icon cho các forum con. Vào ACP > Customization > Themes > Click </> để edit một giao diện > Templates > Forums > front > index > forumRow Tìm {{foreach $forum->children() as $subforum}} Thêm bên dưới {{if $subforum->icon}} <img style="height: 16px; width: 16px;" src="{file="$subforum->icon" extension="forums_Icons"}" class='ipsItemStatus ipsItemStatus_custom {{if !\IPS\forums\Topic::containerUnread( $subforum ) && !$subforum->redirect_on}}ipsItemStatus_read{{endif}}'> {{endif}} Save Bạn sẽ được kết quả giống thế này:
  20. 2 points
    Plugin này có chức năng hiển thị màu của nickname theo màu của nhóm. Hỗ trợ hầu hết các vị trí thông dụng. DOWNLOAD (SOS40)_Group_Color_on_User_Link_2.0.0.zip Nguồn: [Hidden Content]
  21. 2 points
    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]
  22. 1 point
    Trước mình cũng bị lỗi này. Tắt hết plugin với app khác, xóa luôn cái theme mặc định xong tạo lại rồi chạy support xóa cache.
  23. 1 point
    Hi can you tell me how to embed the chatbox in different area not using the block manager? I tried adding to my template {template="bimchatbox" group="widgets" app="bimchatbox" params="$orientation"} but the functions do not work. I guess the javascript isnt running. Thank you.
  24. 1 point
    No, I don't have any plan for new features.
  25. 1 point
    Từ phiên bản 4.1.11 thì IPS đã không tích hợp Mandrill nữa, lý do là Mandrill sẽ không còn hoạt động đến hết tháng 04 năm 2016. SparkPost sẽ được thay thế, hiện tại đây là dịch vụ email tốt nhất, sự thay thế hoàn hảo cho Mandrill. Đặc biệt là ở tài khoản free được hỗ trợ 100.000 emails mỗi tháng, giới hạn 10.000 emails trong một ngày. Khá nhiều so với Mandrill và MailJet. Như vậy với những website nhỏ và trung bình thì xài dư sức. Những site lớn hơn có nhu cầu nhiều hơn thì các bạn có thể tham khảo thêm mức giá Sparkpost tại đây. Quan trọng nhất là đăng ký thoải mái, không như Mandrill chặn Việt Nam Bài viết này mình sẽ hướng dẫn các bạn cách thiết lập Sparkpost cho IPS. Cũng rất đơn giản vì IPS đã tích hợp nó sâu vào hệ thống rồi. Trước tiên mình sẽ không nói về cách đăng ký tài khoản Sparkpost nhé, nó quá đơn giản. Các bạn chỉ cần nhớ sau khi đăng ký xong thì check mail Sparkpost gửi về, kích hoạt email xong rồi cập nhật họ tên để tăng giới hạn 10.000 emails / ngày nhé, nếu không bạn sẽ bị giới hạn chỉ 500 emails / ngày thôi. Đây là tài khoản đã kích hoạt thành công: Bước tiếp theo là Verify cho domain bằng cách cài đặt SPF Text Record và DKIM Record. Nhìn xuống gần dưới cùng trang dashboard, bấm vào Manage your sending domains để lấy các thông số: Ở 2 mục SPF Text Record và DKIM Record, bấm nút Settings sẽ ra thông số DNS record để cài đặt cho domain. Sau khi thêm 2 records đó, bấm nút Test ở 2 mục, nếu thành công sẽ thấy như hình Ngoài ra bạn có thể verify qua email (bấm vào Email Options), nhưng yêu cầu bạn phải sở hữu địa chỉ email đề nghị để nhận được email verify. Xong bước verify, bây giờ cần lấy API của Sparkpost. Ở giao diện quản lý của Sparkpost, vào Accounts > API KEYS > Bấm nút NEW API KEY Nhập vào tên cho API, check hết các permissions, nếu bạn muốn giới hạn IP thì nhập ở phần Allowed IPs Thành công, hãy copy lại API key của bạn Bước cuối cùng, truy cập vào ACP của IPS > Systems > Settings > Email Settings. Khi chưa cài đặt API Key nên bạn ko thể chọn Sparkpost ở Email Delivery Methods Chỉ cần bấm vào chữ SparkPost màu xanh ở dưới bạn sẽ được chuyển đến trang để nhập API Key Chọn All emails và nhập Key. Lưu lại. Bây giờ quay về Systems > Settings > Email Settings và chọn SparkPost xong bấm Save. Hoàn thành, bạn đã có thể gửi mail ào ào :) Kiểm tra bằng cách bấm nút Test Settings màu xanh ở trên. Mình đã chuyển qua xài SparkPost cho IPSViet rồi, cảm nhận nó send mail rất nhanh. Bạn đăng ký ngay đi coi chừng nó như Mandrill lại chặn Việt Nam đăng ký nữa
  26. 1 point
    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
  27. 1 point
    Try this html <div class='ipsResponsive_showPhone'> This test only shows on phone </div>
  28. 1 point
    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
  29. 1 point
    It's ready now [Hidden Content]
  30. 1 point
    I just tested it, view this video [Hidden Content]
  31. 1 point
  32. 1 point
    I can not reproduce the issues related to themes.
  33. 1 point
  34. 1 point
    Hello, Is this tip still available ? I've updated the chatbox to its latest version and I can't find this line anymore !
  35. 1 point
    Try to download 1.3.0 here: [Hidden Content] I will update it in IPSViet next some days.
  36. 1 point
  37. 1 point
    Where to put a comma after you insert the nick? There are so @Sipsb test And so it is necessary to @Sipsb, test
  38. 1 point
    This \IPS\Output::i()->json( array( 'message' => 'Deleted' ) ); to \IPS\Output::i()->json( array( 'message' => \IPS\Member::loggedIn()->language()->get( 'deleted' ) ) ); and this \IPS\Output::i()->json( array( 'message' => 'Saved', 'txt' => $txt ) ); to \IPS\Output::i()->json( array( 'message' => \IPS\Member::loggedIn()->language()->get( 'saved' ), 'txt' => $txt ) );
  39. 1 point
    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]
  40. 1 point
  41. 1 point
    Hello Juven how did you get the "your message here..." line at bottom of the Chatbox? Mine is at top of the box.
  42. 1 point
    Để IPS hoạt động mượt hơn, bạn cần biết những cài đặt cơ bản sau: Sử dụng cronjob để run task Task là những công việc tự động được định thời gian để chạy âm thầm (Background Processes) như: bulkmail, rss import, delete dữ liệu tạm, kiểm tra phiên bản... Tùy theo mỗi application được cài đặt sẽ có thể có thêm nhiều task khác nhau. Như vậy bạn hình dung một ngày nào đó website của bạn phát triển mạnh, dữ liệu nhiều, số app và plugins bạn dùng cũng nhiều thì quá trình run task này sẽ trở nên ì ạch. Cronjob sẽ giúp bạn giải quyết vấn đề đó. Để bật cronjob, vào ACP tìm "cronjob" sẽ thấy mục "Use a cron to run tasks?", chọn YES và bạn sẽ thấy xuất hiện 1 dòng lệnh /usr/bin/php -d memory_limit=-1 -d max_execution_time=0 /bim/ipsviet/public_html/applications/core/interface/task/task.php d6e357a19ef6099931b9f114833a933aVào Cpanel hay control panel nào khác mà bạn dùng quản lý host để tạo một cronjob với dòng lệnh bên trên, thời gian chạy every minute Tiếp theo bạn cần chmod 777 cho file /bim/ipsviet/public_html/applications/core/interface/task/task.php sau đó mới có thể bấm nút Save để lưu lại cài đặt. Sử dụng Memcached IPS có hỗ trợ Xcache, ACP, Wincache, eAccelerator, Redis, Memcached. Nhưng theo họ Memcached là tốt nhất cho IPS. Nhưng ko phải host nào cũng hỗ trợ, nếu bạn có vps thì tự cài vào. Để bật cache, vào ACP -> Advanced Configuration -> Data storage Data Storage Method: Nếu host của bạn có hỗ trợ một trong các loại cache nêu trên thì hãy ưu tiên chọn MySQL Database, còn nếu host không hỗ trợ cache gì cả hoặc bạn không muốn sử dụng thì chọn File System Caching Method: chọn cache mà host hỗ trợ, memcached thì yêu cầu thêm server, ví dụ 12.133.133.100:11211 Cache page output for guests: để 180 Bấm Save, bạn sẽ được cung cấp cho một file constants.php, download nó về và up lên ngang hàng với index.php xong bấm Save lần nữa. Sử dụng Sphinx Search Sphinx hỗ trợ tìm kiếm tốt hơn cho website của bạn, tuy nhiên hosting thì ko hỗ trợ, nếu bạn có VPS thì tự cài đặt sphinx và vào ACP -> System -> Search để bật nó lên. Sắp tới mình sẽ áp dụng cho IPSViet và sẽ có bài hướng dẫn chi tiết. Sử dụng Amazon S3 cho file upload Amazon Simple Storage Service (Amazon S3) là vùng lưu trữ trên Internet. Dùng Amazon S3 để lưu trữ và truy xuất bất kỳ dữ liệu tại bất kỳ thời điểm nào, từ bất cứ nơi đâu trên web. Và rất tuyệt vời khi IPS có tích hợp sẵn chức năng này. Việc bạn cần làm là đăng ký tài khoản Amazon S3, giá có thể tham khảo ở đây [Hidden Content] Bạn có thể đăng ký dùng thử miễn phí 1 năm [Hidden Content] Sau đó tạo một bucket, tiếp tục truy cập vào [Hidden Content] để lấy Access Key và Serect Key. Cuối cùng là vào ACP -> System -> Files -> Storage Settings -> Configurations -> Bấm Creat new -> Chọn Amazon S3 -> nhập vào tên bucket vừa tạo, Access Key và Serect Key. Bây giờ ở Storage Settings bạn có thể chọn loại file bạn muốn chuyển qua Amazon S3, bấm Save và đợi, IPS tự chạy background processes để di chuyển file cho bạn. Kết Trên đó là những thiết lập có sẵn của IPS để tối ưu hóa hiệu suất hoạt động, tuy nhiên còn phụ thuộc rất nhiều vào hosting của bạn. Nếu có thể bạn hãy chọn Nginx + MariaDB thay vì Apache và MySQL để cho hiệu suất tốt hơn. IPSViet đang chạy trên Nginx + MariaDB mà ko gặp bất kỳ vấn đề nào. Thêm nữa, bạn Không nên cài quá nhiều applications hay plugins không cần thiết, màu mè, hãy sử dụng đúng mục đích và đúng cái bạn cần, những app hay plugin nào ko xài cứ thẳng tay xóa nó. Bạn nào có kinh nghiệm khác thì cùng chia sẽ ở topic này nhé.
  43. 1 point
    TEMPLATE LOGIC Nói về cách lập trình trong template ở các bản 3.x, mình rất ghét mỗi khi dùng if mà có nhiều else, template cho front end thì dùng dạng <if test="$var"> HTML to display </if>Còn có else thì nó chỉ hỗ trợ một else, thêm cái else nữa nó báo lỗi. <if test="$var"> HTML to display <else /> HTML to display </if>Cho nên mỗi khi mà else nhiều quá thì phải quăng hẳn nó vào một cái <php> sau đó mới đưa giá trị xuống. Còn nói về template cho ACP còn khủng khiếp hơn, phải dùng thêm tùm lum các thứ để nó hiểu là code PHP như $IPBHTML = ""; $IPBHTML .= <<<EOF HTML to display EOF; Qua 4.0 thì cảnh đó đã được giải thoát, cách lập trình template của IPS 4.0 đã đổi mới hoàn toàn. Mỗi template bit được viết trong 1 file *.phtml để có thể dễ dàng chỉnh sửa trong Dev Mode hoặc Designer Mode. Theo cá nhân mình thì cấu trúc của nó dễ nhìn hơn, giúp dễ dàng viết code PHP hơn cho template. Ví dụ câu lệnh if {{if $var}} HTML to display {{endif}}{{if $foo}} HTML to display {{elseif $bar}} HTML to display {{elseif $baz}} HTML to display {{else}} HTML to display {{endif}}Câu lệnh foreach {{foreach $foo as $bar}} HTML to display {{endforeach}}Hỗ trợ một vài shorcuts (viết tắt của một số giá trị thông dụng thường dùng) request.var viết tắt của IPSRequest::i()->varmember.var viết tắt của IPSMember::loggedIn()->varsettings.var viết tắt của IPSSettings::i()->vartheme.var viết tắt của IPSTheme::i()->settings['var']cookie.var viết tắt của IPSRequest::i()->cookie['var']Ví dụ thay vì viết full code {{if IPSMember::loggedIn()->member_id}} HTML to display {{endif}}Bạn có thể viết tắt {{if member.member_id}} HTML to display {{endif}}Nhìn vô cùng dễ thương phải ko? Còn raw PHP thì dùng {{$foo = array();}} TEMPLATE TAGS Để viết template tốt hơn, bạn cũng cần nắm rõ các tags, một vài tag bạn còn có thể dùng được trong CSS rất tiện lợi. Một template tag có dạng {tag="value"}Nếu có thêm option thì {tag="value" option="option_value" other_option="other_value"}Language Strings {lang="key"}Dùng hiển thị giá trị của ngôn ngữ. Options: sprintf dùng như [Hidden Content]. pluralize chỉ dùng khi một chuỗi sử dụng pluralizing logicwordbreak thêm cái <wbr> vào.Dates & Times {date="699753360"}Dùng định dạng thời gian. Có thể dùng chung với HTML5 <time> Options: norelative hiển thị ngày tháng theo địa phương. Chỉ cần đặt nó norelative="true".dateonly chỉ hiển thị ngàyMember Data {member="name"}Hiển thị thông tin của thành viên (đã đăng nhập). Options: group trả về giá trị từ thông tin group của thành viên. Ví dụ IPSMember::loggedIn()->group[ $key ] - Để dùng nó chỉ cần đặt group="true". id dùng nó với các thành viên với ID chỉ định, không phải là ID của thành viên đăng nhập. raw đặt nó là raw="true" để chặn các lỗ hỏng XSS (rất ít dùng) Settings {setting="board_name"}Trả về giá trị của setting Theme Settings {theme="selected"}Giá trị setting của theme URLs (có thể dùng trong file CSS) {url="app=core&module=system&controller=login"}Options: seoTemplate giá trị dùng trong FURL Template seoTitle title sử dụng cho Friendly URL csrf nếu bật csrf="true" sẽ add key csrf vào url fragment thêm #fragment vào cuối URL noprotocol set noprotocol="true" sẽ trả về một URL không protocol plain đưa về text gốc của URL không có các ký tự HTML mã hóa. Thường dùng cho plaintext email. Chỉ cần đặt plain="true" Numbers {number="1000"}Định dạng số dựa vào locale của user, ví dụ trên locale Việt Nam sẽ cho ra 1,000 File Size {filesize="1000000"}Định dạng dung lượng file. Ví dụ trên sẽ cho ra 1MB Options: decimal sử dụng decimal (1000 bytes = 1kB) thay vì binary (1024 bytes = 1kB). CSS Prefixes (Có thể dùng trong file CSS) {prefix="transition" value="0.1s all linear"}Thay vì dùng "-webkit-", "-moz-", "-ms-" and "-o-" cho transition, bạn chỉ cần dùng 1 dòng trên là đủ. Template {template="userPhoto" group="global" app="core" params="$entry->author(), 'small'"}Đưa vào một template khác. Tất cả các option như trên là bắt buộc. Images (có thể dùng trong CSS) {resource="image.png" app="core" location="front"}Đưa về URL của file hình ảnh. Expression (có thể dùng trong CSS) {expression="1+1"}Thực hiện như PHP để trả về một giá trị. Option: raw đặt raw="true" để chặn các lỗ hỏng XSS. Wordbreak (có thể dùng trong CSS) {wordbreak="This is some very long text..."}Thêm vào <wbr> nếu nội dung quá dài để tránh việc bị giãn layout. Truncate (có thể dùng trong CSS) {truncate="Some very long text..." length="10"}Cắt bớt text theo độ dài định sẵn. Advertisements {advertisement="location"}Hiển thị quảng cáo Xong rồi, bài viết này đã mêu tả chi tiết về một template và liệt kê các template tags, là một admin của một site dùng IPS bạn không thể không biết những điều này, nó sẽ giúp ích rất nhiều cho bạn trong việc thiết kế theme, hay lập trình các plugins, apps về sau.
  44. 1 point
  45. 1 point
    Ok, I've missed something, it works. This does not work with this feature: Text reduction in the portal! There will be displayed while the text as hidden but it lacks the graphic to ?? Background to the text. Me: Yours: Any Idea??
  46. 1 point
  47. 1 point
    Trong quá trình sử dụng ipb, chắc chắn các webmaster nào cũng từng gặp lỗi. Chủ đề này lập ra để mọi người chia sẽ kinh nghiệm khi gặp những lỗi cơ bản nhất của IPB. Chú ý là đây sẽ không có cách hướng dẫn cụ thể để fix lỗi, vì trong quá trình sử dụng sẽ có rất nhiều lỗi lầm chỉ là cho bạn biết sẽ làm thế nào nếu gặp lỗi cơ bản này. 1. Không nên xóa template và language mặc định Tại sao mình đưa yêu cầu này lên ưu tiên đầu? Mình từng gặp lỗi của ip.blog, tưởng chừng rất nguy hiểm thế mà nguyên nhân là do lang việt hóa của mình bị một ký tự lạ ở đầu file. Có lần vô sửa cái ajax thanks cho một bạn vì tình trạng không dùng được ajax thì là do giao diện bị lỗi ở phần skin_topic -> post. Mình khuyên các bạn nên giữ lại giao diện và ngôn ngữ mặc định của IPB, để khi có lỗi xảy ra còn đem nó ra để so sánh. 2. Lỗi database: Bạn sẽ thấy một cái bản báo lỗi database màu cam cam trắng trắng rất dễ thương Nội dung chung chung rất dễ ghét: Bạn sẽ không biết được lỗi ở chỗ nào. Điều cần thiết trước tiên là mở cái file này lên /cache/sql_error_latest.cgi sẽ thấy được sql lỗi chỗ nào, do mod nào bị, nếu bạn có khả năng thì có thể dễ dàng sửa, còn ko rành thì cứ gửi support lên ipsviet. Có một kinh nghiệm nữa về sửa lỗi SQL, hiệu quả khi lỗi phát sinh từ chính data của IPB: Vào ACP -> Support -> Diagnostics -> Database Checker và Database Index Checker, cứ vào đó nếu IPB phát hiện lỗi nó sẽ đưa ra thông báo fix, bạn chỉ việc bấm vô để fix. 3. Lỗi Fatal error Nó hay có dạng thế này Fatal error: Call to a member function sportal_home() on a non-object in /home/xxxxx/public_html/test/hooks/sportal_home_3392e93b713f5bdf033c448498164813.php on line 71Ở đây bạn phải chú ý nhất là cái tên function để biết được nó là của mod nào. Đó là do trong quá trình cài đặt hoặc upgrade đã không import được template bit. Đó có vẻ như là lỗi của IPB, mình đã có thử nhiều mod và thỉnh thoảng vẫn gặp trường hợp trên. Cái này fix cũng đơn giản, chỉ cần vào Look & Feel -> Template Tools trong ACP, xong tìm đến Rebuild Master Skin Data (sau đó chọn 'Rebuild HTML' và 'tên của mod/app bị lỗi') ->bấmREBUILD. Cuối cùng, chạy Recache Skin Sets cho tất cả skin đang cài đặt. 4. Lỗi Permission denied in Bạn sẽ gặp thông báo như thế này Unable to open '/xxxxx' for writing: Permission denied in Kiểm tra lại đường dẫn trong thông báo lỗi và chmod cho đúng. Thường gặp với những mod có chức năng upload file lên. 5. Lỗi đã edit template trong ACP mà bên ngoài không thấy hiển thị Có thể do host có safe mode on. Vào ACP ở khung search tìm Use safe mode skins & languages sau đó bật nó lên -> Recache lại skin. 6. Lỗi Cannot modify header information hoặc Headers already sent Rất ít xảy ra trên IPB, nếu bạn bị thì là do host của bạn, có thể phiên bản php cũ. Lúc này để ý cái file nào, của mod nào bị lỗi đó. Sau đó dùng Notepad++ mở nó lên và chọn Format -> Encode in UTF-8 without BOM xong để ý ở đầu hay cuối file php có ký tự nào lạ thì xóa nó đi. Nếu vẫn ko khắc phục được thì thêm ob_start(); vào trước mỗi hàm và của file đó. Nếu vẫn không được thì gửi support 7. Lỗi mod/hook không hoạt động: Trước tiên khoan hãy khóc lóc than trách tủi phận vì sao thiên hạ ai cũng xài được mà đến mình thì bị lỗi. Và bình tĩnh kiểm tra xem đã upload file đúng chưa? Mod/app đó có cần edit file không? Tất cả đều phải mở file hướng dẫn kèm theo để coi kỹ càng. Nếu đã làm đúng như hướng dẫn mà vẫn bị lỗi thì có thể các trường hợp sau đây: - Phiên bản IPB không phù hợp - Bị xung đột với mod khác. Kiểm tra bằng cách vào ACP -> Manager Hook -> Disable all hooks. Sau đó bật lại cái hook của cái mod bị lỗi nếu thấy hoạt động tốt thì chính xác là bị xung đột với hook của mod khác. Giờ cứ bật lại từng hook và kiểm tra từ từ sẽ biết được mod nào bị xung đột. Phần này thì rất nhiều chuyện liên quan đến nó, nếu bạn đã thử nhiều cách mà không sao giải quyết được thì nên gửi support. 8. Lỗi không gửi được mail kích hoạt qua phương thức phpmail() và cả smtp Liên hệ nhà cung cấp host. 9. Lỗi trang trắng Bạn phải bật display_errors On ở php.ini lên, nếu bạn xài hosting thì phải liên hệ nhà cung cấp nếu ko biết cách. Tạm thời nhiêu đó chút ít kinh nghiệm, sẽ update thêm....
  48. 1 point
    Đã lâu lắm mới quay lại IPB, HMT cũng chuyển qua IPB, cũng xin có 1 đóng góp nhỏ với cộng đồng IPB, cái này mình chuyển từ VBB sang. BBcode này thay thế cho tất cả các bbcode của mọi người đang xài, hỗ trợ chèn logo vào file video luôn, đáng để dùng đấy chứ! XEM THỬ DEMO Bạn cần làm như sau: Download đính kèm về và giải nén sau đó mở file: player/config.xml <config> <repeat>true</repeat> <volume>70</volume> <skin>[Hidden Content]; <logo.file>[Hidden Content]; <logo.link>[Hidden Content]; <logo.linktarget>_blank</logo.linktarget> <logo.position>top-right</logo.position> <logo.margin>8</logo.margin> <logo.hide>false</logo.hide> <plugins>[Hidden Content]; </config> Thay [Hidden Content] thành đường dẫn site của bạn! [Hidden Content].../skins/aero.zip File zip đến skin của trình play [Hidden Content]...yer/logohmt.png logo bạn muốn chèn vào video Mở file BBcode.xml sửa <?xml version="1.0" encoding="utf-8"?> <bbcodeexport> <bbcodegroup> <bbcode> <bbcode_id>35</bbcode_id> <bbcode_title>Music / Video </bbcode_title> <bbcode_desc>Post tất cả các loại nhạc</bbcode_desc> <bbcode_tag>hmtmedia</bbcode_tag> <bbcode_replace><![CDATA[<center><object id="flashplayer" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="305" height="200"><param name="movie" value="[Hidden Content]/player/player.swf"><param name="allowFullScreen" value="true"><param name="allowScriptAccess" value="always"><param name="FlashVars" value="config=[Hidden Content]/player/config.xml&proxy.link={content}"><embed name="flashplayer" src="[Hidden Content]/player/player.swf" flashvars="config=[Hidden Content]/player/config.xml&proxy.link={content}" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="610" height="400"></object></center>]]></bbcode_replace> <bbcode_useoption>0</bbcode_useoption> <bbcode_example><![CDATA[[hmtmedia]Link nhạc[/hmtmedia]]]></bbcode_example> <bbcode_switch_option>0</bbcode_switch_option> <bbcode_menu_option_text/> <bbcode_menu_content_text>Nhập link nhạc vào đây</bbcode_menu_content_text> <bbcode_single_tag>0</bbcode_single_tag> <bbcode_groups>all,4,9,1,8,2,6,7,3,5</bbcode_groups> <bbcode_sections>topics</bbcode_sections> <bbcode_php_plugin/> <bbcode_no_parsing>0</bbcode_no_parsing> <bbcode_protected>0</bbcode_protected> <bbcode_aliases/> <bbcode_optional_option>0</bbcode_optional_option> <bbcode_image>media.gif</bbcode_image> <bbcode_app>core</bbcode_app> <bbcode_custom_regex/> </bbcode> </bbcodegroup> </bbcodeexport>Thay [Hidden Content] thành đường dẫn site của bạn! Bước 2: Download plugins hỗ trợ tại đây : [Hidden Content] Giải nén và đưa vào thư mục playerplugins Mở file pluginslist.xml và thêm vào plugin site bạn muốn thêm Save và upload lên ngang hàng forum index nhé! Bước 3: Vào ACP > Look & Feel > Post Content > BBCode Managementi Import New BBCodes Chọn file BBcode rồi nhấn Import là xong! Have fun! [Hidden Content]...at-shared-site/ DOWNLOAD: BBcode Play All Music Video.zip
  49. 1 point
    Bộ lang của ipsviet đang xài, việt hóa theo chuẩn UTF-8, bao gồm Forum và Blog. Đừng ai hỏi việt hóa luôn cả ACP nha. Có một vài chỗ chưa hoàn chỉnh, các bạn có thể vào ACP -> manage language để chỉnh sửa. Download: (.xml) lang_viet ipb3.3.zip Cái này chỉ cần vào ACP -> manage language -> kéo xuống chỗ Import Language XML và chọn file rùi bấm Import là xong Download: (.zip) VN_lang_IPB33_UTF8.xml.gz Cái này chỉ dùng khi nào bạn không import được theo cách trên do host bị time out. Xem hướng dẫn tại đây:
  50. 1 point
    Vô cùng đơn giản Vào ACP > Look & Feel > chọn skin > Templates>Board Index > boardIndexTemplate. Tìm <div id='index_stats' class='ipsLayout_right clearfix' <if test="sidebarclosed2:|:IPSCookie::get('hide_sidebar') == '1'">style='display: none'</if>>Thêm bên dưới: <!--Active members at the top of a sidebar - start--> <div style="border:5px solid #DBE2EC; padding:5px 3px 3px 4px; margin-bottom: 5px; text-align:center; border-radius: 4px 4px 4px 4px;"> <h4 class='statistics_head'>{parse expression="sprintf( $this->lang->words['online_right_now'], $stats['TOTAL'] )"}</h4> {$this->lang->words['active_users']} <br> <br> <p class='statistics_brief desc'> {parse expression="sprintf( $this->lang->words['active_users_detail'], $stats['MEMBERS'], $stats['GUESTS'], $stats['ANON'] )"} <br> <a href='{parse url="app=members&amp;module=online&amp;sort_order=desc" base="public"}'>({$this->lang->words['online_link']})</a> </p> <br /> <p> <span class='name'>{parse expression="implode( ",</span> <span class='name'>", $stats['NAMES'])"}</span> </p> <br> </div> <!--Active members at the top of a sidebar - end--> Save lại
×