المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : [XF 2.x] : طريقة فصل المواضيع المثبتة عن المواضيع العادية شرح خاص للجيل الثانى


هيلبرنت
12-09-2017, 08:03 PM
السلام عليكم ورحمه الله وبركاته
[اسم الدرس]: شرح طريقة فصل المواضيع المثبتة عن المواضيع العادية.
[الاسكريبت المستخدم]: الزين فورو - xenforo
[التوافق و الاصدار]: شرح خاص للجيل الثانى XF 2.0
الشرح
1- سجل دخول الى لوحة تحكم المنتدى >> المظهر >> ابحث عن قالب اسمه forum_view >> ابحث بداخله عن هذا الكود.
<div class="structItemContainer-group structItemContainer-group--sticky">
<xf:foreach loop="$stickyThreads" value="$thread">
<xf:macro template="thread_list_macros" name="item" arg-thread="{$thread}" arg-forum="{$forum}" />
</xf:foreach>
</div>
- اضف اسفله هذا الكود
<xf:if is="{$stickyThreads}">
<hr class="stickySeparator"/>
</xf:if>3- توجة الى القالب اللى اسمه extra.less قم بفتحه ثم اضف هذا الكود
.stickySeparator {
height: 30px;
background-color: #4e9ad1;
border: 0px;
margin: 0px;
}والان النتيجة

قبل

http://www.helpernt.com/vb/attachment.php?attachmentid=1140&stc=1&d=1512838923

بعد

http://www.helpernt.com/vb/attachment.php?attachmentid=1141&stc=1&d=1512838923

[مصدر الموضوع]:
https://xenforo.com/community/resources/separate-sticky-threads-from-normal-ones.5706/

abo-karim
12-10-2017, 07:15 PM
موضوع رااااااائع

شكرا لك اخى

طيور الظلام
01-12-2018, 10:42 PM
شرح روعه

ايه الجمال ده

kader
01-14-2018, 12:43 AM
السلام عليكم ورحمه الله وبركاته
[اسم الدرس]: شرح طريقة فصل المواضيع المثبتة عن المواضيع العادية.
[الاسكريبت المستخدم]: الزين فورو - xenforo
[التوافق و الاصدار]: شرح خاص للجيل الثانى xf 2.0
الشرح
1- سجل دخول الى لوحة تحكم المنتدى >> المظهر >> ابحث عن قالب اسمه forum_view >> ابحث بداخله عن هذا الكود.
<div class="structitemcontainer-group structitemcontainer-group--sticky">
<xf:foreach loop="$stickythreads" value="$thread">
<xf:macro template="thread_list_macros" name="item" arg-thread="{$thread}" arg-forum="{$forum}" />
</xf:foreach>
</div>- اضف اسفله هذا الكود
<xf:if is="{$stickythreads}">
<hr class="stickyseparator"/>
</xf:if>3- توجة الى القالب اللى اسمه extra.less قم بفتحه ثم اضف هذا الكود
.stickyseparator {
height: 30px;
background-color: #4e9ad1;
border: 0px;
margin: 0px;
}والان النتيجة

قبل

http://www.helpernt.com/vb/attachment.php?attachmentid=1140&stc=1&d=1512838923

بعد

http://www.helpernt.com/vb/attachment.php?attachmentid=1141&stc=1&d=1512838923

[مصدر الموضوع]:
https://xenforo.com/community/resources/separate-sticky-threads-from-normal-ones.5706/
يعطيك العافية مبدعنا الغالي

غاوى مشاكل
01-23-2018, 11:13 AM
مشاء الله

طريقة راااااائعه

طيور الظلام
02-18-2018, 07:39 PM
تمت التجربة

والطريقة تعمل بنجاح

موفقين دائما

mohmed
02-20-2018, 01:28 AM
للاسف لم اجد الكود بالقالب
انا مركب اخر اصدار
هل يوجد كود طريقة اخرى

هيلبرنت
02-20-2018, 11:47 AM
للاسف لم اجد الكود بالقالب
انا مركب اخر اصدار
هل يوجد كود طريقة اخرى

ضع محتوى القالب هنا

mohmed
02-21-2018, 05:20 AM
تفضل قالب forum_view

