• 21-01-2021, 23:52:36
    #1
    Merhabalar,

    Bir arkadaşım için az önce yaptığım, ürünün kalan gün sayısını gösteren kodu paylaşıyorum sizler ile.

    Özellikler
    - Aktif ürünlerde, eğer ürünün fiyatlandırması yinelenen şeklindeyse (1 aylık, 3aylık, 6aylık,12 aylık, 24 aylık ve 36 aylık) ürünün kalan gün sayısını bir bar içerisinde gösterir. Gün sayısı azaldıkça bar kısalır.

    - Kodda G-Invoices modülü desteği bulunmakta. Modüle Buradan ulaşabilirsiniz. Ürünün süresi eğer 1/3 kalmışsa (aylık üründe 10 gün gibi) altında yenile butonu çıkar, bu da G-Invoices modülünün arayüzüne gönderir.
    - Ürünün süresi 1/3 kalmışsa (aylık üründe 10 gün gibi) barın rengi kırmızıya dönmekte.

    - Hook gerekliliği bulunmamakta. Tüm kodlar .tpl dosyasının içerisinde bulunmaktadır.

    Kodu, templates/temaklasorunuz/clientareaproducts.tpl içindeki kod ile değişmelisiniz. (Temadan temaya çeşitli düzenlemeler olabileceğinden ötürü, yedek alınması ve verdiğim kodun muadili kod ile değişmesi gerekiyor.)




    Kod:
    {include file="$template/includes/tablelist.tpl" tableName="ServicesList" filterColumn="4" noSortColumns="0"}
    <script type="text/javascript">
        jQuery(document).ready( function ()
        {
            var table = jQuery('#tableServicesList').removeClass('hidden').DataTable();
            {if $orderby == 'product'}
                table.order([1, '{$sort}'], [4, 'asc']);
            {elseif $orderby == 'amount' || $orderby == 'billingcycle'}
                table.order(2, '{$sort}');
            {elseif $orderby == 'nextduedate'}
                table.order(3, '{$sort}');
            {elseif $orderby == 'domainstatus'}
                table.order(4, '{$sort}');
            {/if}
            table.draw();
            jQuery('#tableLoading').addClass('hidden');
        });
    </script>
    
    {literal}
    <style>
    .progress {
        position:relative;
    }
    .progress span {
        position:absolute;
        left:0;
        width:100%;
        text-align:center;
        z-index:2;
        color:black;
    }
    </style>
    {/literal}
    
    <div class="table-container clearfix">
        <table id="tableServicesList" class="table table-list hidden">
            <thead>
                <tr>
                    <th></th>
                    <th>{$LANG.orderproduct}</th>
                    <th>{$LANG.clientareaaddonpricing}</th>
                    <th>{$LANG.clientareahostingnextduedate}</th>
                    <th>Kalan Gün</th>
                    <th>{$LANG.clientareastatus}</th>
                    <th class="responsive-edit-button" style="display: none;"></th>
                </tr>
            </thead>
            <tbody>
                {foreach key=num item=service from=$services}
                    {assign var="tarih3" value= $smarty.now|date_format:"%D"}
                    {assign var="tarih1" value= $tarih3|strtotime}
                    {assign var="tarih2" value= $service.normalisedNextDueDate|strtotime}
    
                    {if $service.billingcycle eq $LANG.orderpaymenttermmonthly}
                        {assign var="tarih5" value="-1 month"|strtotime:$tarih2}
                    {elseif $service.billingcycle eq $LANG.orderpaymenttermquarterly}
                        {assign var="tarih5" value="-3 month"|strtotime:$tarih2}
                    {elseif $service.billingcycle eq $LANG.orderpaymenttermsemiannually}
                        {assign var="tarih5" value="-6 month"|strtotime:$tarih2}
                    {elseif $service.billingcycle eq $LANG.orderpaymenttermannually}
                        {assign var="tarih5" value="-1 year"|strtotime:$tarih2}
                    {elseif $service.billingcycle eq $LANG.orderpaymenttermbiennially}
                        {assign var="tarih5" value="-2 year"|strtotime:$tarih2}
                    {elseif $service.billingcycle eq $LANG.orderpaymenttermtriennially}
                        {assign var="tarih5" value="-3 year"|strtotime:$tarih2}
                    {/if}
    
                    {assign var="tarih4" value=($tarih2 - $tarih5)/86400}
                    {assign var="kalantarih" value=($tarih2 - $tarih1)/86400}
                    {assign var="servisdurumu" value=$service.status|strtolower}          
                    {math assign="percentage" equation="(x / y) * 100" x=$kalantarih y=$tarih4 format="%d"}
                        
                    <tr onclick="clickableSafeRedirect(event, 'clientarea.php?action=productdetails&amp;id={$service.id}', false)">
                        <td class="text-center{if $service.sslStatus} ssl-info{/if}" data-element-id="{$service.id}" data-type="service"{if $service.domain} data-domain="{$service.domain}"{/if}>
                            {if $service.sslStatus}
                                <img src="{$service.sslStatus->getImagePath()}" data-toggle="tooltip" title="{$service.sslStatus->getTooltipContent()}" class="{$service.sslStatus->getClass()}"/>
                            {elseif !$service.isActive}
                                <img src="{$BASE_PATH_IMG}/ssl/ssl-inactive-domain.png" data-toggle="tooltip" title="{lang key='sslState.sslInactiveService'}">
                            {/if}
                        </td>
                        <td><strong>{$service.product}</strong>{if $service.domain}<br /><a href="http://{$service.domain}" target="_blank">{$service.domain}</a>{/if}</td>
                        <td class="text-center" data-order="{$service.amountnum}">{$service.amount}<br />{$service.billingcycle}</td>
                        <td class="text-center"><span class="hidden">{$service.normalisedNextDueDate}</span>{$service.nextduedate} <br></td>
                        <td class="text-center">
                            {if $service.billingcycle eq $LANG.orderpaymenttermonetime}
                                {$LANG.orderpaymenttermonetime}
                            {elseif $service.billingcycle eq $LANG.orderpaymenttermfreeaccount}
                                {$LANG.orderpaymenttermfreeaccount}
                            {elseif $servisdurumu neq 'active'}
                                {$service.statustext}  
                            {elseif $servisdurumu eq 'active'}
                                <div style="margin-bottom:0px !important; text-align:center !important;" class="progress">
                                  <div class="progress-bar" role="progressbar" style="width: {$percentage}%; display: inline-block; {if $percentage lt '34'} background-color: #d9534f !important;{/if}" aria-valuenow="{$percentage}" aria-valuemin="0" aria-valuemax="100"></div><span>{$kalantarih} gün</span>
                                </div>
                                {if $percentage lt '34'}<br>
                                <a style="font-size:11px; margin-top: -13px;" href="clientarea.php?action=productdetails&amp;id={$service.id}#extendTime" type="button" class="button btn btn-primary btn-default"><i class="fa fa-sync" aria-hidden="true"></i> Yenile</a>
                                {/if}
                            {/if}
                        </td>
                        <td class="text-center"><span class="label status status-{$service.status|strtolower}">{$service.statustext}</span></td>
                        <td class="responsive-edit-button" style="display: none;">
                            <a href="clientarea.php?action=productdetails&amp;id={$service.id}" class="btn btn-block btn-info">
                                {$LANG.manageproduct}
                            </a>
                        </td>
                    </tr>
                {/foreach}
            </tbody>
        </table>
        <div class="text-center" id="tableLoading">
            <p><i class="fas fa-spinner fa-spin"></i> {$LANG.loading}</p>
        </div>
    </div>
    Not: WHMCS 8.1 ve 7.10.2 de denenmiştir.

    Saygılarımla,
    Uğur Burak ARITAŞ.
  • 22-01-2021, 00:13:22
    #2
    Eline sağlık Uğurcum, tarafımca kullanılmakta
  • 14-02-2021, 17:18:52
    #3
    Kod güncellenmiştir.
    Tek seferlik ürünlerdeki hata giderilmiştir.


    Merhaba tekrardan,
    Kodu tekrardan güncelleyip progressbar ekledim. Bu sayede artık kalan günü bir durum çubuğu üzerinde görüntüleyebileceksiniz.
    Bu küçük kodu anormal bir şey olmadığı sürece tekrar güncellemeyi düşünmüyorum. Bu nedenle aynı gün iki güncelleme yayınlayarak final haline getirdim. Herkese iyi forumlar dilerim.
  • 14-02-2021, 20:41:24
    #4
    Güncelleme için teşekkürler, eline sağlık
  • 15-02-2021, 02:40:02
    #5
    Kullanmaya başladık, elinize sağlık paylaşım için teşekkürler hoş bir detay.
  • 16-02-2021, 00:12:41
    #6
    Üyeliği durduruldu
    ugrbrk adlı üyeden alıntı: mesajı görüntüle
    Merhabalar,

    Bir arkadaşım için az önce yaptığım, ürünün kalan gün sayısını gösteren kodu paylaşıyorum sizler ile.

    Kodu, templates/temaklasorunuz/clientareaproducts.tpl içindeki kod ile değişmelisiniz. (Temadan temaya çeşitli düzenlemeler olabileceğinden ötürü, yedek alınması ve verdiğim kodun muadili kod ile değişmesi gerekiyor.)



    Kod:
    {include file="$template/includes/tablelist.tpl" tableName="ServicesList" filterColumn="4" noSortColumns="0"}
    <script type="text/javascript">
        jQuery(document).ready( function ()
        {
            var table = jQuery('#tableServicesList').removeClass('hidden').DataTable();
            {if $orderby == 'product'}
                table.order([1, '{$sort}'], [4, 'asc']);
            {elseif $orderby == 'amount' || $orderby == 'billingcycle'}
                table.order(2, '{$sort}');
            {elseif $orderby == 'nextduedate'}
                table.order(3, '{$sort}');
            {elseif $orderby == 'domainstatus'}
                table.order(4, '{$sort}');
            {/if}
            table.draw();
            jQuery('#tableLoading').addClass('hidden');
        });
    </script>
    <div class="table-container clearfix">
        <table id="tableServicesList" class="table table-list hidden">
            <thead>
                <tr>
                    <th></th>
                    <th>{$LANG.orderproduct}</th>
                    <th>{$LANG.clientareaaddonpricing}</th>
                    <th>{$LANG.clientareahostingnextduedate}</th>
                    <th>Kalan Gün</th>
                    <th>{$LANG.clientareastatus}</th>
                    <th class="responsive-edit-button" style="display: none;"></th>
                </tr>
            </thead>
            <tbody>
                {foreach key=num item=service from=$services}
                {assign var="tarih3" value= $smarty.now|date_format:"%D"}
                {assign var="tarih1" value= $tarih3|strtotime}
                {assign var="tarih2" value= $service.normalisedNextDueDate|strtotime}
                {assign var="tarih4" value= $service.regdate|strtotime}
                {assign var="toplamsure" value=$tarih2 - $tarih4}
                {assign var="kalantarih" value=$tarih2 - $tarih1}
                {assign var="kalantarih_normal" value=$kalantarih/(60*60*24)}
                {assign var="toplamsure_normal" value=$toplamsure/(60*60*24)}          
                {math assign="percentage" equation="(x / y) * 100" x=$kalantarih_normal y=$toplamsure_normal format="%.2f"}        
    
                    <tr onclick="clickableSafeRedirect(event, 'clientarea.php?action=productdetails&amp;id={$service.id}', false)">
                        <td class="text-center{if $service.sslStatus} ssl-info{/if}" data-element-id="{$service.id}" data-type="service"{if $service.domain} data-domain="{$service.domain}"{/if}>
                            {if $service.sslStatus}
                                <img src="{$service.sslStatus->getImagePath()}" data-toggle="tooltip" title="{$service.sslStatus->getTooltipContent()}" class="{$service.sslStatus->getClass()}"/>
                            {elseif !$service.isActive}
                                <img src="{$BASE_PATH_IMG}/ssl/ssl-inactive-domain.png" data-toggle="tooltip" title="{lang key='sslState.sslInactiveService'}">
                            {/if}
                        </td>
                        <td><strong>{$service.product}</strong>{if $service.domain}<br /><a rel="nofollow" href="http://{$service.domain}" target="_blank">{$service.domain}</a>{/if}</td>
                        <td class="text-center" data-order="{$service.amountnum}">{$service.amount}<br />{$service.billingcycle}</td>
                        <td class="text-center"><span class="hidden">{$service.normalisedNextDueDate}</span>{$service.nextduedate}</td>
                        <td class="text-center">
                            {if $service.billingcycle eq $LANG.orderpaymenttermonetime}
                                {$LANG.orderpaymenttermonetime}
                            {else}
                                <div style="margin-bottom:0px !important;" class="progress">
                                  <div class="progress-bar" role="progressbar" style="width: {$percentage}%" aria-valuenow="{$percentage}" aria-valuemin="0" aria-valuemax="100">{$kalantarih/(60*60*24)} gün</div>
                                </div>
                            {/if}
                        </td>
                        <td class="text-center"><span class="label status status-{$service.status|strtolower}">{$service.statustext}</span></td>
                        <td class="responsive-edit-button" style="display: none;">
                            <a rel="nofollow" href="clientarea.php?action=productdetails&amp;id={$service.id}" class="btn btn-block btn-info">
                                {$LANG.manageproduct}
                            </a>
                        </td>
                    </tr>
                {/foreach}
            </tbody>
        </table>
        <div class="text-center" id="tableLoading">
            <p><i class="fas fa-spinner fa-spin"></i> {$LANG.loading}</p>
        </div>
    </div>
    
    v>
    Not: WHMCS 8.1 ve 7.10.2 de denenmiştir.

    Yeni eklediğim barda toplam süre üzerinden yüzde aldığım için ürünün oluşturulma tarihine gerek duyuluyor. Bunu da veri tabanından çekmek için aşağıdaki kodu bir php dosyasının içine kaydedip o dosyayı /includes/hooks/ içine atmalısınız.
    <?php
    
    use WHMCS\Database\Capsule;
    
    function clients_services_add_regdate_hook($vars) {
    
        $client = Menu::context('client');
        $services = $vars['services'];
        foreach($services as $key => $service) {
            $regdate = Capsule::table('tblhosting')->where('userid',$client->id)->where('id',$service['id'])->value('regdate');
            if ($regdate) {
                $services[$key]['regdate'] = $regdate;
            }
        }    
        return array("services" => $services);
    }
    add_hook("ClientAreaPageProductsServices", 1, "clients_services_add_regdate_hook");
    ?>
    Saygılarımla,
    Uğur Burak ARITAŞ.
    Kesinlikle başarılı, ellerine sağlık
    Kullanacağım şimdi
  • 16-02-2021, 10:06:05
    #7


    ücretsiz hesaplara bişey yapabiliyormuyuz acep





    ugrbrk adlı üyeden alıntı: mesajı görüntüle
    Kod güncellenmiştir.
    Tek seferlik ürünlerdeki hata giderilmiştir.


    Merhaba tekrardan,
    Kodu tekrardan güncelleyip progressbar ekledim. Bu sayede artık kalan günü bir durum çubuğu üzerinde görüntüleyebileceksiniz.
    Bu küçük kodu anormal bir şey olmadığı sürece tekrar güncellemeyi düşünmüyorum. Bu nedenle aynı gün iki güncelleme yayınlayarak final haline getirdim. Herkese iyi forumlar dilerim.
  • 16-02-2021, 12:44:58
    #8
    Ordubilisim adlı üyeden alıntı: mesajı görüntüle


    ücretsiz hesaplara bişey yapabiliyormuyuz acep

    Kodu tekrardan güncelliyorum.
    - Tek seferlik ve ücretsiz hesap ürünlerinde bar yerine isimler yazıyor.
    - Kalan gün barındaki "xxx gün" kısmında, barın %'si azaldıkça günler görünmeme sorunu çözüldü. Arka plan beyaz olduğundan dolayı yazıyı siyah yaptım. CSS düzenlemelerini siz yapabilirsiniz, boostrap progress bar zaten.

    Küçük ekleme:
    - Durumu aktif olmasa bile, sayaç ve bar gözüktüğü için sorunlu sayıların gözükme durumunu şimdi farkettim. Kodu tekrardan düzelttim. Sadece ürün durumu "Aktif" olanlarda gözükmekte.
  • 16-02-2021, 13:44:36
    #9
    Üyeliği durduruldu
    https://prnt.sc/zpvh5c

    Yazıları nereden çekiyor, bu şekilde bir hata vermekte. Türkçe olduğu halde neden ? olarak çıkıyor.