forked from CGM_Public/pretix_original
Widget: Allow to filter by attributes
This commit is contained in:
@@ -143,6 +143,11 @@ You can see an example here:
|
|||||||
</div>
|
</div>
|
||||||
</noscript>
|
</noscript>
|
||||||
|
|
||||||
|
You can filter events by meta data attributes. You can create those attributes in your order profile and set their values in both event and series date
|
||||||
|
settings. For example, if you set up a meta data property called "Promoted" that you set to "Yes" on some events, you can pass a filter like this::
|
||||||
|
|
||||||
|
<pretix-widget event="https://pretix.eu/demo/series/" style="list" filter="attr[Promoted]=Yes"></pretix-widget>
|
||||||
|
|
||||||
pretix Button
|
pretix Button
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
|
|||||||
@@ -365,13 +365,17 @@ class WidgetAPIProductList(EventListMixin, View):
|
|||||||
|
|
||||||
if hasattr(self.request, 'event'):
|
if hasattr(self.request, 'event'):
|
||||||
add_subevents_for_days(
|
add_subevents_for_days(
|
||||||
self.request.event.subevents_annotated('web'),
|
filter_qs_by_attr(self.request.event.subevents_annotated('web'), self.request),
|
||||||
before, after, ebd, set(), self.request.event,
|
before, after, ebd, set(), self.request.event,
|
||||||
kwargs.get('cart_namespace')
|
kwargs.get('cart_namespace')
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
timezones = set()
|
timezones = set()
|
||||||
add_events_for_days(self.request, Event.annotated(self.request.organizer.events, 'web'), before, after, ebd, timezones)
|
add_events_for_days(
|
||||||
|
self.request,
|
||||||
|
filter_qs_by_attr(Event.annotated(self.request.organizer.events, 'web'), self.request),
|
||||||
|
before, after, ebd, timezones
|
||||||
|
)
|
||||||
add_subevents_for_days(filter_qs_by_attr(SubEvent.annotated(SubEvent.objects.filter(
|
add_subevents_for_days(filter_qs_by_attr(SubEvent.annotated(SubEvent.objects.filter(
|
||||||
event__organizer=self.request.organizer,
|
event__organizer=self.request.organizer,
|
||||||
event__is_public=True,
|
event__is_public=True,
|
||||||
@@ -389,7 +393,7 @@ class WidgetAPIProductList(EventListMixin, View):
|
|||||||
else:
|
else:
|
||||||
if hasattr(self.request, 'event'):
|
if hasattr(self.request, 'event'):
|
||||||
evs = self.request.event.subevents_sorted(
|
evs = self.request.event.subevents_sorted(
|
||||||
self.request.event.subevents_annotated(self.request.sales_channel)
|
filter_qs_by_attr(self.request.event.subevents_annotated(self.request.sales_channel), self.request)
|
||||||
)
|
)
|
||||||
tz = pytz.timezone(request.event.settings.timezone)
|
tz = pytz.timezone(request.event.settings.timezone)
|
||||||
data['events'] = [
|
data['events'] = [
|
||||||
|
|||||||
@@ -1040,6 +1040,9 @@ var shared_root_methods = {
|
|||||||
} else {
|
} else {
|
||||||
url = this.$root.target_url + 'widget/product_list?lang=' + lang;
|
url = this.$root.target_url + 'widget/product_list?lang=' + lang;
|
||||||
}
|
}
|
||||||
|
if (this.$root.filter) {
|
||||||
|
url += '&' + this.$root.filter;
|
||||||
|
}
|
||||||
var cart_id = getCookie(this.cookieName);
|
var cart_id = getCookie(this.cookieName);
|
||||||
if (this.$root.voucher_code) {
|
if (this.$root.voucher_code) {
|
||||||
url += '&voucher=' + escape(this.$root.voucher_code);
|
url += '&voucher=' + escape(this.$root.voucher_code);
|
||||||
@@ -1212,6 +1215,7 @@ var create_widget = function (element) {
|
|||||||
var skip_ssl = element.attributes["skip-ssl-check"] ? true : false;
|
var skip_ssl = element.attributes["skip-ssl-check"] ? true : false;
|
||||||
var disable_vouchers = element.attributes["disable-vouchers"] ? true : false;
|
var disable_vouchers = element.attributes["disable-vouchers"] ? true : false;
|
||||||
var widget_data = JSON.parse(JSON.stringify(window.PretixWidget.widget_data));
|
var widget_data = JSON.parse(JSON.stringify(window.PretixWidget.widget_data));
|
||||||
|
var filter = element.attributes.filter ? element.attributes.filter.value : null;
|
||||||
for (var i = 0; i < element.attributes.length; i++) {
|
for (var i = 0; i < element.attributes.length; i++) {
|
||||||
var attrib = element.attributes[i];
|
var attrib = element.attributes[i];
|
||||||
if (attrib.name.match(/^data-.*$/)) {
|
if (attrib.name.match(/^data-.*$/)) {
|
||||||
@@ -1234,6 +1238,7 @@ var create_widget = function (element) {
|
|||||||
categories: null,
|
categories: null,
|
||||||
currency: null,
|
currency: null,
|
||||||
name: null,
|
name: null,
|
||||||
|
filter: filter,
|
||||||
voucher_code: voucher,
|
voucher_code: voucher,
|
||||||
display_net_prices: false,
|
display_net_prices: false,
|
||||||
voucher_explanation_text: null,
|
voucher_explanation_text: null,
|
||||||
@@ -1309,6 +1314,7 @@ var create_button = function (element) {
|
|||||||
voucher_code: voucher,
|
voucher_code: voucher,
|
||||||
items: items,
|
items: items,
|
||||||
error: null,
|
error: null,
|
||||||
|
filter: null,
|
||||||
widget_data: widget_data,
|
widget_data: widget_data,
|
||||||
widget_id: 'pretix-widget-' + widget_id,
|
widget_id: 'pretix-widget-' + widget_id,
|
||||||
button_text: button_text
|
button_text: button_text
|
||||||
|
|||||||
Reference in New Issue
Block a user