<xf:title page="{$page}">{$forum.Node.title}</xf:title>
<xf:description>{$forum.Node.description|raw}</xf:description>

<xf:macro template="metadata_macros" name="canonical_url"
arg-canonicalUrl="{{ link('canonical:forums', $forum, {'page': $page}) }}" />

<xf:head option="rss_forum"><link rel="alternate" type="application/rss+xml" title="{{ phrase('rss_feed_for_x', {'title': $forum.title})|for_attr }}" href="{{ link('forums/index.rss', $forum) }}" /></xf:head>

<xf:macro template="forum_macros" name="forum_page_options" arg-forum="{$forum}" />
<xf:breadcrumb source="$forum.getBreadcrumbs(false)" />

<xf:pageaction if="$forum.canCreateThread()">
<xf:button href="{{ link('forums/post-thread', $forum) }}" class="button--cta" icon="write">
{{ phrase('post_thread') }}
</xf:button>
</xf:pageaction>

<xf:if is="$pendingApproval">
<div class="blockMessage blockMessage--important">{{ phrase('content_submitted_displayed_pending_approv al') }}</div>
</xf:if>

<xf:if is="$nodeTree">
<xf:ad position="forum_view_above_node_list" arg-forum="{$forum}" />
<div class="block">
<div class="block-container">
<div class="block-body">
<xf:macro template="forum_list" name="node_list"
arg-children="{$nodeTree}"
arg-extras="{$nodeExtras}"
arg-depth="2" />
</div>
</div>
</div>
<xf:ad position="forum_view_below_node_list" arg-forum="{$forum}" />
</xf:if>

<xf:if is="$canInlineMod">
<xf:js src="xf/inline_mod.js" min="1" />
</xf:if>

<xf:ad position="forum_view_above_thread_list" arg-forum="{$forum}" />
<div class="block" data-xf-init="{{ $canInlineMod ? 'inline-mod' : '' }}" data-type="thread" data-href="{{ link('inline-mod') }}">

<div class="block-outer"><xf:trim>
<xf:pagenav page="{$page}" perpage="{$perPage}" total="{$total}"
link="forums" data="{$forum}" params="{$filters}"
wrapperclass="block-outer-main" />
<xf:if contentcheck="true">
<div class="block-outer-opposite">
<div class="buttonGroup">
<xf:contentcheck>
<xf:if is="$canInlineMod">
<xf:macro template="inline_mod_macros" name="button" />
</xf:if>
<xf:if is="$xf.visitor.user_id">
<xf:button href="{{ link('forums/mark-read', $forum, {'date': $xf.time}) }}"
class="button--link" overlay="true">
{{ phrase('mark_read') }}
</xf:button>
</xf:if>
<xf:if is="$forum.canWatch()">
<xf:button href="{{ link('forums/watch', $forum) }}" class="button--link"
data-xf-click="switch-overlay"
data-sk-watch="{{ phrase('watch') }}"
data-sk-unwatch="{{ phrase('unwatch') }}">
<xf:if is="{$forum.Watch.{$xf.visitor.user_id}}">{{ phrase('unwatch') }}<xf:else />{{ phrase('watch') }}</xf:if>
</xf:button>
</xf:if>
</xf:contentcheck>
</div>
</div>
</xf:if>
</xf:trim></div>

<xf:set var="$dateLimits" value="{{ {
'-1': phrase('any_time'),
'7': phrase('x_days', {'days': '7'}),
'14': phrase('x_days', {'days': '14'}),
'30': phrase('x_days', {'days': '30'}),
'60': phrase('x_months', {'months': '2'}),
'90': phrase('x_months', {'months': '3'}),
'182': phrase('x_months', {'months': '6'}),
'365': phrase('1_year')
} }}" />
<xf:set var="$sortOrders" value="{{ {
'last_post_date': phrase('last_message'),
'post_date': phrase('first_message'),
'title': phrase('title'),
'reply_count': phrase('replies'),
'view_count': phrase('views'),
'first_post_likes': phrase('first_message_likes')
} }}" />

