This is the multi-page printable view of this section. Click here to print.

Return to the regular view of this page.

Program Event Framework

A robust set of content types and syncer modules that build interactive tools to help members find and book activities.

    “Program Event Framework” refers to the entire ecosystem of content and modules in YMCA Website Services that work together to build Activity Finder, Group Schedules, and more.

    Content Types

    These provide the containers for PEF content in Drupal:


    These provide integrations to pull content from external systems into the content types:


    These display the content for users to discover:

    Data model

    The network of data structures in PEF can be confusing. Here’s how it all works

    title: PEF Relationships
        program {
            entityRefTerm field_program_color
            paragraph field_content
            paragraph field_header_content
            paragraph field_sidebar_content
            textFormattedLong field_program_description
            entityRefMedia field_program_icon
            entityRefMedia field_program_image
            layout layout_builder__layout
            meta field_meta_tags
            bool field_use_layout_builder
        program_subcategory {
            paragraph field_bottom_content
            entityRefTerm field_category_color
            paragraph field_content
            paragraph field_sidebar_content
            textFormattedLong field_category_description
            paragraph field_header_content
            entityRefMedia field_category_image
            layout layout_builder__layout
            meta field_meta_tags
            entityRefProgram field_category_program
            bool field_use_layout_builder
        program_subcategory }|--|| program : field_category_program
        activity {
            textFormattedLong field_activity_description
            entityRefProgSub field_activity_category
        activity }o--|| program_subcategory : field_activity_category
        class {
            entityRefActivity field_class_activity
            paragraph field_bottom_content
            paragraph field_content
            textFormattedLong field_class_description
            paragraph field_header_content
            meta field_meta_tags
            paragraph field_sidebar_content
        class }o--|| activity : field_class_activity
        session {
            listText field_activity_type
            entityRefClass field_session_class
            textFormattedLong field_session_description
            dateRange field_session_exclusions
            listText field_session_gender
            numberInt field_availability
            bool field_session_in_mbrsh
            textPlain field_session_instructor
            entityRefLoc field_session_location
            numberInt field_session_max_age
            listText field_session_max_grade
            numberDec field_session_mbr_price
            numberInt field_session_min_age
            listText field_session_min_grade
            numberDec field_session_nmbr_price
            bool field_session_online
            entityRef field_session_plocation
            numberInt field_productid
            link field_session_reg_link
            textPlain field_session_room
            paragraph field_session_time
            numberInt field_wait_list_availability
        session }|--|| class : field_session_class
        session ||--o{ session_time_paragraph : field_session_type
        session_time_paragraph {
            dateRange field_session_time_date
            listText field_session_time_days
            textPlain field_session_time_override
        branch {
        camp {
        facility {
        session }o--|| branch : field_session_location
        session }o--|| camp : field_session_location
        session }o--|| facility : field_session_location
        session }o--|| facility : field_session_plocation

    More information on how this data gets out into each display will be coming soon.