XF 2.2 Modification info block resources?

Версия XenForo
2.2.13

senaidh

Участники
Сообщения
16
Реакции
0
Баллы
8
Modification info block resources?

Hi friends, I have a question, thank you for your help.

how to get this look of the resource, look at the picture

like and help on ( if you can help )

thank you
 

Вложения

  • Screenshot 2025.png
    Screenshot 2025.png
    10.1 KB · Просмотры: 40
Модификация шаблона xfrm_resource_view
Ключ: Придумайте
Тип поиска: Простая замена
Найти:
HTML:
                    <div class="resourceSidebarGroup">
                        <dl class="pairs pairs--justified">
                            <dt>{{ phrase('author') }}</dt>
                            <dd><xf:username user="{$resource.User}" defaultname="{$resource.username}" /></dd>
                        </dl>
                        <xf:if is="$resource.isDownloadable()">
                            <dl class="pairs pairs--justified">
                                <dt>{{ phrase('xfrm_downloads') }}</dt>
                                <dd>{$resource.download_count|number}</dd>
                            </dl>
                        </xf:if>
                        <dl class="pairs pairs--justified">
                            <dt>{{ phrase('views') }}</dt>
                            <dd>{{ max($resource.view_count, $resource.download_count, 1)|number }}</dd>
                        </dl>
                        <dl class="pairs pairs--justified">
                            <dt>{{ phrase('xfrm_first_release') }}</dt>
                            <dd><xf:date time="{$resource.resource_date}" /></dd>
                        </dl>
                        <dl class="pairs pairs--justified">
                            <dt>{{ phrase('xfrm_last_update') }}</dt>
                            <dd><xf:date time="{$resource.last_update}" /></dd>
                        </dl>
                        <dl class="pairs pairs--justified">
                            <dt>{{ phrase('rating') }}</dt>
                            <dd>
                                <xf:macro template="rating_macros" name="stars_text"
                                    arg-rating="{$resource.rating_avg}"
                                    arg-count="{$resource.rating_count}"
                                    arg-rowClass="ratingStarsRow--textBlock" />
                            </dd>
                        </dl>
                    </div>
Заменить:
HTML:
                    <div class="resourceSidebarGroup">
                        <dl class="pairs pairs--justified">
                            <dt>{{ phrase('author') }}</dt>
                            <dd><xf:username user="{$resource.User}" defaultname="{$resource.username}" /></dd>
                        </dl>
                    </div>
                  
                    <div class="resourceStatsBlock">
                        <div class="resourceBlockGroup">
                            <div class="resourceInfoBlock">
                                <span class="resource-data">{$resource.CurrentVersion.version_string}</span>
                                <span class="resource-title">{{ phrase('xfrm_version') }}</span>
                            </div>
                            <xf:if is="$resource.isDownloadable()">
                            <div class="resourceInfoBlock">
                                <span class="resource-data">{$resource.download_count|number}</span>
                                <span class="resource-title">{{ phrase('xfrm_downloads') }}</span>
                            </div>
                            </xf:if>
                            <div class="resourceInfoBlock">
                                <span class="resource-data">{{ max($resource.view_count, $resource.download_count, 1)|number }}</span>
                                <span class="resource-title">{{ phrase('views') }}</span>
                            </div>
                        </div>
                        <div class="resourceBlockGroup">
                            <div class="resourceInfoBlock">
                                <xf:macro template="rating_macros" name="stars_text"
                                   arg-rating="{$resource.rating_avg}"
                                   arg-count="{$resource.rating_count}"
                                   arg-rowClass="ratingStarsRow--textBlock" />
                            </div>
                            <div class="resourceInfoBlock">
                                <span class="resource-data"><xf:date time="{$resource.last_update}" /></span>
                                   <span class="resource-title">{{ phrase('last_updated') }}</span>
                            </div>
                        </div>
                    </div>
Добавьте код в шаблон extra.less
Less:
.resourceBody-sidebar
{
    width: 325px;
  
    .resourceStatsBlock
    {
        display: flex;
        flex-direction: column;
        gap: 0.5rem;
        padding: 10px;
        border-radius: 5px;
  
        .resourceBlockGroup
        {
            display: flex;
            gap: 10px;
            flex-wrap: nowrap;
      
            .resourceInfoBlock
            {
                padding: 10px;
                border-radius: 3px;
                width: 100%;
                text-align: center;
                border: 1px solid #e5e9ec;
          
                > .resource-data
                {
                    font-size: 14px;
                    font-weight: 500;
                }
          
                > .resource-title
                {
                    font-weight: 400;
                }
          
                > span
                {
                    display: block;
                }
            }
        }
    }
}
1739905363025.png
 
Последнее редактирование:
Всю голову уже сломал, не применяется модификация и все тут... другие пробовла отключать с этим шаблоном, все равно

Конфликс с плагином [OzzModz] XFRM File Extension And Size Display
 