<div class="block-container">
<div class="block-filterBar">
<div class="filterBar">
<xf:if contentcheck="true">
<ul class="filterBar-filters">
<xf:contentcheck>
<xf:if is="$filters.prefix_id">
<li><a href="{{ link('forums', $forum, $filters|replace('prefix_id', null)) }}"
class="filterBar-filterToggle" data-xf-init="tooltip" title="{{ phrase('remove_this_filter')|for_attr }}">
<span class="filterBar-filterToggle-label">{{ phrase('prefix:') }}</span>
{{ prefix_title('thread', $filters.prefix_id) }}</a></li>
</xf:if>
<xf:if is="$filters.starter_id AND $starterFilter">
<li><a href="{{ link('forums', $forum, $filters|replace('starter_id', null)) }}"
class="filterBar-filterToggle" data-xf-init="tooltip" title="{{ phrase('remove_this_filter')|for_attr }}">
<span class="filterBar-filterToggle-label">{{ phrase('started_by:') }}</span>
{$starterFilter.username}</a></li>
</xf:if>
<xf:if is="$filters.last_days AND {$dateLimits.{$filters.last_days}}">
<li><a href="{{ link('forums', $forum, $filters|replace('last_days', null)) }}"
class="filterBar-filterToggle" data-xf-init="tooltip" title="{{ phrase('remove_this_filter')|for_attr }}">
<span class="filterBar-filterToggle-label">{{ phrase('last_updated:') }}</span>
{$dateLimits.{$filters.last_days}}</a></li>
</xf:if>
<xf:if is="$filters.order AND {$sortOrders.{$filters.order}}">
<li><a href="{{ link('forums', $forum, $filters|replace({'order': null, 'direction': null})) }}"
class="filterBar-filterToggle" data-xf-init="tooltip" title="{{ phrase('return_to_default_order')|for_attr }}">
<span class="filterBar-filterToggle-label">{{ phrase('sort_by:') }}</span>
{$sortOrders.{$filters.order}}
<i class="fa {{ $filters.direction == 'asc' ? 'fa-angle-up' : 'fa-angle-down' }}" aria-hidden="true"></i>
<span class="u-srOnly"><xf:if is="$filters.direction == 'asc'">{{ phrase('ascending') }}<xf:else />{{ phrase('descending') }}</xf:if></span>
</a></li>
</xf:if>
</xf:contentcheck>
</ul>
</xf:if>

<a class="filterBar-menuTrigger" data-xf-click="menu" role="button" tabindex="0" aria-expanded="false" aria-haspopup="true">{{ phrase('filters') }}</a>
<div class="menu menu--wide" data-menu="menu" aria-hidden="true"
data-href="{{ link('forums/filters', $forum, $filters) }}"
data-load-target=".js-filterMenuBody">
<div class="menu-content">
<h4 class="menu-header">{{ phrase('show_only:') }}</h4>
<div class="js-filterMenuBody">
<div class="menu-row">{{ phrase('loading...') }}</div>
</div>
</div>
</div>
</div>
</div>

<xf:set var="$qtPos">{{ ($sortInfo.order == 'last_post_date' && $sortInfo.direction == 'asc') ? 'bottom' : 'top' }}</xf:set>

<div class="block-body">
<div class="structItemContainer">
<xf:macro template="thread_list_macros" name="quick_thread"
arg-forum="{$forum}"
arg-page="{$page}"
arg-order="{$sortInfo.order}"
arg-direction="{$sortInfo.direction}" />
<xf:if is="$stickyThreads is not empty OR $threads is not empty">
<xf:if is="$stickyThreads is not empty">
<div class="structItemContainer-group structItemContainer-group--sticky">
<xf:foreach loop="$stickyThreads" value="$thread">
<xf:macro template="thread_list_macros" name="item" arg-thread="{$thread}" arg-forum="{$forum}" />
</xf:foreach>
</div>

<xf:ad position="forum_view_below_stickies" arg-forum="{$forum}" />
</xf:if>

<xf:if is="$threads is not empty">
<div class="structItemContainer-group js-threadList">
<xf:foreach loop="$threads" value="$thread">
<xf:macro template="thread_list_macros" name="item" arg-thread="{$thread}" arg-forum="{$forum}" />
</xf:foreach>
</div>
</xf:if>
<xf:elseif is="$filters" />
<div class="structItem js-emptyThreadList">
<div class="structItem-cell">{{ phrase('there_no_threads_matching_your_filters') }}</div>
</div>
<xf:else />
<div class="structItem js-emptyThreadList">
<div class="structItem-cell">{{ phrase('there_no_threads_in_this_forum') }}</div>
</div>
</xf:if>
</div>
</div>
</div>

