Classifieds

Classifieds [Paid] 1.2.0

No permission to buy ($60.00)
when multiple images are added, it doesn't look good that it's complicated as shown in the picture. Would you consider doing a slide study instead?
 

Attachments

  • Screenshot_1.webp
    Screenshot_1.webp
    18.5 KB · Views: 15
I assume the "Listing template" template controls the ad part, and not the thread part, of the display? Asking on behalf of a client. Thanks!
 
Haven't seen a paid ad yet but this add-on is still extremely buggy. The counters are completely wrong, shows 0 items in the category yet there are listings. Some show 1 yet there are none.

Also trying to figure out how to re-open an expired listing. I re-open it yet it doesn't appear.

Still an absolute mess
 
I did both rebuild options in the admin area for Classifieds and that seems to have fixed things up for the counters, for now.
 
Haven't seen a paid ad yet but this add-on is still extremely buggy. The counters are completely wrong, shows 0 items in the category yet there are listings. Some show 1 yet there are none.

Also trying to figure out how to re-open an expired listing. I re-open it yet it doesn't appear.

Still an absolute mess

Same here. Function doesn't work. Expired and I re-open still doesn't appear anywhere... Had to delete and re-list.
 
Prefix groups don't seem to work. I created 3 groups, with 20 items in each - but when I go to create a category, it doesn't allow me to pick a group (it doesn't even show them) and I have to choose all the wanted prefixes manually...
 
If a listing expires, and I re-open it, it doesn't show up in the Classifieds section. Bug? Should be able to do this without having to delete and add it again.

Can you fix this bug?

Also, another bug. My listing expires, it suddenly no longer shows in "your listings". I should be able to see all my listings there, even if expired.. (so I can easily re-list if I want). It's like it never existed. I can only find it again through the forum thread.
 
when multiple images are added, it doesn't look good that it's complicated as shown in the picture. Would you consider doing a slide study instead?

To fix this and show 2 items (line 14) on mobile and 3 (line 17) on desktop (with scrolling if more) change template

z61_classifieds_listing_view

Code:
<xf:title>{{ prefix('classifieds_listing', $listing, 'escaped') }}{$listing.title}</xf:title>

<xf:set var="$descSnippet" value="{{ snippet($listing.content, 250, {'stripBbCode': true}) }}" />
<xf:js src="https://cdnjs.cloudflare.com/ajax/libs/OwlCarousel2/2.3.4/owl.carousel.min.js" />

<xf:js>
$('.owl-carousel').owlCarousel({
    center: false,
    autoplay:false,
    margin:10,
    nav: false,
    responsive:{
            0:{
                items:2
            },
            {{$xf.style.getProperty('responsiveMedium') + 0}}:{
                items:3
            }
        }  
});
</xf:js>

<xf:css src="z61_classifieds_slider.less"  />
<xf:css src="z61_classifieds_listing_view.less" />

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

<xf:page option="ldJsonHtml">
    <script type="application/ld+json">
    {
        "@context": "https://schema.org",
        "@type": "CreativeWork",
        "@id": "{{ link('canonical:classifieds', $listing)|escape('json') }}",
        "headline": "{$listing.title|escape('json')}",
        "description": "{$descSnippet|escape('json')}",
        "dateCreated": "{{ date($listing.listing_date, 'c')|escape('json') }}",
        <xf:if is="$listing.last_edit_date > 0">
        "dateModified": "{{ date($listing.last_edit_date, 'c')|escape('json') }}",
        </xf:if>
        <xf:if is="$listing.hasViewableDiscussion()">
            "discussionUrl": "{{ link('canonical:threads', $listing.Discussion)|escape('json') }}",
        </xf:if>
        "author": {
            "@type": "Person",
            "name": "{{ ($listing.User ? $listing.User.username : $listing.username)|escape('json') }}"
        }
    }
    </script>
</xf:page>

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

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

<div class="block block--classifieds">
    <div class="block-container">
<div class="classifieds-wrapper">
        <div class="classifieds-left">
            <div class="classifiedsCoverImage">
                <div class="classifiedsCoverImage-container">
                    <div class="classifiedsCoverImage-container-image">
                        <img src="{{ link('classifieds/cover-image', $listing) }}" />
                    </div>
                </div>
            </div>

            <div class="classifieds-featuredImage--icons">
                <div class="lbContainer js-classifiedsDetails"
                     data-xf-init="lightbox"
                     data-lb-id="listing-{$listing.listing_id}"
                     data-lb-caption-desc="{{ $listing.User ? $listing.User.username : $listing.username }} &middot; {{ date_time($listing.listing_date) }}">

                    <div class="js-lbContainer thumbnailCount{$listing.attach_count|raw}">
                        <xf:if is="$listing.attach_count > 1">
                            <xf:if contentcheck="true">
                                <xf:css src="attachments.less" />
                                <div class="attachmentList-slider owl-carousel owl-theme">
                                    <xf:contentcheck>
                                        <xf:foreach loop="$listing.Attachments" value="$attachment" if="!$listing.isAttachmentEmbedded($attachment)">
                                            <ul class="listPlain">
                                                <xf:macro template="attachment_macros" name="attachment_list_item"
                                                          arg-attachment="{$attachment}"
                                                          arg-canView="{{ $listing.canViewAttachments() }}" />
                                            </ul>
                                        </xf:foreach>
                                    </xf:contentcheck>
                                </div>
                            </xf:if>
                        </xf:if>
                    </div>
                </div>
            </div>
        </div>
        <div class="classifieds-right">
            <dl class="pairs pairs--justified">
                <dt>{{ $category.type_phrase }}</dt>
                <dd>{{ $listing.Type.title }}</dd>
            </dl>
            <xf:if is="$listing.condition_id">
                <dl class="pairs pairs--justified">
                    <dt>{{ $category.condition_phrase }}</dt>
                    <dd>
                        {{ $listing.Condition.title }}
                        <xf:if is="$listing.Condition.description != ''">
                            <span tabindex="0" role="button"
                                    data-xf-init="tooltip" data-trigger="hover focus click" title="{{ $listing.Condition.description }}">
                                <xf:fa icon="far fa-info-circle" class="u-muted u-smaller" />
                            </span>
                        </xf:if>
                    </dd>
                </dl>
            </xf:if>
            <xf:if is="$listing.canShowPrice()">
                <dl class="pairs pairs--justified">
                    <dt>{{ $category.price_phrase }}</dt>
                    <dd>
                        <xf:if is="$listing.price > 0">
                            {$listing.price|currency($listing.currency)}
                            <xf:else/>
                            {{ phrase('z61_classifieds_free') }}
                        </xf:if>
                    </dd>
                </dl>
            </xf:if>
            <xf:if is="{$listing.expiration_date} && $listing.listing_status != 'sold'">
                <dl class="pairs pairs--justified">
                    <dt>{{ phrase('expires') }}</dt>
                    <dd><xf:date time="{{ $listing.expiration_date }}" /></dd>
                </dl>
            </xf:if>
            <xf:if is="{{$listing.sold_user_id > 0 && $listing.listing_status == 'sold' && $listing.canViewPurchaseInfo()}}">
                <dl class="pairs pairs--justified">
                    <dt>{{ phrase('z61_classifieds_purchased_by')}}</dt>
                    <dd><xf:username user="{$listing.SoldUser}" /></dd>
                </dl>
            </xf:if>
        </div>
    </div>
</div>
</div>

<xf:if contentcheck="true">
    <div class="block">
        <div class="block-outer">
            <div class="block-outer-opposite">
                <xf:contentcheck>
                    <xf:macro template="z61_classifieds_listing_wrapper_macros" name="action_buttons" arg-listing="{$listing}" />
                </xf:contentcheck>
            </div>
        </div>
    </div>
</xf:if>

<div class="block">
    <div class="block-container">
        <div class="block-body js-listingBody">

            <div class="listingBody">
                <article class="listingBody-main">
                    <xf:macro template="custom_fields_macros" name="custom_fields_view"
                              arg-type="classifiedsListings"
                              arg-group="above"
                              arg-onlyInclude="{$category.field_cache}"
                              arg-set="{$listing.custom_fields}"
                              arg-wrapperClass="listingBody-fields listingBody-fields--before" />

                    {{ bb_code($listing.content, 'classifieds_listing', $listing) }}

                    <xf:macro template="custom_fields_macros" name="custom_fields_view"
                              arg-type="classifiedsListings"
                              arg-group="below"
                              arg-onlyInclude="{$category.field_cache}"
                              arg-set="{$listing.custom_fields}"
                              arg-wrapperClass="listingBody-fields listingBody-fields--after" />

                    <xf:if contentcheck="true">
                        <div class="actionBar">
                            <xf:contentcheck>
                                <xf:if contentcheck="true">
                                    <div class="actionBar-set actionBar-set--external">
                                        <xf:contentcheck>
                                            <!--[XF:listing_tools_menu:top]-->
                                            <xf:react content="{$listing}" link="classifieds/react" list="< .listingBody | .js-reactionsList" />
                                        </xf:contentcheck>
                                    </div>
                                </xf:if>

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

                                            <xf:set var="$hasActionBarMenu" value="{{ false }}" />
                                            <xf:if is="$listing.canEdit()">
                                                <a href="{{ link('classifieds/edit', $listing) }}"
                                                   class="actionBar-action actionBar-action--edit actionBar-action--menuItem">{{ phrase('edit') }}</a>
                                                <xf:set var="$hasActionBarMenu" value="{{ true }}" />
                                            </xf:if>
                                            <xf:if is="$listing.canDelete('soft')">
                                                <a href="{{ link('classifieds/delete', $listing) }}"
                                                   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() && $listing.ip_id">
                                                <a href="{{ link('classifieds/ip', $listing) }}"
                                                   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="$listing.canWarn()">
                                                <a href="{{ link('classifieds/warn', $listing) }}"
                                                   class="actionBar-action actionBar-action--warn actionBar-action--menuItem">{{ phrase('warn') }}</a>
                                                <xf:set var="$hasActionBarMenu" value="{{ true }}" />
                                                <xf:elseif is="$listing.warning_id && $xf.visitor.canViewWarnings()" />
                                                <a href="{{ link('warnings', {'warning_id': $listing.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:listing_tools_menu:bottom]-->
                                            <xf:if is="$hasActionBarMenu">
                                                <a class="actionBar-action actionBar-action--menuTrigger"
                                                   data-xf-click="menu"
                                                   title="{{ phrase('more_options') }}"
                                                   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 {{ $listing.reactions ? 'is-active' : '' }}">
                        <xf:reactions content="{$listing}" link="classifieds/reactions" />
                    </div>

                    <div class="js-historyTarget toggleTarget" data-href="trigger-href"></div>
                </article>
            </div>
        </div>
    </div>
</div>

<xf:if is="{{ $listing.listing_location }} && {{ $xf.options.z61ClassifiedsGoogleApi }}">
    <div class="block">
        <div class="block-container">
            <div class="block-minorHeader">{{ phrase('z61_classifieds_location') }}</div>

            <div class="block-body ">
                <div class="block-row block-row--separated">
                    <iframe
                            width="100%" height="400px" frameborder="0" style="border: 0"
                            src="https://www.google.com/maps/embed/v1/place?key={$xf.options.z61ClassifiedsGoogleApi}&q={{ $listing.listing_location|censor }}">
                    </iframe>
                </div>
            </div>
        </div>
    </div>
</xf:if>

<xf:sidebar>
    <div class="block">
        <div class="block-container">
            <h3 class="block-minorHeader">{{ phrase('information') }}</h3>
            <div class="block-body block-row block-row--minor">
                <dl class="pairs pairs--justified">
                    <dt>{{ phrase('category') }}</dt>
                    <dd><a href="{{ link('classifieds/categories', $listing) }}">{{ $listing.Category.title }}</a></dd>
                </dl>
                <dl class="pairs pairs--justified">
                    <dt>{{ phrase('author') }}</dt>
                    <dd><xf:username user="{$listing.User}" defaultname="{$listing.username}" /></dd>
                </dl>
                <dl class="pairs pairs--justified">
                    <dt>{{ phrase('created') }}</dt>
                    <dd><xf:date time="{{ $listing.listing_date }}" /></dd>
                </dl>
                <xf:if is="$listing.last_edit_date">
                    <dl class="pairs pairs--justified">
                        <xf:if is="$listing.user_id == $listing.last_edit_user_id">
                            <dt>{{ phrase('last_edited') }}</dt>
                            <dd><xf:date time="{$listing.last_edit_date}" /></dd>
                            <xf:else />
                            <dt>{{ phrase('last_edited_by_moderator') }}</dt>
                            <dd><xf:date time="{$listing.last_edit_date}" /></dd>
                        </xf:if>
                    </dl>
                </xf:if>
                <dl class="pairs pairs--justified">
                    <dt>{{ phrase('views') }}</dt>
                    <dd>{{ $listing.view_count }}</dd>
                </dl>
            </div>
        </div>
    </div>
</xf:sidebar>

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

<xf:sidebar>
    <xf:if is="$authorOthers is not empty">
        <div class="block">
            <div class="block-container">
                <h3 class="block-minorHeader">
                    <a href="{{ link('classifieds/authors', $listing.User) }}">{{ phrase('z61_classifieds_more_listings_by_x', {'name': $listing.User.username}) }}</a>
                </h3>
                <div class="block-body block-row">
                    <ul class="listingSidebarList">
                        <xf:foreach loop="$authorOthers" value="$authorOther">
                            <li>
                                <xf:macro template="z61_classifieds_listing_list_macros" name="listing_simple"
                                          arg-listing="{$authorOther}"
                                          arg-withMeta="{{ false }}" />
                            </li>
                        </xf:foreach>
                    </ul>
                </div>
            </div>
        </div>
    </xf:if>
</xf:sidebar>

<xf:sidebar key="shareSidebar">
    <xf:if contentcheck="true">
        <div class="block">
            <div class="block-container">
                <xf:contentcheck>
                    <h3 class="block-minorHeader">{{ phrase('z61_classifieds_share_this_listing') }}</h3>
                    <xf:if contentcheck="true">
                        <div class="block-body block-row block-row--separated">
                            <xf:contentcheck>
                                <xf:macro template="share_page_macros" name="buttons" arg-iconic="{{ true }}" />
                            </xf:contentcheck>
                        </div>
                    </xf:if>

                    <xf:if contentcheck="true">
                        <div class="block-body block-row block-row--separated">
                            <xf:contentcheck>
                                <xf:macro template="share_page_macros" name="share_clipboard_input"
                                          arg-label="{{ phrase('z61_classifieds_copy_url_bb_code') }}"
                                          arg-text="[URL=&quot;{{ link('canonical:classifieds', $listing) }}&quot;]{$listing.title}[/URL]" />
                            </xf:contentcheck>
                        </div>
                    </xf:if>
                </xf:contentcheck>
            </div>
        </div>
    </xf:if>
</xf:sidebar>

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

1639589395872.webp
 
Would be nice if the developer would respond to open bug reports in his addon. A few of them renders this addon fairly broken. (expired not working properly and listing disappearing unable to be reposted).
I guess I should have done a bit more research on this addon, I was excited for a bit, but I cannot get it to do anything.
 
I was just at https://xf2.nixfifty.com/ to look at my account and if I was able to download the latest version or had to pay for the upgrade and found it had been spammed, (I hope). When I logged in I found I received a message! I like this mod and would have liked to see development continue so I hope this doesn't mean it has been abandoned.

spam-2.webp
 
I was just at https://xf2.nixfifty.com/ to look at my account and if I was able to download the latest version or had to pay for the upgrade and found it had been spammed, (I hope). When I logged in I found I received a message! I like this mod and would have liked to see development continue so I hope this doesn't mean it has been abandoned.

View attachment 262482
Thanks, that's just some spam on the demo site - I've dealt with it now.
 
Why are you ignoring the requests about the active bug reports? While answering other questions.
Wouldn't call it unreasonable just to get a response, eg. "I'm working on a solution, hope to have an update out in the coming weeks. I'm sorry for the inconvenience."
🙄
 
Why are you ignoring the requests about the active bug reports? While answering other questions.
Wouldn't call it unreasonable just to get a response, eg. "I'm working on a solution, hope to have an update out in the coming weeks. I'm sorry for the inconvenience."
🙄
Unless he has a reason to follow up on the report, most reports would not require a response. I know I personally will not respond to most bug reports, and will only follow up once they're planned for release unless I need further information.

He has also stated that he's busy with other things currently.

It also takes two seconds to deal with spam vs however long it takes to fix a bug 🤷‍♂️.
 
Maybe because it has been present for a while now, and I would like to know when they are fixed so I can actually use the addon. Or if I need to find another addon for this purpose. I have yet to renew because of this.
 
On listings with only one image, you can not click on the image to zoom in. Does anybody have a fix for that please? Thanks.
 
my bug report on the site is open since 4th Oct - maybe @NixFifty will have a look if i post here:

Hi,
here in Germany we're using a comma as the decimal seperator.
This isnt noticed by the addon - the addon expects a point therefore.

So if I enter the amount 49,99 - the addon cuts the value to 49,00

Thanks

Ticket #612
 
Top Bottom