Jump to content

Tech Support

Administrators
  • Posts

    1,811
  • Joined

  • Days Won

    338

Everything posted by Tech Support

  1. This is very abstract question. The size of thumbnails has 2 parts: The actual size of image files, but default it is 320x180 The display size of how the image file is expanded or collapsed in adaptive layout. Based on device dimensions this size will be different for different devices. In general it is not possible to provide a simple answer for "how". You need strong CSS coding experience to do that. I can only tell the places. This is the main CSS style of video thumbs (and many other type of thumbs, they share the same style): .list-playlists .item, .list-models .item, .list-sponsors .item, .list-channels .item, .list-categories .item, .list-albums .item, .list-albums-images .item, .list-videos .item, .list-videos-screenshots .item { display: inline-block; text-align: left; background: transparent; vertical-align: top; cursor: pointer; margin: 10px 0 0 10px; width: calc(25% - 10px); cursor: pointer; -webkit-box-shadow: -1px 1px 5px rgba(207, 207, 207, 0.65); box-shadow: -1px 1px 5px rgba(207, 207, 207, 0.65); border-radius: 0 0 5px 5px; background-color: #ffffff; } This style means 4 thumbs per row (width: calc(25% - 10px)). Then when sidebar is present, the number of video thumbs is reduced to 3 per row: .sidebar + .main-container .list-videos .item { width: calc(33.33% - 10px); } Then adaptive layout for devices with different sizes: @media screen and (max-width: 1255px) { .sidebar + .main-container .list-playlists .item, .sidebar + .main-container .list-videos .item { width: calc(25% - 10px); } } @media screen and (max-width: 860px) { .sidebar + .main-container .list-albums .place ~ .item:nth-of-type(-n + 7), .list-albums .item, .member-menu + .main-container-user .list-albums .item, .member-menu + .main-container-user .list-channels .item, .member-menu + .main-container-user .list-members .item, .sidebar + .main-container .list-videos .item, .sidebar + .main-container .place ~ .item:nth-of-type(-n + 7), .place ~ .item:nth-of-type(-n + 7), .list-playlists .item, .list-videos .item { width: calc(33.33% - 10px); } } @media screen and (max-width: 640px) { .sidebar + .main-container .list-albums .place ~ .item:nth-of-type(-n + 7), .list-albums .item, .member-menu + .main-container-user .list-albums .item, .member-menu + .main-container-user .list-channels .item, .member-menu + .main-container-user .list-members .item, .sidebar + .main-container .list-videos .item, .sidebar + .main-container .place ~ .item:nth-of-type(-n + 7), .place ~ .item:nth-of-type(-n + 7), .list-playlists .item, .list-videos .item { width: calc(50% - 10px); } } @media screen and (max-width: 420px) { .sidebar + .main-container .list-videos .item, .sidebar + .main-container .place ~ .item:nth-of-type(-n+7), .place ~ .item:nth-of-type(-n+7), .member-menu + .main-container-user .list-videos .item, .member-menu + .main-container-user .list-playlists .item, .list-playlists .item, .list-videos .item { width: calc(100% - 5px); margin: 5px 0 0 5px; } } So the main thing is that you adjust the width percentage of a thumb item for different device dimensions and different layout conditions (have sidebar or not, for example).
  2. Absolutely, please use list_models and list_dvds blocks similar to list_categories block in this guide to display the same thing for models and channels.
  3. The player seems to be KVS player, but it doesn't have any VR controls. So it plays these videos like standard (non-VR) videos.
  4. Yes, the link to the main categories page will be lost with this code. You may need to add more complicated design of the drop down to include also the link to all categories. This tutorial provides only basic things, not concentrating on design itself.
  5. KVS player doesn't support AR or VR videos at the moment.
  6. Theme changes only need CSS / HTML basic knowledge + ability to understand KVS template structure.
  7. Please create support ticket. It is not possible to guess what is going on without looking into your admin panel and logs. There is no sense to ask such questions on forum.
  8. Please create support ticket: https://www.kernel-scripts.com/support/
  9. Please find installation instruction in _INSTALL/install_EN.txt file on the archive.
  10. In order to fix the issue we need to access your WP admin panel, so please create a support ticket with all details.
  11. That's strange. Please create a support ticket and send us access to your WP to check the settings and created posts.
  12. Sure, we will soon publish the demo for videos list / editor on our kvs-demo.com and make a public announcement. Then we will also need some time to adjust all admin templates to the new HTML structure, at the same time we will be able to collect feedback from you and make adjustments if needed. We are already 90% on track.
  13. For now we are working on admin panel new design and usability. Load balancing is a long way to go, the whole frontend code should be changed to the new architecture, this is very huge task because of the amount of code.
  14. Please create support ticket with more details (site, user access).
  15. It was finished and now HLS ads can be played with VAST. You need to update these 2 files (the 2nd file was just added): https://www.kvs-demo.com/player/kt_player.js https://www.kvs-demo.com/player/hls.min.js If you try and see the HLS advertising is not working, please create support ticket.
  16. The reason was found - your KVS version is 5.4.0, but for Wordpress plugin to be working with KVS feeds it needs minimum KVS 5.5.0. Please update your KVS version.
  17. There is a way to hide admin panel from the public, please check this:
  18. Please create support ticket for this. It could be: Wrong feed URL you are trying to enter Your admin panel is hidden from the public (and thus from the Wordpress as well) KVS version is less than 5.5.0
  19. After some discussion we think we will be able to update player to support HLS video ads. We will include 200kb overload dynamically if advertiser sends HLS ad and the current device doesn't support it. So this will not affect other KVS users and SEO, and at the same time will allow playing such ads. We will keep you updated on this.
  20. Strange to here advertisers stick to format which is not officially supported for 40% of all users: https://caniuse.com/?search=hls Sure, we absolutely acknowledge that HLS is a must for KVS. Unfortunately HLS is still a big problem for us, so won't be able to deliver it anytime soon. You may need to consider to switching to another player if you can't use advertisers that at least alternatively support MP4 files. What we can actually do rather quickly is to allow playing HLS ads on devices that support it natively (e.g. on 60% of devices). However for the rest of 40% we are kind of "forced" to include hls.js into player JS file, which is 200% of the current KVS player size (300kb against 150kb). Adding this will result in some SEO parameters loss for all KVS customers for sure (longer player load time, and player is a Largest Contentful Paint, one of the key parameters).
  21. KVS supports ability to sell subscriptions to individual profiles and channels. These subscriptions work using the internal token system and have the following features: A subscription can be for unlimited period, or for the given period of days. It is possible to specify only 1 period, which will affect all subscriptions of the same type (e.g. you can configure 1 period for subscription on profiles, and another period for subscription on channels). A subscription should be paid in tokens, so that users first need to purchase tokens using one of the supported and configured payment processor. Subscription means premium access to all videos uploaded by the given profiles or into the given channel. Subscription price can be set in admin panel for each profile / channel separately, or in site frontend in profile / channel editor (this field should be added into theme layout, not exist by default). So ultimately each member can have multiple paid channels with different prices, as well as separate price for the whole member's profile. If subscription is durable, at the end of subscription period KVS will try to deduct the needed amount of tokens from the user's account (e.g. rebill the subscription). If there will be no tokens on user's balance within 24 hours, the subscription will not be renewed. Unfortunately at the time of writing (5.5.1 KVS version) there is no support for sending emails, alerts to users at the moment with regard to this issue. Will be added in future. It is possible to configure that users who sell subscriptions to their profiles or channels will get some % of revenue in tokens paid by buyers. For simplicity this guide will consider the case when you activate only 1 type of subscription at a time: either channels or profiles. If you want to consider having both profile and channel subscriptions at a time, you will need more robust template coding to render video purchase forms correctly, because the same video can be accessed via channel subscription, or via profile subscription and thus 2 purchase options should be displayed. However the provided examples give the full code needed to create both cases and only minor IF / ELSE adjustments are needed. If you want to start using this feature you should first consider configuring a payment processor in Memberzone -> Billings. You need to choose a processor that supports tokens: SegPay, Paypal and Verotel at the moment + CoinPayments added in the new version already. For configuring them please create support ticket after you have your account approved at billing's side. Activating paid subscriptions in admin panel The very few and easy settings are located in Settings -> Memberzone Settings under Paid subscriptions section. You need to activate paid subscriptions for profiles and/or channels, set their default price as 0 and subscription duration as needed (leave empty for unlimited duration). In the next section you can also activate earning tokens from selling profiles and/or channels and specify your commission. Here is how the settings will look like for 30-day channel subscriptions with users earning 90% of all paid tokens (10% is your service fee): Adding fields for users to specify subscription price There could be 2 places where you may need to add this field based on whether you plan profile and/or channel subscriptions. For channels: Go to Website UI -> Language files -> default and add the following lines: edit_channel.field_tokens_required = Price in tokens edit_channel.field_tokens_required_hint = specify price for paid channels Then go to Website UI -> Global blocks -> Edit Channel Form and add the following code into the desired place to render token price field: <div class="row"> <label for="edit_channel_tokens_required" class="field-label">{{$lang.edit_channel.field_tokens_required}}</label> <input type="number" name="tokens_required" id="edit_channel_tokens_required" class="textfield" value="{{if $smarty.post.tokens_required>0}}{{$smarty.post.tokens_required}}{{/if}}" min="0" placeholder="{{$lang.edit_channel.field_tokens_required_hint}}" {{if $is_locked=='true'}}readonly{{/if}}/> <div class="field-error down"></div> </div> For profiles: Go to Website UI -> Language files -> default and add the following lines: edit_profile.field_tokens_required = Price in tokens edit_profile.field_tokens_required_hint = specify price for paid profiles Then go to Website UI -> Theme settings and under Profile options field find the active link (in some themes there could be several profile editing forms and only one of them is active). Then in the profile edit block settings add the following code into template where you want it to be displayed: <div class="row"> <label for="edit_profile_tokens_required" class="field-label">{{$lang.edit_profile.field_tokens_required}}</label> <input type="number" name="tokens_required" id="edit_profile_tokens_required" class="textfield" value="{{if $smarty.post.tokens_required>0}}{{$smarty.post.tokens_required}}{{/if}}" min="0" placeholder="{{$lang.edit_profile.field_tokens_required_hint}}" {{if $is_locked=='true'}}readonly{{/if}}/> <div class="field-error down"></div> </div> Closing access to videos in paid channels / from paid profiles Go to Website UI -> Language files -> default and add the following lines: videos.video_player_guest.channel = This video belongs to a premium channel %CHANNEL%. Only active members can watch videos from premium channels. <br/><br/> Please <a href="%LOGIN%" data-fancybox="ajax">log in</a> or <a href="%SIGNUP%" data-fancybox="ajax">sign up</a> for free. videos.video_player_tokens_not_enough.channel = This video belongs to a premium channel %CHANNEL%. To have access to videos in this channel you must spend <em>%TOKENS_COST%</em> tokens. <br/><br/> Your current tokens balance is <em>%TOKENS_AVAILABLE%</em> tokens. <br/> You need <em>%TOKENS_LEFT%</em> more tokens. videos.video_player_tokens_purchase.channel = This video belongs to a premium channel %CHANNEL%. To have access to videos in this channel you must spend <em>%TOKENS_COST%</em> tokens. <br/><br/> Your current tokens balance is <em>%TOKENS_AVAILABLE%</em> tokens. <br/> Please confirm spending <em>%TOKENS_COST%</em> tokens on this video. Now you need to modify video view block template in Website UI -> Pages -> View Video page -> Video View block. Locate the following line: {{elseif $data.can_watch==0}} and you need to add the following block RIGHT before this line. ATTENTION! This is the most complicated part, as you need to insert the fully copied code fragment into the specific part of Smarty template, failing to do correctly make break your video page. Please make sure you do a backup copy of original template code before you do any changes, just in case you need to restore it. For channels: {{elseif $data.dvd.tokens_required>0 && $data.dvd.is_purchased==0 && $data.user_id!=$smarty.session.user_id && $data.dvd.user_id!=$smarty.session.user_id}} <div class="no-player" style="width: 100%; height: 0; padding-bottom: {{$player_size[1]/$player_size[0]*100|replace:",":"."}}%"> <img src="{{$flashvars.preview_url}}" width="{{$player_size[0]}}" height="{{$player_size[1]}}" alt="{{$data.title}}"/> <span class="message"> {{if $smarty.session.user_id<1}} {{$lang.videos.video_player_guest.channel|replace:"%CHANNEL%":$data.dvd.title|smarty:nodefaults|replace:"%LOGIN%":$lang.urls.login|replace:"%SIGNUP%":$lang.urls.signup}} {{else}} {{if $smarty.session.tokens_available<$data.dvd.tokens_required}} {{assign var="tokens_left" value=$data.dvd.tokens_required-$smarty.session.tokens_available}} {{$lang.videos.video_player_tokens_not_enough.channel|replace:"%CHANNEL%":$data.dvd.title|replace:"%TOKENS_COST%":$data.dvd.tokens_required|replace:"%TOKENS_AVAILABLE%":$smarty.session.tokens_available|replace:"%TOKENS_LEFT%":$tokens_left|replace:"%UPGRADE%":$lang.urls.upgrade|smarty:nodefaults}} <form> <input type="button" class="submit" data-fancybox="ajax" data-href="{{$lang.urls.upgrade}}" value="{{$lang.videos.video_player_tokens_btn_buy|replace:"%TOKENS_COST%":$data.dvd.tokens_required|replace:"%TOKENS_AVAILABLE%":$smarty.session.tokens_available|replace:"%TOKENS_LEFT%":$tokens_left}}"> </form> {{else}} {{assign var="tokens_left" value=$smarty.session.tokens_available-$data.dvd.tokens_required}} {{$lang.videos.video_player_tokens_purchase.channel|replace:"%CHANNEL%":$data.dvd.title|replace:"%TOKENS_COST%":$data.dvd.tokens_required|replace:"%TOKENS_AVAILABLE%":$smarty.session.tokens_available|replace:"%TOKENS_LEFT%":$tokens_left|replace:"%UPGRADE%":$lang.urls.upgrade|smarty:nodefaults}} <form action="{{$data.canonical_url}}" method="post" data-form="ajax"> <div class="generic-error hidden"></div> <input type="hidden" name="action" value="subscribe"/> <input type="hidden" name="subscribe_dvd_id" value="{{$data.dvd.dvd_id}}"> <input type="submit" class="submit" value="{{$lang.videos.video_player_tokens_btn_spend|replace:"%TOKENS_COST%":$data.dvd.tokens_required|replace:"%TOKENS_AVAILABLE%":$smarty.session.tokens_available|replace:"%TOKENS_LEFT%":$tokens_left}}"> </form> {{/if}} {{/if}} </span> </div> For profiles: {{elseif $data.user.tokens_required>0 && $data.user.is_purchased==0 && $data.user_id!=$smarty.session.user_id}} <div class="no-player" style="width: 100%; height: 0; padding-bottom: {{$player_size[1]/$player_size[0]*100|replace:",":"."}}%"> <img src="{{$flashvars.preview_url}}" width="{{$player_size[0]}}" height="{{$player_size[1]}}" alt="{{$data.title}}"/> <span class="message"> {{if $smarty.session.user_id<1}} {{$lang.videos.video_player_guest.channel|replace:"%CHANNEL%":$data.username|smarty:nodefaults|replace:"%LOGIN%":$lang.urls.login|replace:"%SIGNUP%":$lang.urls.signup}} {{else}} {{if $smarty.session.tokens_available<$data.user.tokens_required}} {{assign var="tokens_left" value=$data.user.tokens_required-$smarty.session.tokens_available}} {{$lang.videos.video_player_tokens_not_enough.channel|replace:"%CHANNEL%":$data.username|replace:"%TOKENS_COST%":$data.user.tokens_required|replace:"%TOKENS_AVAILABLE%":$smarty.session.tokens_available|replace:"%TOKENS_LEFT%":$tokens_left|replace:"%UPGRADE%":$lang.urls.upgrade|smarty:nodefaults}} <form> <input type="button" class="submit" data-fancybox="ajax" data-href="{{$lang.urls.upgrade}}" value="{{$lang.videos.video_player_tokens_btn_buy|replace:"%TOKENS_COST%":$data.user.tokens_required|replace:"%TOKENS_AVAILABLE%":$smarty.session.tokens_available|replace:"%TOKENS_LEFT%":$tokens_left}}"> </form> {{else}} {{assign var="tokens_left" value=$smarty.session.tokens_available-$data.user.tokens_required}} {{$lang.videos.video_player_tokens_purchase.channel|replace:"%CHANNEL%":$data.username|replace:"%TOKENS_COST%":$data.user.tokens_required|replace:"%TOKENS_AVAILABLE%":$smarty.session.tokens_available|replace:"%TOKENS_LEFT%":$tokens_left|replace:"%UPGRADE%":$lang.urls.upgrade|smarty:nodefaults}} <form action="{{$data.canonical_url}}" method="post" data-form="ajax"> <div class="generic-error hidden"></div> <input type="hidden" name="action" value="subscribe"/> <input type="hidden" name="subscribe_user_id" value="{{$data.user.user_id}}"> <input type="submit" class="submit" value="{{$lang.videos.video_player_tokens_btn_spend|replace:"%TOKENS_COST%":$data.user.tokens_required|replace:"%TOKENS_AVAILABLE%":$smarty.session.tokens_available|replace:"%TOKENS_LEFT%":$tokens_left}}"> </form> {{/if}} {{/if}} </span> </div> After adding such block, video page should turn into a locked player for paid channels / profiles, unless user purchases them: Displaying subscription status for paid subscription Note: this functionality will become possible in KVS 6.0 update. Default theme renders list of user's subscriptions, but subscriptions can be free and paid. The default rendering doesn't separate them, and here is how to modify that. Go to Website UI -> Language files -> default and add the following lines: subscriptions.list_label_paid_unlimited = (Paid, never expires) subscriptions.list_label_paid_expired = (Paid, expired) subscriptions.list_label_paid_active = (Paid, expires in [count]%1% days || 1: 1 day[/count]) Then go to Website UI -> Pages -> [Memberzone] My Profile page -> My Subscriptions block settings. Locate the following code in its template: <a href="{{$subscribed_url}}" class="title">{{$item.title}}</a> And change it like this: <a href="{{$subscribed_url}}" class="title"> {{$item.title}} {{if $item.purchase.purchase_id>0}} {{if $item.purchase.expiry_date_is_unlimited==1}} {{$lang.subscriptions.list_label_paid_unlimited}} {{elseif $item.purchase.expiry_date_hours_left<0}} {{$lang.subscriptions.list_label_paid_expired}} {{else}} {{assign var="days_left" value=$item.purchase.expiry_date_hours_left/24|floor}} {{$lang.subscriptions.list_label_paid_active|count_format:"%1%":$days_left}} {{/if}} {{/if}} </a> And the result will look like this:
  22. No, the only way to send attachments is to upload them to some google drive for example and send the link in feedback form. This is also not yet possible, email system is planned for the complete rewrite and we are not doing any enhancements in this area until we start this.
  23. Please check this post, it has the exact code that you can use to display models for each video:
×
×
  • Create New...