<div class="block-outer block-outer--after">
<xf:pagenav
page="{$page}" perpage="{$perPage}" total="{$total}"
link="forums" data="{$forum}" params="{$filters}"
wrapperclass="block-outer-main" />
<xf:showignored wrapperclass="block-outer-opposite" />
<xf:if is="!$forum.canCreateThread()">
<div class="block-outer-opposite">
<xf:if is="$xf.visitor.user_id">
<span class="button is-disabled">
{{ phrase('no_permission_to_post') }}
<!-- this is not interactive so shouldn't be a button element -->
</span>
<xf:else />
<xf:button href="{{ link('login') }}" class="button--link" overlay="true">
{{ phrase('log_in_or_register_to_post') }}
</xf:button>
</xf:if>
</div>
</xf:if>
</div>
</div>
<xf:ad position="forum_view_below_thread_list" arg-forum="{$forum}" />

<xf:widgetpos id="forum_view_sidebar" context-forum="{$forum}" position="sidebar" />

هيلبرنت
02-21-2018, 10:27 AM
فضل القالب بعد التعديل
<xf:title page="{$page}">{$forum.Node.title}</xf:title>
<xf:description>{$forum.Node.description|raw}</xf:description>

<xf:macro template="metadata_macros" name="canonical_url"
arg-canonicalUrl="{{ link('canonical:forums', $forum, {'page': $page}) }}" />

<xf:head option="rss_forum"><link rel="alternate" type="application/rss+xml" title="{{ phrase('rss_feed_for_x', {'title': $forum.title})|for_attr }}" href="{{ link('forums/index.rss', $forum) }}" /></xf:head>

<xf:macro template="forum_macros" name="forum_page_options" arg-forum="{$forum}" />
<xf:breadcrumb source="$forum.getBreadcrumbs(false)" />

<xf:pageaction if="$forum.canCreateThread()">
<xf:button href="{{ link('forums/post-thread', $forum) }}" class="button--cta" icon="write">
{{ phrase('post_thread') }}
</xf:button>
</xf:pageaction>

<xf:if is="$pendingApproval">
<div class="blockMessage blockMessage--important">{{ phrase('content_submitted_displayed_pending_approv al') }}</div>
</xf:if>

<xf:if is="$nodeTree">
<xf:ad position="forum_view_above_node_list" arg-forum="{$forum}" />
<div class="block">
<div class="block-container">
<div class="block-body">
<xf:macro template="forum_list" name="node_list"
arg-children="{$nodeTree}"
arg-extras="{$nodeExtras}"
arg-depth="2" />
</div>
</div>
</div>
<xf:ad position="forum_view_below_node_list" arg-forum="{$forum}" />
</xf:if>

<xf:if is="$canInlineMod">
<xf:js src="xf/inline_mod.js" min="1" />
</xf:if>

<xf:ad position="forum_view_above_thread_list" arg-forum="{$forum}" />
<div class="block" data-xf-init="{{ $canInlineMod ? 'inline-mod' : '' }}" data-type="thread" data-href="{{ link('inline-mod') }}">

<div class="block-outer"><xf:trim>
<xf:pagenav page="{$page}" perpage="{$perPage}" total="{$total}"
link="forums" data="{$forum}" params="{$filters}"
wrapperclass="block-outer-main" />
<xf:if contentcheck="true">
<div class="block-outer-opposite">
<div class="buttonGroup">
<xf:contentcheck>
<xf:if is="$canInlineMod">
<xf:macro template="inline_mod_macros" name="button" />
</xf:if>
<xf:if is="$xf.visitor.user_id">
<xf:button href="{{ link('forums/mark-read', $forum, {'date': $xf.time}) }}"
class="button--link" overlay="true">
{{ phrase('mark_read') }}
</xf:button>
</xf:if>
<xf:if is="$forum.canWatch()">
<xf:button href="{{ link('forums/watch', $forum) }}" class="button--link"
data-xf-click="switch-overlay"
data-sk-watch="{{ phrase('watch') }}"
data-sk-unwatch="{{ phrase('unwatch') }}">
<xf:if is="{$forum.Watch.{$xf.visitor.user_id}}">{{ phrase('unwatch') }}<xf:else />{{ phrase('watch') }}</xf:if>
</xf:button>
</xf:if>
</xf:contentcheck>
</div>
</div>
</xf:if>
</xf:trim></div>

