PHP Events list plugin

  • Views Views: 18,430
  • Last updated Last updated:

Navigation

  • The PHP Events plugin allows for certain hooks into the internals of a Fabrik list. For each option the list model is represented by the variable $model.

    The following events are supported
    • onFiltersGot - Called when the list's filter array has been populated
    • onMakeFilters - Called when the list HTML filters are loaded
    • process
    • onPreloadData - Run before the list loads its data
    • onLoadData - After the data has loaded
    • onDeleteRows - Called when the list mode deletes rows. Attention: Code added here is also run on form's onDelete (i.e. if Delete button is activated), so don't use a form php plugin OnDelete at the same time.
    • onQueryBuildWhere - after the where statement has been created


    Changing the colour of a cell based on the value stored in a colour picker element.​


    Add the following code to the plugin's 'onLoadData' option. This allows us to alter the list's data before it is displayed:

    PHP:


    // $model is the list model, we want to get its data and then alter it.
    $data = $model->getData();

    foreach ($data as $group)
    {
    foreach ($group as $row)
    {
    // Set a default rgb colour that will be used if nothing has been filled in by the colour picker
    $default = '155,20,45' ;

    // tablename___colour_raw is the raw full name of the Colour Picker element
    $c = (string) $row->tablename___colour_raw === '' ? $default : $row->tablename___colour_raw;

    // Update the 'birthday' element, wrapping it with a span with our selected colour.
    $row->tablename___birthday = '<span style="color:rgb(' . $c . ')">' . $row->tablename___birthday . '<span>';
    }
    }

    Changing a date element, to show how many days old it is​


    Add the following code to the plugin's 'onLoadData' option. This allows us to alter the list's data before it is displayed:

    PHP:

    // $model is the list model, we want to get its data and then alter it.
    $data = $model->getData();

    foreach ($data as $group)
    {
    foreach ($group as $row)
    {
    $nowDate = strtotime($row->events___start_raw);
    $thenDate = strtotime("today");
    $dateDiff = $thenDate - $nowDate;
    $row->events___start = round($dateDiff / 86400);
    }
    }

    Sending an email onDeleteRows​

    PHP:

    $data = $model->getData();

    //Fabrik4 and Fabrik3
    $app = Joomla\CMS\Factory::getApplication();

    foreach ($data as $group) {
    foreach ($group as $row) {
    FabrikWorker::sendMail(
    $app->getCfg('mailfrom'),
    $app->getCfg('fromname'),
    $row->tablename___email_raw,
    "A row has been deleted!",
    "Some message text, perhaps using some form data like this: {$row->tablename___element} "
    );
    }
    }

    /*Fabrik3 only
    foreach ($data as $group) {
    foreach ($group as $row) {
    FabrikWorker::sendMail(
    $this->config->get('mailfrom'),
    $this->config->get('fromname'),
    $row->tablename___email_raw,
    "A row has been deleted!",
    "Some message text, perhaps using some form data like this: {$row->tablename___element} "
    );
    }
    }
    */

    Adding some filter onQueryBuildWhere​

    If some filter element is selected add more conditions
    PHP:
    $f=$model->filters;
    if (count($f)==0) return;// no filter active
    if (in_array('220',$f['elementid']) ||in_array('222',$f['elementid'])) //if a filter is set for element_id 220 or 222
    {
    $model->setPluginQueryWhere('some-keyword', "privacy=2");//exclude all records with privacy=2 (will add AND privacy=2 to filter condition)
    }
    else {
    $model->unsetPluginQueryWhere('some-keyword');//remove the additional filter condition
    }
Back
Top