Последнее редактирование:
Конфликс с плагином [OzzModz] XFRM File Extension And Size Display
Отключите модификацию, которую делает плагин. В поле заменить замените на этот код
HTML:
                    <div class="resourceSidebarGroup">
                        <dl class="pairs pairs--justified">
                            <dt>{{ phrase('author') }}</dt>
                            <dd><xf:username user="{$resource.User}" defaultname="{$resource.username}" /></dd>
                        </dl>
                    </div>
                   
                    <div class="resourceStatsBlock">
                        <div class="resourceBlockGroup">
                            <div class="resourceInfoBlock">
                                <span class="resource-data">{$resource.CurrentVersion.version_string}</span>
                                <span class="resource-title">{{ phrase('xfrm_version') }}</span>
                            </div>
                            <div class="resourceInfoBlock">
                                <span class="resource-data">{$resource.download_count|number}</span>
                                <span class="resource-title">{{ phrase('xfrm_downloads') }}</span>
                            </div>
                            <div class="resourceInfoBlock">
                                <span class="resource-data">{{ max($resource.view_count, $resource.download_count, 1)|number }}</span>
                                <span class="resource-title">{{ phrase('views') }}</span>
                            </div>
                        </div>
                        <xf:if is="count($resource.CurrentVersion.Attachments) == 1">
                            <div class="resourceBlockGroup">
                                <xf:set var="$attachment" value="{{ $resource.CurrentVersion.Attachments|first }}" />
                                <div class="resourceInfoBlock">
                                    <span class="resource-data">{{ $attachment.getExtension() }}</span>
                                    <span class="resource-title">{{ phrase('extensionsize_extention_type') }}</span>
                                </div>
                                <div class="resourceInfoBlock">
                                    <span class="resource-data">{{ $attachment.getFileSize()|file_size }}</span>
                                    <span class="resource-title">{{ phrase('extensionsize_file_size') }}</span>
                                </div>
                            </div>
                            <div class="resourceBlockGroup">
                                <div class="resourceInfoBlock">
                                    <span class="resource-data" data-xf-init="tooltip" title="{{ $attachment.Data.file_hash }}" style="cursor: pointer;"><a>{{ $attachment.Data.file_hash }}</a></span>
                                    <span class="resource-title">{{ phrase('ozzmodzExtensionSize_hash') }}</span>
                                </div>
                            </div>
                        </xf:if>
                        <div class="resourceBlockGroup">
                            <div class="resourceInfoBlock">
                                <xf:macro template="rating_macros" name="stars_text"
                                   arg-rating="{$resource.rating_avg}"
                                   arg-count="{$resource.rating_count}"
                                   arg-rowClass="ratingStarsRow--textBlock" />
                            </div>
                            <div class="resourceInfoBlock">
                                <span class="resource-data"><xf:date time="{$resource.last_update}" /></span>
                                   <span class="resource-title">{{ phrase('last_updated') }}</span>
                            </div>
                        </div>
                    </div>
 

Вложения

  • изображение_2025-02-19_163706308.png
    изображение_2025-02-19_163706308.png
    29.4 KB · Просмотры: 28
Последнее редактирование:
this my orginal cod

HTML:
<xf:title>{$resource.title}</xf:title>

<xf:set var="$descSnippet" value="{{ snippet($description.message, 250, {'stripBbCode': true}) }}" />

<xf:macro template="metadata_macros" name="metadata"
    arg-description="{$descSnippet}"
    arg-shareUrl="{{ link('canonical:resources', $resource) }}"
    arg-canonicalUrl="{{ link('canonical:resources', $resource) }}" />


<xf:page option="ldJsonHtml">
    <script type="application/ld+json">
    {
        "@context": "https://schema.org",
        "@type": "CreativeWork",
        "@id": "{{ link('canonical:resources', $resource)|escape('json') }}",
        "name": "{$resource.title|escape('json')}",
        "headline": "{$resource.title|escape('json')}",
        "alternativeHeadline": "{$resource.tag_line|escape('json')}",
        "description": "{$descSnippet|escape('json')}",
        <xf:if is="$resource.isVersioned()">
            "version": "{$resource.CurrentVersion.version_string|escape('json')}",
        </xf:if>
        <xf:if is="$xf.options.xfrmAllowIcons AND $resource.icon_date">
            "thumbnailUrl": "{{ $resource.getIconUrl('s', true)|escape('json') }}",
        </xf:if>
        "dateCreated": "{{ date($resource.resource_date, 'c')|escape('json') }}",
        "dateModified": "{{ date($resource.last_update, 'c')|escape('json') }}",
        <xf:if is="$resource.rating_count">"aggregateRating": {
            "@type": "AggregateRating",
            "ratingCount": "{$resource.rating_count|escape('json')}",
            "ratingValue": "{$resource.rating_avg|escape('json')}"
        },</xf:if>
        <xf:if is="$resource.hasViewableDiscussion()">
            "discussionUrl": "{{ link('canonical:threads', $resource.Discussion)|escape('json') }}",
        </xf:if>
        "author": {
            "@type": "Person",
            "name": "{{ ($resource.User ? $resource.User.username : $resource.username)|escape('json') }}"
        }
    }
    </script>
</xf:page>

<xf:if is="$iconError">
    <div class="blockMessage blockMessage--error">{{ phrase('xfrm_new_icon_could_not_be_applied_try_later') }}</div>