<xf:set var="$dateLimits" value="{{ {
'-1': phrase('any_time'),
'7': phrase('x_days', {'days': '7'}),
'14': phrase('x_days', {'days': '14'}),
'30': phrase('x_days', {'days': '30'}),
'60': phrase('x_months', {'months': '2'}),
'90': phrase('x_months', {'months': '3'}),
'182': phrase('x_months', {'months': '6'}),
'365': phrase('1_year')
} }}" />
<xf:set var="$sortOrders" value="{{ {
'last_post_date': phrase('last_message'),
'post_date': phrase('first_message'),
'title': phrase('title'),
'reply_count': phrase('replies'),
'view_count': phrase('views'),
'first_post_likes': phrase('first_message_likes')
} }}" />

<div class="block-container">
<div class="block-filterBar">
<div class="filterBar">
<xf:if contentcheck="true">
<ul class="filterBar-filters">
<xf:contentcheck>
<xf:if is="$filters.prefix_id">
<li><a href="{{ link('forums', $forum, $filters|replace('prefix_id', null)) }}"
class="filterBar-filterToggle" data-xf-init="tooltip" title="{{ phrase('remove_this_filter')|for_attr }}">
<span class="filterBar-filterToggle-label">{{ phrase('prefix:') }}</span>
{{ prefix_title('thread', $filters.prefix_id) }}</a></li>
</xf:if>
<xf:if is="$filters.starter_id AND $starterFilter">
<li><a href="{{ link('forums', $forum, $filters|replace('starter_id', null)) }}"
class="filterBar-filterToggle" data-xf-init="tooltip" title="{{ phrase('remove_this_filter')|for_attr }}">
<span class="filterBar-filterToggle-label">{{ phrase('started_by:') }}</span>
{$starterFilter.username}</a></li>
</xf:if>
<xf:if is="$filters.last_days AND {$dateLimits.{$filters.last_days}}">
<li><a href="{{ link('forums', $forum, $filters|replace('last_days', null)) }}"
class="filterBar-filterToggle" data-xf-init="tooltip" title="{{ phrase('remove_this_filter')|for_attr }}">
<span class="filterBar-filterToggle-label">{{ phrase('last_updated:') }}</span>
{$dateLimits.{$filters.last_days}}</a></li>
</xf:if>
<xf:if is="$filters.order AND {$sortOrders.{$filters.order}}">
<li><a href="{{ link('forums', $forum, $filters|replace({'order': null, 'direction': null})) }}"
class="filterBar-filterToggle" data-xf-init="tooltip" title="{{ phrase('return_to_default_order')|for_attr }}">
<span class="filterBar-filterToggle-label">{{ phrase('sort_by:') }}</span>
{$sortOrders.{$filters.order}}
<i class="fa {{ $filters.direction == 'asc' ? 'fa-angle-up' : 'fa-angle-down' }}" aria-hidden="true"></i>
<span class="u-srOnly"><xf:if is="$filters.direction == 'asc'">{{ phrase('ascending') }}<xf:else />{{ phrase('descending') }}</xf:if></span>
</a></li>
</xf:if>
</xf:contentcheck>
</ul>
</xf:if>

<a class="filterBar-menuTrigger" data-xf-click="menu" role="button" tabindex="0" aria-expanded="false" aria-haspopup="true">{{ phrase('filters') }}</a>
<div class="menu menu--wide" data-menu="menu" aria-hidden="true"
data-href="{{ link('forums/filters', $forum, $filters) }}"
data-load-target=".js-filterMenuBody">
<div class="menu-content">
<h4 class="menu-header">{{ phrase('show_only:') }}</h4>
<div class="js-filterMenuBody">
<div class="menu-row">{{ phrase('loading...') }}</div>
</div>
</div>
</div>
</div>
</div>

