# Conditional Functions

## if/else Function

The `#if` helper function is used to verify whether a value of a user or event attribute exists or is true. Upon message dispatch, if the verified  attribute's value is equal to `false`, `undefined`, `null`, `""`, `0`, or `[]`, CrossEngage will not render the block.

The syntax of this helper function is:

```jsx
{{#if [attribute]}}
   ...
{{/if}}
```

| Property    | Description                                                                                                         |
| ----------- | ------------------------------------------------------------------------------------------------------------------- |
| `attribute` | The user or event attribute that is used for the verification. e.g. `user.[traits.birthday]`,  `[properties.price]` |

### Use Cases

#### Display content only if it exists

For this example, we only display the user's first name if it exists.

```jsx
{{#if user.[traits.firstName]}}
    <h1>Hi {{user.[traits.firstName]}}!</h1>
{{else}}
    <h1>Hi there!</h1>
{{/if}}
```

Once the function is evaluated, it displays either:

```markup
<!--Assuming the user's first name would be John.-->
<h1>Hi John!</h1>
```

or

```markup
<!--Whenever the first name attribute does not exist for a user.-->
<h1>Hi there!</h1>
```

## cif/else Function

CrossEngage offers a more advanced version of the `#if` helper function that allows you to perform additional operations and only display content if a certain criteria is met.&#x20;

The syntax of this helper function is:

```jsx
{{#cif '{
    "property": "attribute", 
    "operator": "operator", 
    "value": "value"
}'}}
    ...
{{else}}
    ...
{{/cif}}
```

{% hint style="info" %}
For a list of operators that can be used for comparison, please check the [Operators ](/data-and-engagement-platform/messages/personalization/operators.md)page.
{% endhint %}

{% hint style="info" %}
Optionally, you may use the `{{else}}` block that will display other content if the condition is not met. The `{{else}}` block should be placed within the `{{#cif}}{{/cif}}` tags for the function to be correctly processed.&#x20;
{% endhint %}

| Property    | Description                                                                                                                                                                                                                                                     |
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `attribute` | <p>The user or event attribute that is used for the verification. e.g. <code>user.\[traits.birthday]</code>,  <code>\[properties.price]</code></p><p>Please note that journey steps helper with array attribute e.g. cart is not supported for advanced If.</p> |
| `operator`  | The operator that will be used to asses whether the criteria is met or not. e.g. `==`. `<=`. See the list of all available operators and their compatibility below.                                                                                             |
| `value`     | The value the `attribute` property will be compared against. e.g `male`, `0`                                                                                                                                                                                    |

### Use Cases <a href="#operators" id="operators"></a>

#### Gender Based Salutation

For this example, we output the salutation of a client according to their gender.&#x20;

```jsx
Dear {{#cif '{
    "property": "user.[traits.gender]", 
    "operator": "==", 
    "value": "male"
}'}}
    Mr. {{user.[traits.lastName]}}
{{else}}
    {{#cif '{
        "property": "user.[traits.gender]", 
        "operator": "==", 
        "value": "female"
    }'}}
        Mrs. {{user.[traits.lastName]}}
    {{else}}
        Visitor
    {{/cif}}
{{/cif}}
```

Once the function is evaluated, it displays the salutation according to the user's gender. For example, the function may result in:&#x20;

* `Dear Mr. Doe`,  if the user is male
* `Dear Mrs. Doe`, if the user is female
* `Dear Visitor`, if the user's gender is unknown

#### Stock Level Low

For this example, we output a call to action statement when the stock of a certain product is low.&#x20;

```jsx
{{#cif '{
    "property": "[properties.stockQuantity]", 
    "operator": "<", 
    "value": "4"
}'}}
    <p>Less than 4 items available. Buy now!</p>
{{/cif}} 
```

Once the function is evaluated, if a product's stock is less than 4, it displays the content below in the section where it is used in the message.:

```jsx
<p>Less than 4 items available. Buy now!</p>
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://documentation.crossengage.io/data-and-engagement-platform/messages/personalization/general-helper-functions/conditional-functions.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