</xf:if>

<xf:wrap template="xfrm_resource_wrapper">
    <xf:set var="$pageSelected" value="overview" />
</xf:wrap>

<xf:macro template="lightbox_macros" name="setup" arg-canViewAttachments="{{ $resource.canViewUpdateImages() }}" />

<div class="block">
    <xf:if contentcheck="true">
        <div class="block-outer">
            <div class="block-outer-opposite">
            <xf:contentcheck>
                <xf:macro template="xfrm_resource_wrapper_macros" name="action_buttons" arg-resource="{$resource}" />
            </xf:contentcheck>
            </div>
        </div>
    </xf:if>
    <div class="block-container">
        <div class="block-body lbContainer js-resourceBody"
            data-xf-init="lightbox"
            data-lb-id="resource-{$resource.resource_id}"
            data-lb-caption-desc="{{ $resource.User ? $resource.User.username : $resource.username }} &middot; {{ date_time($resource.resource_date) }}">

            <div class="resourceBody">
                <article class="resourceBody-main js-lbContainer">
                    <xf:macro template="custom_fields_macros" name="custom_fields_view"
                        arg-type="resources"
                        arg-group="above_info"
                        arg-onlyInclude="{$category.field_cache}"
                        arg-set="{$resource.custom_fields}"
                        arg-wrapperClass="resourceBody-fields resourceBody-fields--before" />

                    <xf:if is="$trimmedDescription">
                        {{ bb_code($trimmedDescription, 'resource_update', $description) }}

                        <div class="block-rowMessage block-rowMessage--important">
                            {{ phrase('xfrm_do_not_have_permission_to_view_full_content_of_this_resource') }}
                            <xf:if is="!$xf.visitor.user_id">
                                <a href="{{ link('login') }}" data-xf-click="overlay">{{ phrase('log_in_or_register_now') }}</a>
                            </xf:if>
                        </div>
                    <xf:else />
                        {{ bb_code($description.message, 'resource_update', $description) }}
                    </xf:if>

                    <xf:macro template="custom_fields_macros" name="custom_fields_view"
                        arg-type="resources"
                        arg-group="below_info"
                        arg-onlyInclude="{$category.field_cache}"
                        arg-set="{$resource.custom_fields}"
                        arg-wrapperClass="resourceBody-fields resourceBody-fields--after" />

                    <xf:if is="$description.attach_count">
                        <xf:if contentcheck="true">
                            <xf:css src="attachments.less" />
                            <ul class="attachmentList resourceBody-attachments">
                                <xf:contentcheck>
                                    <xf:foreach loop="$description.Attachments" value="$attachment" if="!$description.isAttachmentEmbedded($attachment)">
                                        <xf:macro template="attachment_macros" name="attachment_list_item"
                                            arg-attachment="{$attachment}"
                                            arg-canView="{{ $resource.canViewUpdateImages() }}" />
                                    </xf:foreach>
                                </xf:contentcheck>
                            </ul>
                        </xf:if>
                    </xf:if>

                    <xf:if contentcheck="true">
                        <div class="actionBar">
                            <xf:contentcheck>
                                <xf:if contentcheck="true">
                                    <div class="actionBar-set actionBar-set--external">
                                    <xf:contentcheck>
                                        <xf:react content="{$description}" link="resources/update/react" list="< .js-resourceBody | .js-reactionsList" />
                                    </xf:contentcheck>
                                    </div>
                                </xf:if>

                                <xf:if contentcheck="true">
                                    <div class="actionBar-set actionBar-set--internal">
                                    <xf:contentcheck>
                                        <xf:if is="$description.canReport()">
                                            <a href="{{ link('resources/update/report', $description) }}"
                                                class="actionBar-action actionBar-action--report" data-xf-click="overlay">{{ phrase('report_verb') }}</a>
                                        </xf:if>

                                        <xf:set var="$hasActionBarMenu" value="{{ false }}" />
                                        <xf:if is="$resource.canEdit()">
                                            <a href="{{ link('resources/edit', $resource) }}"
                                                class="actionBar-action actionBar-action--edit actionBar-action--menuItem">{{ phrase('edit') }}</a>
                                            <xf:set var="$hasActionBarMenu" value="{{ true }}" />
                                        </xf:if>
                                        <xf:if is="$description.edit_count && $description.canViewHistory()">
                                            <a href="{{ link('resources/update/history', $description) }}"
                                                class="actionBar-action actionBar-action--history actionBar-action--menuItem"
                                                data-xf-click="toggle"
                                                data-target="< .js-resourceBody | .js-historyTarget"
                                                data-menu-closer="true">{{ phrase('history') }}</a>

                                            <xf:set var="$hasActionBarMenu" value="{{ true }}" />
                                        </xf:if>
                                        <xf:if is="$description.canDelete('soft')">
                                            <a href="{{ link('resources/delete', $description) }}"
                                                class="actionBar-action actionBar-action--delete actionBar-action--menuItem"
                                                data-xf-click="overlay">{{ phrase('delete') }}</a>
                                            <xf:set var="$hasActionBarMenu" value="{{ true }}" />
                                        </xf:if>
                                        <xf:if is="$xf.visitor.canViewIps() && $description.ip_id">
                                            <a href="{{ link('resources/update/ip', $description) }}"
                                                class="actionBar-action actionBar-action--ip actionBar-action--menuItem"
                                                data-xf-click="overlay">{{ phrase('ip') }}</a>
                                            <xf:set var="$hasActionBarMenu" value="{{ true }}" />
                                        </xf:if>
                                        <xf:if is="$description.canWarn()">
                                            <a href="{{ link('resources/update/warn', $description) }}"
                                                class="actionBar-action actionBar-action--warn actionBar-action--menuItem">{{ phrase('warn') }}</a>
                                            <xf:set var="$hasActionBarMenu" value="{{ true }}" />
                                        <xf:elseif is="$description.warning_id && $xf.visitor.canViewWarnings()" />
                                            <a href="{{ link('warnings', {'warning_id': $description.warning_id}) }}"
                                                class="actionBar-action actionBar-action--warn actionBar-action--menuItem"
                                                data-xf-click="overlay">{{ phrase('view_warning') }}</a>
                                            <xf:set var="$hasActionBarMenu" value="{{ true }}" />
                                        </xf:if>

                                        <xf:if is="$hasActionBarMenu">
                                            <a class="actionBar-action actionBar-action--menuTrigger"
                                                data-xf-click="menu"
                                                title="{{ phrase('more_options')|for_attr }}"
                                                role="button"
                                                tabindex="0"
                                                aria-expanded="false"
                                                aria-haspopup="true">&#8226;&#8226;&#8226;</a>

                                            <div class="menu" data-menu="menu" aria-hidden="true" data-menu-builder="actionBar">
                                                <div class="menu-content">
                                                    <h4 class="menu-header">{{ phrase('more_options') }}</h4>
                                                    <div class="js-menuBuilderTarget"></div>
                                                </div>
                                            </div>
                                        </xf:if>
                                    </xf:contentcheck>
                                    </div>
                                </xf:if>
                            </xf:contentcheck>
                        </div>
                    </xf:if>

                    <div class="reactionsBar js-reactionsList {{ $description.reactions ? 'is-active' : '' }}">
                        <xf:reactions content="{$description}" link="resources/update/reactions" />
                    </div>

                    <xf:if is="$description.edit_count && $description.canViewHistory()">
                        <div class="js-historyTarget toggleTarget" data-href="trigger-href"></div>
                    </xf:if>
                </article>

                <div class="resourceBody-sidebar">
                    <div class="resourceSidebarGroup">
                        <dl class="pairs pairs--justified">
                            <dt>{{ phrase('author') }}</dt>
                            <dd><xf:username user="{$resource.User}" defaultname="{$resource.username}" /></dd>
                        </dl>
                        <xf:if is="$resource.isDownloadable()">
                            <dl class="pairs pairs--justified">
                                <dt>{{ phrase('xfrm_downloads') }}</dt>
                                <dd>{$resource.download_count|number}</dd>
                            </dl>
                        </xf:if>
                        <dl class="pairs pairs--justified">
                            <dt>{{ phrase('views') }}</dt>
                            <dd>{{ max($resource.view_count, $resource.download_count, 1)|number }}</dd>
                        </dl>
                        <dl class="pairs pairs--justified">
                            <dt>{{ phrase('xfrm_first_release') }}</dt>
                            <dd><xf:date time="{$resource.resource_date}" /></dd>
                        </dl>
                        <dl class="pairs pairs--justified">
                            <dt>{{ phrase('xfrm_last_update') }}</dt>
                            <dd><xf:date time="{$resource.last_update}" /></dd>
                        </dl>
                        <dl class="pairs pairs--justified">
                            <dt>{{ phrase('rating') }}</dt>
                            <dd>
                                <xf:macro template="rating_macros" name="stars_text"
                                    arg-rating="{$resource.rating_avg}"
                                    arg-count="{$resource.rating_count}"
                                    arg-rowClass="ratingStarsRow--textBlock" />
                            </dd>
                        </dl>
                    </div>

                    <xf:if contentcheck="true">
                        <div class="resourceSidebarGroup resourceSidebarGroup--buttons">
                            <xf:contentcheck>
                                <xf:if is="$resource.hasViewableDiscussion()">
                                    <xf:button href="{{ link('threads', $resource.Discussion) }}" class="button--fullWidth">{{ phrase('xfrm_join_discussion') }}</xf:button>
                                </xf:if>

                                <xf:if is="$resource.external_url">
                                    <xf:button href="{$resource.external_url}" class="button--link button--fullWidth">{{ phrase('xfrm_more_information') }}</xf:button>
                                </xf:if>

                                <xf:if is="$resource.alt_support_url AND $resource.Category.enable_support_url">
                                    <xf:button href="{$resource.alt_support_url}" class="button--link button--fullWidth">{{ phrase('xfrm_get_support') }}</xf:button>
                                </xf:if>
                            </xf:contentcheck>
                        </div>
                    </xf:if>


                    <xf:if is="$resource.canViewTeamMembers() && $teamMembers is not empty">
                        <div class="resourceSidebarGroup">
                            <h4 class="resourceSidebarGroup-title">
                                <xf:if is="$resource.canManageTeamMembers()">
                                    <a href="{{ link('resources/manage-team', $resource) }}" data-xf-click="overlay">
                                        {{ phrase('xfrm_resource_team') }}
                                    </a>
                                <xf:else />
                                        {{ phrase('xfrm_resource_team') }}
                                </xf:if>
                            </h4>

                            <ul class="resourceSidebarList">
                                <xf:foreach loop="$teamMembers" value="$teamMember">
                                    <li>
                                        <div class="contentRow">
                                            <div class="contentRow-figure">
                                                <xf:avatar user="$teamMember.User" size="xxs" />
                                            </div>

                                            <div class="contentRow-main contentRow-main--close">
                                                <xf:username user="$teamMember.User" rich="true" />
                                                <div class="contentRow-minor">
                                                    <xf:usertitle user="$teamMember.User" />
                                                </div>
                                            </div>
                                        </div>
                                    </li>
                                </xf:foreach>
                            </ul>
                        </div>
                    </xf:if>

                    <xf:if is="$authorOthers is not empty">
                        <div class="resourceSidebarGroup">
                            <h4 class="resourceSidebarGroup-title">
                                <a href="{{ link('resources/authors', $resource.User) }}">{{ phrase('xfrm_more_resources_from_x', {'name': $resource.User.username}) }}</a>
                            </h4>
                            <ul class="resourceSidebarList">
                            <xf:foreach loop="$authorOthers" value="$authorOther">
                                <li>
                                    <xf:macro template="xfrm_resource_list_macros" name="resource_simple"
                                        arg-resource="{$authorOther}"
                                        arg-withMeta="{{ false }}" />
                                </li>
                            </xf:foreach>
                            </ul>
                        </div>
                    </xf:if>

                    <xf:if contentcheck="true">
                        <div class="resourceSidebarGroup">
                            <h4 class="resourceSidebarGroup-title">{{ phrase('xfrm_share_this_resource') }}</h4>
                            <xf:contentcheck>
                                <xf:macro template="share_page_macros" name="buttons" arg-iconic="{{ true }}" />
                            </xf:contentcheck>
                        </div>
                    </xf:if>
                </div>
            </div>
        </div>
    </div>