<xf:set var="$qtPos">{{ ($sortInfo.order == 'last_post_date' && $sortInfo.direction == 'asc') ? 'bottom' : 'top' }}</xf:set>

<div class="block-body">
<div class="structItemContainer">
<xf:macro template="thread_list_macros" name="quick_thread"
arg-forum="{$forum}"
arg-page="{$page}"
arg-order="{$sortInfo.order}"
arg-direction="{$sortInfo.direction}" />
<xf:if is="$stickyThreads is not empty OR $threads is not empty">
<xf:if is="$stickyThreads is not empty">
<div class="structItemContainer-group structItemContainer-group--sticky">
<xf:foreach loop="$stickyThreads" value="$thread">
<xf:macro template="thread_list_macros" name="item" arg-thread="{$thread}" arg-forum="{$forum}" />
</xf:foreach>
</div>

<xf:ad position="forum_view_below_stickies" arg-forum="{$forum}" />
</xf:if>

<xf:if is="$threads is not empty">
<div class="structItemContainer-group js-threadList">
<xf:foreach loop="$threads" value="$thread">
<xf:if is="{$stickyThreads}">
<hr class="stickySeparator"/>
</xf:if>
<xf:macro template="thread_list_macros" name="item" arg-thread="{$thread}" arg-forum="{$forum}" />
</xf:foreach>
</div>
</xf:if>
<xf:elseif is="$filters" />
<div class="structItem js-emptyThreadList">
<div class="structItem-cell">{{ phrase('there_no_threads_matching_your_filters') }}</div>
</div>
<xf:else />
<div class="structItem js-emptyThreadList">
<div class="structItem-cell">{{ phrase('there_no_threads_in_this_forum') }}</div>
</div>
</xf:if>
</div>
</div>
</div>

<div class="block-outer block-outer--after">
<xf:pagenav
page="{$page}" perpage="{$perPage}" total="{$total}"
link="forums" data="{$forum}" params="{$filters}"
wrapperclass="block-outer-main" />
<xf:showignored wrapperclass="block-outer-opposite" />
<xf:if is="!$forum.canCreateThread()">
<div class="block-outer-opposite">
<xf:if is="$xf.visitor.user_id">
<span class="button is-disabled">
{{ phrase('no_permission_to_post') }}
<!-- this is not interactive so shouldn't be a button element -->
</span>
<xf:else />
<xf:button href="{{ link('login') }}" class="button--link" overlay="true">
{{ phrase('log_in_or_register_to_post') }}
</xf:button>
</xf:if>
</div>
</xf:if>
</div>
</div>
<xf:ad position="forum_view_below_thread_list" arg-forum="{$forum}" />

<xf:widgetpos id="forum_view_sidebar" context-forum="{$forum}" position="sidebar" />
لاتنسى استكمال باقى الخطوات باضافة الكود المذكور براس الموضوع فى قالب extra.less

14SAT
02-23-2018, 06:26 PM
شكرا لك اخي تم تطبيق الدرس لكن وجهتني مشكلة

رابط مباشرة للمشاهدة

http://www.14sat.com/vb/forums/38/

هيلبرنت
02-24-2018, 10:43 AM
شكرا لك اخي تم تطبيق الدرس لكن وجهتني مشكلة

رابط مباشرة للمشاهدة

http://www.14sat.com/vb/forums/38/

غريبه جدا اصلا الموضوع تم نقله من الموقع الرسمى عموما جرب ده ابحث داخل قالب forum_view عن هذا الكود
<xf:macro template="thread_list_macros" name="item" arg-thread="{$thread}" arg-forum="{$forum}" />
</xf:foreach>
</div>

ثم ضع اسفله
<xf:if is="{$stickyThreads}">
<hr class="stickySeparator"/>
</xf:if>

ودلنا خبر

14SAT
02-24-2018, 01:24 PM
شكرا لك اخي نفس المشكل اخي

sadat
02-11-2019, 01:41 PM
الكود ده يمشى حاله للنسخ xf 2.1

هيلبرنت
02-11-2019, 05:00 PM
بصراحة مجربتهوش بس خلينا نجربه ولينا رجعه

هيلبرنت
11-23-2019, 04:50 PM
نورتونى ياشباب

اقرا
08-07-2021, 06:55 PM
الله يوفقك يارب