Jump to content
justb3a

Facebook Events

Recommended Posts

FacebookEvents

ProcessWire module to get Facebook Page Events using the Graph API.

Create an app on Facebook developers website

You have to create an app to get appId and appSecret. Those keys are required.
Go to Facebook Developers and add a new app.
Congrats! Now you can copy your Facebook appId and appSecret.

Get your Facebook page ID

You can either enter your facebook page ID or the facebook page name.
If you enter the Facebook page name, this module will get the page ID for you!

Call Module

$events = $modules->get('FacebookEvents')->getEvents();

Output Events

{% for event in events|reverse %}
  {% if event.start_time|date('U') > date().timestamp %}
    <div>
      {% set dts = modules.get('FacebookEvents').getDates(event) %}
      <a href="https://www.facebook.com/events/{{event.id}}/" title="Facebook">{{dts.dates}}:</a>
      {{event.name}} <em>{{dts.times}}</em>
    </div>
  {% endif %}
{% endfor %
  • Like 21

Share this post


Link to post
Share on other sites

At the moment the endpoint just returns: id, name, timezone, start_time, end_time, description.

But it's pretty easy to get the information about the place and cover. I updated the module to include it as well and updated the Graph Api Version to 2.9.

`$modules->get('FacebookEvents')->getEvents()` returns now the following data:

array(1) {
  [0]=>
  array(6) {
    ["id"]=>
    string(15) "123123123"
    ["name"]=>
    string(3) "xxx"
    ["timezone"]=>
    string(13) "Europe/Berlin"
    ["start_time"]=>
    string(24) "2017-06-23T16:00:00+0200"
    ["end_time"]=>
    string(24) "2017-06-23T18:30:00+0200"
    ["description"]=>
    string(3) "foo",
    ["place"]=>
    array(3) {
      ["name"]=>
      string(5) "Venue"
      ["location"]=>
      array(6) {
        ["city"]=>
        string(7) "Berlin"
        ["country"]=>
        string(7) "Germany"
        ["latitude"]=>
        float(xx.3321915)
        ["longitude"]=>
        float(xx.3735704)
        ["street"]=>
        string(17) "Street 14"
        ["zip"]=>
        string(5) "01234"
      }
      ["id"]=>
      string(15) "123123123"
    }
    ["cover"]=>
    array(4) {
      ["offset_x"]=>
      int(0)
      ["offset_y"]=>
      int(85)
      ["source"]=>
      string(148) "https://scontent.xx.fbcdn.net/v/t31.0-8/s720x720/..."
      ["id"]=>
      string(16) "123123123"
    }
  }
}

 

Having a quick look at the Graph API documentation, using the event ID one could send another request to get even more data. 
Please read the Graph API documentation at https://developers.facebook.com/docs/graph-api/reference/event/.

  • Like 2

Share this post


Link to post
Share on other sites

ok thx justb3a
i'll try that.

could you help me with outputing the dates. i'm a php-beginner and can't output the events. your code above is written in twig, is that an engine?
anyway i tried it like this:

<?php
	$events = $modules->get('FacebookEvents')->getEvents();
		echo "<ul>";
			foreach($events as $event) {
				echo "<li>$event->name</li>";
				}
		echo "</ul>";
?>

but i don't get any ouput from this.
 

maybe i did something wrong while creating the facebook-app. i added the ID and SECRET into the module and the page-name. but the module doesnt add the page-ID automatically!
do i have to be the owner of the facebook-page which events i want to get?

Share this post


Link to post
Share on other sites

The workflow is as follows:

  1. Enter Client ID and Secret
  2. Enter Page Name OR Page ID: If you enter the Page Name, make sure to copy it from the Facebook page url similar to `https://www.facebook.com/NameWithoutSpaces` => NameWithoutSpaces would be the Page Name
  3. Add `$events = $modules->get('FacebookEvents')->getEvents();` to a template and open the belonging page (frontend)
  4. Go back to module settings and check (reload before) if a page id has been added. If not, your page name could not be resolved.
  5. Now you should be able to receive events:
$events = $modules->get('FacebookEvents')->getEvents();
echo "<ul>";
foreach ($events as $event) {
  echo "<li>{$event['name']}</li>";
}
echo "</ul>";

$events is an array, so you have to use the following syntax: `$event['propertyName']`.

I found a little bug and updated the module, so please make sure to get the latest version.

  • Like 2

Share this post


Link to post
Share on other sites
3 hours ago, justb3a said:

$events is an array, so you have to use the following syntax: `$event['propertyName']`.

that was it!

thx, great module!
there should be a „buy-me-a-beer“-button (flattr, paypal, …)!

Share this post


Link to post
Share on other sites

me again,

everything worked fine. at first the cache was set to now. then i changed that to daily and moved the website to another directory. since then module doesn't get newly added events. it seems the old data is stored somewhere an no updates are possible.

i created a new app and tried it different APP-ID and had no luck.
i still get data output when the APP-ID, APP-SECRET and Facebook-Name-Fields are empty !? and i don't use any other cache-modules

am i doing something wrong?

Share this post


Link to post
Share on other sites

Have a look at your caches table. Search for name=Module.FacebookEvents. Delete this row.

Furthermore you could have a look at your modules table where class=FacebookEvents, column: data. 

  • Like 1

Share this post


Link to post
Share on other sites

it suddenly works now, i think the 24h were over since the last update.

i'll have look at the tables next time. thx

Share this post


Link to post
Share on other sites

ah

changed line:29 in FacebookEvents.module to:

const FB_PAGEEVENTS_URL = '%sv%s/%s/events/?fields=%s&access_token=%s&since=%s&until=%s&limit=50';

 

Share this post


Link to post
Share on other sites

Hi,

this is all working fine for me, nice module!

I have one question: is it also possible to display the image of the event?

I think i should use "Cover"  and "Source" but i'm not that good with php so I don't know in what sentence to use it..

Share this post


Link to post
Share on other sites

@ngrmm It's never a good idea to override somehing in the core or in a third-party module because if you update it your changes are overritten again. I updated the module and added an option in module settings to set the limit.

@Tacolombardi

<?php $events = $modules->get('FacebookEvents')->getEvents(); ?>
<ul>
  <?php foreach ($events as $event): ?>
    <li>
      <?=$event['name']?>
      <img src="<?=$event['cover']['source']?>" alt="<?=$event['name']?>" />
    </li>
  <?php endforeach; ?>
</ul>

 

  • Like 3

Share this post


Link to post
Share on other sites
On 1.6.2017 at 8:32 AM, justb3a said:

Have a look at your caches table. Search for name=Module.FacebookEvents. Delete this row.

Furthermore you could have a look at your modules table where class=FacebookEvents, column: data. 

still having problems. newly added events won't show up in frontend. i guess this has something to do with cache/tables.
i have to delete it manually, is there a way the module would do that automatically?

Share this post


Link to post
Share on other sites

What i did was to make the Page ID field editable, that was the only way to test the module with a dummy events feed and then switch it out to a different page; the clear module cache select item is not working for some reason...

in line 66 of the FacebookEventsConfig.php you can comment out this:

$field->collapsed = Inputfield::collapsedNoLocked;

fb_events1.thumb.jpg.10036a3e8744f370d4db601b86f025e6.jpg

...

:(

...

fc_events2.thumb.jpg.213dbdf62a2e2c4f176a1886a94e93af.jpg

I made some other changes to the module to allow the users to configure the since date, and until date; Once that's all stable i'll hopefully do a pull request on github for the extended features; and if i can figure out how to make it update the ID of the page if the cache is set to expire now, i'll post back here..

Share this post


Link to post
Share on other sites

@Macrura Are you using the latest version? I fixed a little bug just a few weeks ago. Looking forward to merge your PR :P

Share this post


Link to post
Share on other sites

What about this module makes to specific to PW 3.x and above? I would like to be able to use it on site using PW 2.7.2.

Share this post


Link to post
Share on other sites
15 minutes ago, Lance O. said:

What about this module makes to specific to PW 3.x and above? I would like to be able to use it on site using PW 2.7.2.

This module uses namespaces which has been introduced with PW 3. I upgraded all my projects to PW 3.x, so I have no need to test and support older versions. :) 

  • Like 1

Share this post


Link to post
Share on other sites

This may be a dumb question, but how do I get past events?

With normal usage I just get the future events, but when I modify the module at the getEvents() function and set the $sinceDate to 0, I get all past events aswell.

Am I missing an implemented solution intended by @justb3a?

Share this post


Link to post
Share on other sites

ok cool -thanks for testing out my version!

i will be submitting a PR soon so once that happens and if it is accepted you could switch back to the official branch; but if it works for you and satisfies your current requirements, it should be 'stable', there are just a few simple changes to the code and those added inputfields. if you do run into any issues, you can post an issue on the forked github issues page..

Share this post


Link to post
Share on other sites
On 28/10/2017 at 5:39 PM, Macrura said:

i will be submitting a PR soon so once that happens and if it is accepted you could switch back to the official branch; but if it works for you and satisfies your current requirements, it should be 'stable', there are just a few simple changes to the code and those added inputfields. if you do run into any issues, you can post an issue on the forked github issues page..

I created a "Pull Request" at my own and extended the module config, so one is able to define a date range and reverse sorting. Thanks @Macrura

  • Like 4

Share this post


Link to post
Share on other sites

all of a sudden module stopped working. i do not use any caching. i'm a bit puzzeld what happened
any changes from facebook?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By eelkenet
      Hi! I've created a small Inputfield module called InputfieldFloatRange which allows you to use an HTML5 <input type="range" ../> slider as an InputField. I needed something like this for a project where the client needs to be able to tweak this value more based on 'a feeling' than just entering a boring old number. Maybe more people can use this so I'm hereby releasing it into the wild.  
       
      What is it?
      The missing range slider Inputfield for Processwire. 
      What does it do?
      This module extends InputfieldFloat and allows you to use HTML5 range sliders for number fields in your templates.
      It includes a visible and editable value field, to override/tweak the value if required.  
      Features
      Min/max values Precision (number of decimals) Steps (Read more) Manual override of the selected value (will still adhere to the rules above) Usage
      Clone / zip repo Install FieldtypeFloatRange, this automatically installs the Inputfield Create new field of type `Float (range)` or convert an existing `Float`, `Integer` or `Text` field. To render the field's value simply echo `$page->field` Demo
      A field with Min=0, Max=1, Step=0.2, Precision=2

      Field with settings Min=0, Max=200, Step=0.25, Precision=2

       
      Todo
      Make the display-field's size configurable (will use the Input Size field setting)  Hopefully become redundant If it's usable for others I'll add it to the Modules list  
      Changelog
      v002
      - Fix issue where setting the step value to an empty value created problem with validation
      - Make the display-field optional 
      v001
      - Initial release
       
      Thanks!
       
       
    • By Robin S
      Another little admin helper module...
      Template Field Widths
      Adds a "Field widths" field to Edit Template that allows you to quickly set the widths of inputfields in the template.

      Why?
      When setting up a new template or trying out different field layouts I find it a bit slow and tedious to have to open each field individually in a modal just to set the width. This module speeds up the process.
      Installation
      Install the Template Field Widths module.
      Config options
      You can set the default presentation of the "Field widths" field to collapsed or open. Field widths entered into the Template Field Widths inputfield are only applied if the Edit Template form is submitted with the Template Field Widths inputfield in an opened state. "Collapsed" is the recommended setting if you think you might also use core inputs for setting field widths in a template context. You can choose Name or Label as the primary identifier shown for the field. The unchosen alternative will become the title attribute shown on hover. You can choose to show the original field width next to the template context field width.  
      https://github.com/Toutouwai/TemplateFieldWidths
      https://modules.processwire.com/modules/template-field-widths/
    • By adrian
      Tracy Debugger for ProcessWire
      The ultimate “swiss army knife” debugging and development tool for the ProcessWire CMF/CMS

       
      Integrates and extends Nette's Tracy debugging tool and adds 35+ custom tools designed for effective ProcessWire debugging and lightning fast development
      The most comprehensive set of instructions and examples is available at: https://adrianbj.github.io/TracyDebugger
      Modules Directory: http://modules.processwire.com/modules/tracy-debugger/
      Github: https://github.com/adrianbj/TracyDebugger
      A big thanks to @tpr for introducing me to Tracy and for the idea for this module and for significant feedback, testing, and feature suggestions.
    • By adrian
      This module allows you to automatically rename file (including image) uploads according to a configurable format
      This module lets you define as many rules as you need to determine how uploaded files will be named and you can have different rules for different pages, templates, fields, and file extensions, or one rule for all uploads. Renaming works for files uploaded via the admin interface and also via the API, including images added from remote URLs.   Github: https://github.com/adrianbj/CustomUploadNames
      Modules Directory: http://modules.processwire.com/modules/process-custom-upload-names/
      Renaming Rules
      The module config allows you to set an unlimited number of Rename Rules. You can define rules to specific fields, templates, pages, and file extensions. If a rule option is left blank, the rule with be applied to all fields/templates/pages/extensions. Leave Filename Format blank to prevent renaming for a specific field/template/page combo, overriding a more general rule. Rules are processed in order, so put more specific rules before more general ones. You can drag to change the order of rules as needed. The following variables can be used in the filename format: $page, $template, $field, and $file. For some of these (eg. $field->description), if they haven't been filled out and saved prior to uploading the image, renaming won't occur on upload, but will happen on page save (could be an issue if image has already been inserted into RTE/HTML field before page save). Some examples: $page->title mysite-{$template->name}-images $field->label $file->description {$page->name}-{$file->filesize}-kb prefix-[Y-m-d_H-i-s]-suffix (anything inside square brackets is is considered to be a PHP date format for the current date/time) randstring[n] (where n is the number of characters you want in the string) ### (custom number mask, eg. 001 if more than one image with same name on a page. This is an enhanced version of the automatic addition of numbers if required) If 'Rename on Save' is checked files will be renamed again each time a page is saved (admin or front-end via API). WARNING: this setting will break any direct links to the old filename, which is particularly relevant for images inserted into RTE/HTML fields. The Filename Format can be defined using plain text and PW $page variable, for example: mysite-{$page->path} You can preserve the uploaded filename for certain rules. This will allow you to set a general renaming rule for your entire site, but then add a rule for a specific page/template/field that does not rename the uploaded file. Just simply build the rule, but leave the Filename Format field empty. You can specify an optional character limit (to nearest whole word) for the length of the filename - useful if you are using $page->path, $path->name etc and have very long page names - eg. news articles, publication titles etc. NOTE - if you are using ProcessWire's webp features, be sure to use the useSrcExt because if you have jpg and png files on the same page and your rename rules result in the same name, you need to maintain the src extension so they are kept as separate files.
      $config->webpOptions = array(     'useSrcExt' => false, // Use source file extension in webp filename? (file.jpg.webp rather than file.webp) ); Acknowledgments
      The module config settings make use of code from Pete's EmailToPage module and the renaming function is based on this code from Ryan: http://processwire.com/talk/topic/3299-ability-to-define-convention-for-image-and-file-upload-names/?p=32623 (also see this post for his thoughts on file renaming and why it is the lazy way out - worth a read before deciding to use this module). 
       
       
      NOTE:
      This should not be needed on most sites, but I work with lots of sites that host PDFs and photos/vectors that are available for download and I have always renamed the files on upload because clients will often upload files with horrible meaningless filenames like:
      Final ReportV6 web version for John Feb 23.PDF

×
×
  • Create New...