</div>

<xf:if is="$latestUpdates is not empty">
    <div class="block">
        <div class="block-container">
            <h3 class="block-header">{{ phrase('xfrm_latest_updates') }}</h3>
            <ol class="block-body">
            <xf:foreach loop="$latestUpdates" value="$update">
                <li class="block-row block-row--separated">
                    <h3 class="block-textHeader">
                        <a href="{{ link('resources/update', $update) }}">{$update.title}</a>
                    </h3>
                    <div>{{ snippet($update.message, 100, {'stripBbCode': true}) }}</div>
            </xf:foreach>
            </ol>
            <div class="block-footer">
                <span class="block-footer-controls"><xf:button class="button--link" href="{{ link('resources/updates', $resource) }}">{{ phrase('xfrm_read_more...') }}</xf:button></span>
            </div>
        </div>
    </div>
</xf:if>

<xf:if is="$latestReviews is not empty">
    <div class="block">
        <div class="block-container">
            <h3 class="block-header">{{ phrase('xfrm_latest_reviews') }}</h3>
            <div class="block-body">
            <xf:foreach loop="$latestReviews" value="$review">
                <xf:macro template="xfrm_resource_review_macros" name="review"
                    arg-review="{$review}"
                    arg-resource="{$resource}" />
            </xf:foreach>
            </div>
            <div class="block-footer">
                <span class="block-footer-controls"><xf:button class="button--link" href="{{ link('resources/reviews', $resource) }}">{{ phrase('xfrm_read_more...') }}</xf:button></span>
            </div>
        </div>
    </div>
</xf:if>

after add this

HTML:
<xf:title>{$resource.title}</xf:title>

<xf:set var="$descSnippet" value="{{ snippet($description.message, 250, {'stripBbCode': true}) }}" />

<xf:macro template="metadata_macros" name="metadata"
    arg-description="{$descSnippet}"
    arg-shareUrl="{{ link('canonical:resources', $resource) }}"
    arg-canonicalUrl="{{ link('canonical:resources', $resource) }}" />


<xf:page option="ldJsonHtml">
    <script type="application/ld+json">
    {
        "@context": "https://schema.org",
        "@type": "CreativeWork",
        "@id": "{{ link('canonical:resources', $resource)|escape('json') }}",
        "name": "{$resource.title|escape('json')}",
        "headline": "{$resource.title|escape('json')}",
        "alternativeHeadline": "{$resource.tag_line|escape('json')}",
        "description": "{$descSnippet|escape('json')}",
        <xf:if is="$resource.isVersioned()">
            "version": "{$resource.CurrentVersion.version_string|escape('json')}",
        </xf:if>
        <xf:if is="$xf.options.xfrmAllowIcons AND $resource.icon_date">
            "thumbnailUrl": "{{ $resource.getIconUrl('s', true)|escape('json') }}",
        </xf:if>
        "dateCreated": "{{ date($resource.resource_date, 'c')|escape('json') }}",
        "dateModified": "{{ date($resource.last_update, 'c')|escape('json') }}",
        <xf:if is="$resource.rating_count">"aggregateRating": {
            "@type": "AggregateRating",
            "ratingCount": "{$resource.rating_count|escape('json')}",
            "ratingValue": "{$resource.rating_avg|escape('json')}"
        },</xf:if>
        <xf:if is="$resource.hasViewableDiscussion()">
            "discussionUrl": "{{ link('canonical:threads', $resource.Discussion)|escape('json') }}",
        </xf:if>
        "author": {
            "@type": "Person",
            "name": "{{ ($resource.User ? $resource.User.username : $resource.username)|escape('json') }}"
        }
    }
    </script>
</xf:page>

<xf:if is="$iconError">
    <div class="blockMessage blockMessage--error">{{ phrase('xfrm_new_icon_could_not_be_applied_try_later') }}</div>
</xf:if>

<xf:wrap template="xfrm_resource_wrapper">
    <xf:set var="$pageSelected" value="overview" />
</xf:wrap>

<xf:macro template="lightbox_macros" name="setup" arg-canViewAttachments="{{ $resource.canViewUpdateImages() }}" />

<div class="block">
    <xf:if contentcheck="true">
        <div class="block-outer">
            <div class="block-outer-opposite">
            <xf:contentcheck>
                <xf:macro template="xfrm_resource_wrapper_macros" name="action_buttons" arg-resource="{$resource}" />
            </xf:contentcheck>
            </div>
        </div>
    </xf:if>
    <div class="block-container">
        <div class="block-body lbContainer js-resourceBody"
            data-xf-init="lightbox"
            data-lb-id="resource-{$resource.resource_id}"
            data-lb-caption-desc="{{ $resource.User ? $resource.User.username : $resource.username }} &middot; {{ date_time($resource.resource_date) }}">

            <div class="resourceBody">
                <article class="resourceBody-main js-lbContainer">
                    <xf:macro template="custom_fields_macros" name="custom_fields_view"
                        arg-type="resources"
                        arg-group="above_info"
                        arg-onlyInclude="{$category.field_cache}"
                        arg-set="{$resource.custom_fields}"
                        arg-wrapperClass="resourceBody-fields resourceBody-fields--before" />

                    <xf:if is="$trimmedDescription">
                        {{ bb_code($trimmedDescription, 'resource_update', $description) }}

                        <div class="block-rowMessage block-rowMessage--important">
                            {{ phrase('xfrm_do_not_have_permission_to_view_full_content_of_this_resource') }}
                            <xf:if is="!$xf.visitor.user_id">
                                <a href="{{ link('login') }}" data-xf-click="overlay">{{ phrase('log_in_or_register_now') }}</a>
                            </xf:if>
                        </div>
                    <xf:else />
                        {{ bb_code($description.message, 'resource_update', $description) }}
                    </xf:if>

                    <xf:macro template="custom_fields_macros" name="custom_fields_view"
                        arg-type="resources"
                        arg-group="below_info"
                        arg-onlyInclude="{$category.field_cache}"
                        arg-set="{$resource.custom_fields}"
                        arg-wrapperClass="resourceBody-fields resourceBody-fields--after" />

                    <xf:if is="$description.attach_count">
                        <xf:if contentcheck="true">
                            <xf:css src="attachments.less" />
                            <ul class="attachmentList resourceBody-attachments">
                                <xf:contentcheck>
                                    <xf:foreach loop="$description.Attachments" value="$attachment" if="!$description.isAttachmentEmbedded($attachment)">
                                        <xf:macro template="attachment_macros" name="attachment_list_item"
                                            arg-attachment="{$attachment}"
                                            arg-canView="{{ $resource.canViewUpdateImages() }}" />
                                    </xf:foreach>
                                </xf:contentcheck>
                            </ul>
                        </xf:if>
                    </xf:if>

                    <xf:if contentcheck="true">
                        <div class="actionBar">
                            <xf:contentcheck>
                                <xf:if contentcheck="true">
                                    <div class="actionBar-set actionBar-set--external">
                                    <xf:contentcheck>
                                        <xf:react content="{$description}" link="resources/update/react" list="< .js-resourceBody | .js-reactionsList" />
                                    </xf:contentcheck>
                                    </div>
                                </xf:if>

                                <xf:if contentcheck="true">
                                    <div class="actionBar-set actionBar-set--internal">
                                    <xf:contentcheck>
                                        <xf:if is="$description.canReport()">
                                            <a href="{{ link('resources/update/report', $description) }}"
                                                class="actionBar-action actionBar-action--report" data-xf-click="overlay">{{ phrase('report_verb') }}</a>
                                        </xf:if>

                                        <xf:set var="$hasActionBarMenu" value="{{ false }}" />
                                        <xf:if is="$resource.canEdit()">
                                            <a href="{{ link('resources/edit', $resource) }}"
                                                class="actionBar-action actionBar-action--edit actionBar-action--menuItem">{{ phrase('edit') }}</a>
                                            <xf:set var="$hasActionBarMenu" value="{{ true }}" />
                                        </xf:if>
                                        <xf:if is="$description.edit_count && $description.canViewHistory()">
                                            <a href="{{ link('resources/update/history', $description) }}"
                                                class="actionBar-action actionBar-action--history actionBar-action--menuItem"
                                                data-xf-click="toggle"
                                                data-target="< .js-resourceBody | .js-historyTarget"
                                                data-menu-closer="true">{{ phrase('history') }}</a>

                                            <xf:set var="$hasActionBarMenu" value="{{ true }}" />
                                        </xf:if>
                                        <xf:if is="$description.canDelete('soft')">
                                            <a href="{{ link('resources/delete', $description) }}"
                                                class="actionBar-action actionBar-action--delete actionBar-action--menuItem"
                                                data-xf-click="overlay">{{ phrase('delete') }}</a>
                                            <xf:set var="$hasActionBarMenu" value="{{ true }}" />
                                        </xf:if>
                                        <xf:if is="$xf.visitor.canViewIps() && $description.ip_id">
                                            <a href="{{ link('resources/update/ip', $description) }}"
                                                class="actionBar-action actionBar-action--ip actionBar-action--menuItem"
                                                data-xf-click="overlay">{{ phrase('ip') }}</a>
                                            <xf:set var="$hasActionBarMenu" value="{{ true }}" />
                                        </xf:if>
                                        <xf:if is="$description.canWarn()">
                                            <a href="{{ link('resources/update/warn', $description) }}"
                                                class="actionBar-action actionBar-action--warn actionBar-action--menuItem">{{ phrase('warn') }}</a>
                                            <xf:set var="$hasActionBarMenu" value="{{ true }}" />
                                        <xf:elseif is="$description.warning_id && $xf.visitor.canViewWarnings()" />
                                            <a href="{{ link('warnings', {'warning_id': $description.warning_id}) }}"
                                                class="actionBar-action actionBar-action--warn actionBar-action--menuItem"
                                                data-xf-click="overlay">{{ phrase('view_warning') }}</a>
                                            <xf:set var="$hasActionBarMenu" value="{{ true }}" />
                                        </xf:if>

                                        <xf:if is="$hasActionBarMenu">
                                            <a class="actionBar-action actionBar-action--menuTrigger"
                                                data-xf-click="menu"
                                                title="{{ phrase('more_options')|for_attr }}"
                                                role="button"
                                                tabindex="0"
                                                aria-expanded="false"
                                                aria-haspopup="true">&#8226;&#8226;&#8226;</a>

                                            <div class="menu" data-menu="menu" aria-hidden="true" data-menu-builder="actionBar">
                                                <div class="menu-content">
                                                    <h4 class="menu-header">{{ phrase('more_options') }}</h4>
                                                    <div class="js-menuBuilderTarget"></div>
                                                </div>
                                            </div>
                                        </xf:if>
                                    </xf:contentcheck>
                                    </div>
                                </xf:if>
                            </xf:contentcheck>
                        </div>
                    </xf:if>

                    <div class="reactionsBar js-reactionsList {{ $description.reactions ? 'is-active' : '' }}">
                        <xf:reactions content="{$description}" link="resources/update/reactions" />
                    </div>

                    <xf:if is="$description.edit_count && $description.canViewHistory()">
                        <div class="js-historyTarget toggleTarget" data-href="trigger-href"></div>
                    </xf:if>
                </article>



                    <div class="resourceSidebarGroup">
                        <dl class="pairs pairs--justified">
                            <dt>{{ phrase('author') }}</dt>
                            <dd><xf:username user="{$resource.User}" defaultname="{$resource.username}" /></dd>
                        </dl>
                    </div>
                  
                    <div class="resourceStatsBlock">
                        <div class="resourceBlockGroup">
                            <div class="resourceInfoBlock">
                                <span class="resource-data">{$resource.CurrentVersion.version_string}</span>
                                <span class="resource-title">{{ phrase('xfrm_version') }}</span>
                            </div>
                            <xf:if is="$resource.isDownloadable()">
                            <div class="resourceInfoBlock">
                                <span class="resource-data">{$resource.download_count|number}</span>
                                <span class="resource-title">{{ phrase('xfrm_downloads') }}</span>
                            </div>
                            </xf:if>
                            <div class="resourceInfoBlock">
                                <span class="resource-data">{{ max($resource.view_count, $resource.download_count, 1)|number }}</span>
                                <span class="resource-title">{{ phrase('views') }}</span>
                            </div>
                        </div>
                        <div class="resourceBlockGroup">
                            <div class="resourceInfoBlock">
                                <xf:macro template="rating_macros" name="stars_text"
                                   arg-rating="{$resource.rating_avg}"
                                   arg-count="{$resource.rating_count}"
                                   arg-rowClass="ratingStarsRow--textBlock" />
                            </div>
                            <div class="resourceInfoBlock">
                                <span class="resource-data"><xf:date time="{$resource.last_update}" /></span>
                                   <span class="resource-title">{{ phrase('last_updated') }}</span>
                            </div>
                        </div>

                    <xf:if contentcheck="true">
                        <div class="resourceSidebarGroup resourceSidebarGroup--buttons">
                            <xf:contentcheck>
                                <xf:if is="$resource.hasViewableDiscussion()">
                                    <xf:button href="{{ link('threads', $resource.Discussion) }}" class="button--fullWidth">{{ phrase('xfrm_join_discussion') }}</xf:button>
                                </xf:if>

                                <xf:if is="$resource.external_url">
                                    <xf:button href="{$resource.external_url}" class="button--link button--fullWidth">{{ phrase('xfrm_more_information') }}</xf:button>
                                </xf:if>

                                <xf:if is="$resource.alt_support_url AND $resource.Category.enable_support_url">
                                    <xf:button href="{$resource.alt_support_url}" class="button--link button--fullWidth">{{ phrase('xfrm_get_support') }}</xf:button>
                                </xf:if>
                            </xf:contentcheck>
                        </div>
                    </xf:if>


                    <xf:if is="$resource.canViewTeamMembers() && $teamMembers is not empty">
                        <div class="resourceSidebarGroup">
                            <h4 class="resourceSidebarGroup-title">
                                <xf:if is="$resource.canManageTeamMembers()">
                                    <a href="{{ link('resources/manage-team', $resource) }}" data-xf-click="overlay">
                                        {{ phrase('xfrm_resource_team') }}
                                    </a>
                                <xf:else />
                                        {{ phrase('xfrm_resource_team') }}
                                </xf:if>
                            </h4>

                            <ul class="resourceSidebarList">
                                <xf:foreach loop="$teamMembers" value="$teamMember">
                                    <li>
                                        <div class="contentRow">
                                            <div class="contentRow-figure">
                                                <xf:avatar user="$teamMember.User" size="xxs" />
                                            </div>

                                            <div class="contentRow-main contentRow-main--close">
                                                <xf:username user="$teamMember.User" rich="true" />
                                                <div class="contentRow-minor">
                                                    <xf:usertitle user="$teamMember.User" />
                                                </div>
                                            </div>
                                        </div>
                                    </li>
                                </xf:foreach>
                            </ul>
                        </div>
                    </xf:if>

                    <xf:if is="$authorOthers is not empty">
                        <div class="resourceSidebarGroup">
                            <h4 class="resourceSidebarGroup-title">
                                <a href="{{ link('resources/authors', $resource.User) }}">{{ phrase('xfrm_more_resources_from_x', {'name': $resource.User.username}) }}</a>
                            </h4>
                            <ul class="resourceSidebarList">
                            <xf:foreach loop="$authorOthers" value="$authorOther">
                                <li>
                                    <xf:macro template="xfrm_resource_list_macros" name="resource_simple"
                                        arg-resource="{$authorOther}"
                                        arg-withMeta="{{ false }}" />
                                </li>
                            </xf:foreach>
                            </ul>
                        </div>
                    </xf:if>

                    <xf:if contentcheck="true">
                        <div class="resourceSidebarGroup">
                            <h4 class="resourceSidebarGroup-title">{{ phrase('xfrm_share_this_resource') }}</h4>
                            <xf:contentcheck>
                                <xf:macro template="share_page_macros" name="buttons" arg-iconic="{{ true }}" />
                            </xf:contentcheck>
                        </div>
                    </xf:if>
                </div>
            </div>
        </div>
    </div>
</div>

<xf:if is="$latestUpdates is not empty">
    <div class="block">
        <div class="block-container">
            <h3 class="block-header">{{ phrase('xfrm_latest_updates') }}</h3>
            <ol class="block-body">
            <xf:foreach loop="$latestUpdates" value="$update">
                <li class="block-row block-row--separated">
                    <h3 class="block-textHeader">
                        <a href="{{ link('resources/update', $update) }}">{$update.title}</a>
                    </h3>
                    <div>{{ snippet($update.message, 100, {'stripBbCode': true}) }}</div>
            </xf:foreach>
            </ol>
            <div class="block-footer">
                <span class="block-footer-controls"><xf:button class="button--link" href="{{ link('resources/updates', $resource) }}">{{ phrase('xfrm_read_more...') }}</xf:button></span>
            </div>
        </div>
    </div>
</xf:if>

<xf:if is="$latestReviews is not empty">
    <div class="block">
        <div class="block-container">
            <h3 class="block-header">{{ phrase('xfrm_latest_reviews') }}</h3>
            <div class="block-body">
            <xf:foreach loop="$latestReviews" value="$review">
                <xf:macro template="xfrm_resource_review_macros" name="review"
                    arg-review="{$review}"
                    arg-resource="{$resource}" />
            </xf:foreach>
            </div>
            <div class="block-footer">
                <span class="block-footer-controls"><xf:button class="button--link" href="{{ link('resources/reviews', $resource) }}">{{ phrase('xfrm_read_more...') }}</xf:button></span>
            </div>
        </div>
    </div>
</xf:if>
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу