Example #1
0
        function render_layout($field, $layout, $i, $value)
        {
            // vars
            $order = 0;
            $el = 'div';
            $div = array('class' => 'layout', 'data-id' => $i, 'data-layout' => $layout['name']);
            // collapsed
            $collapsed = acf_get_user_setting('collapsed_' . $field['key'], '');
            // cookie fallback ( version < 5.3.2 )
            if ($collapsed === '') {
                $collapsed = acf_extract_var($_COOKIE, "acf_collapsed_{$field['key']}", '');
                $collapsed = str_replace('|', ',', $collapsed);
                acf_update_user_setting('collapsed_' . $field['key'], $collapsed);
            }
            // explode
            $collapsed = explode(',', $collapsed);
            $collapsed = array_filter($collapsed, 'is_numeric');
            // collapsed class
            if (in_array($i, $collapsed)) {
                $div['class'] .= ' -collapsed';
            }
            // clone
            if (is_numeric($i)) {
                $order = $i + 1;
            } else {
                $div['class'] .= ' acf-clone';
            }
            ?>
<div <?php 
            acf_esc_attr_e($div);
            ?>
>
			
	<div class="acf-hidden">
		<?php 
            acf_hidden_input(array('name' => "{$field['name']}[{$i}][acf_fc_layout]", 'value' => $layout['name']));
            ?>
	</div>
	
	<div class="acf-fc-layout-handle">
		<span class="fc-layout-order"><?php 
            echo $order;
            ?>
</span> <?php 
            echo $layout['label'];
            ?>
	</div>
	
	<ul class="acf-fc-layout-controlls acf-hl">
		<li class="acf-fc-show-on-hover">
			<a class="acf-icon -plus small" href="#" data-event="add-layout" title="<?php 
            _e('Add layout', 'acf');
            ?>
"></a>
		</li>
		<li class="acf-fc-show-on-hover">
			<a class="acf-icon -minus small" href="#" data-event="remove-layout" title="<?php 
            _e('Remove layout', 'acf');
            ?>
"></a>
		</li>
		<li>
			<a class="acf-icon -collapse small" href="#" data-event="collapse-layout" title="<?php 
            _e('Click to toggle', 'acf');
            ?>
"></a>
		</li>
	</ul>
	
<?php 
            if (!empty($layout['sub_fields'])) {
                ?>
	
	<?php 
                if ($layout['display'] == 'table') {
                    // update vars
                    $el = 'td';
                    ?>
	<table class="acf-table">
		
		<thead>
			<tr>
				<?php 
                    foreach ($layout['sub_fields'] as $sub_field) {
                        $atts = array('class' => "acf-th acf-th-{$sub_field['name']}", 'data-key' => $sub_field['key']);
                        // Add custom width
                        if ($sub_field['wrapper']['width']) {
                            $atts['data-width'] = $sub_field['wrapper']['width'];
                        }
                        ?>
					<th <?php 
                        acf_esc_attr_e($atts);
                        ?>
>
						<?php 
                        acf_the_field_label($sub_field);
                        ?>
						<?php 
                        if ($sub_field['instructions']) {
                            ?>
							<p class="description"><?php 
                            echo $sub_field['instructions'];
                            ?>
</p>
						<?php 
                        }
                        ?>
					</th>
					
				<?php 
                    }
                    ?>
 
			</tr>
		</thead>
		
		<tbody>
	<?php 
                } else {
                    ?>
	<div class="acf-fields <?php 
                    if ($layout['display'] == 'row') {
                        ?>
-left<?php 
                    }
                    ?>
">
	<?php 
                }
                ?>
	
		<?php 
                // loop though sub fields
                foreach ($layout['sub_fields'] as $sub_field) {
                    // prevent repeater field from creating multiple conditional logic items for each row
                    if ($i !== 'acfcloneindex') {
                        $sub_field['conditional_logic'] = 0;
                    }
                    // add value
                    if (isset($value[$sub_field['key']])) {
                        // this is a normal value
                        $sub_field['value'] = $value[$sub_field['key']];
                    } elseif (isset($sub_field['default_value'])) {
                        // no value, but this sub field has a default value
                        $sub_field['value'] = $sub_field['default_value'];
                    }
                    // update prefix to allow for nested values
                    $sub_field['prefix'] = "{$field['name']}[{$i}]";
                    // render input
                    acf_render_field_wrap($sub_field, $el);
                }
                ?>
			
	<?php 
                if ($layout['display'] == 'table') {
                    ?>
		</tbody>
	</table>
	<?php 
                } else {
                    ?>
	</div>
	<?php 
                }
                ?>

<?php 
            }
            ?>

</div>
<?php 
        }
Example #2
0
        function render_field($field)
        {
            // ensure value is an array
            if (empty($field['value'])) {
                $field['value'] = array();
            }
            // rows
            $field['min'] = empty($field['min']) ? 0 : $field['min'];
            $field['max'] = empty($field['max']) ? 0 : $field['max'];
            // populate the empty row data (used for acfcloneindex and min setting)
            $empty_row = array();
            foreach ($field['sub_fields'] as $f) {
                $empty_row[$f['key']] = isset($f['default_value']) ? $f['default_value'] : false;
            }
            // If there are less values than min, populate the extra values
            if ($field['min']) {
                for ($i = 0; $i < $field['min']; $i++) {
                    // continue if already have a value
                    if (array_key_exists($i, $field['value'])) {
                        continue;
                    }
                    // populate values
                    $field['value'][$i] = $empty_row;
                }
            }
            // If there are more values than man, remove some values
            if ($field['max']) {
                for ($i = 0; $i < count($field['value']); $i++) {
                    if ($i >= $field['max']) {
                        unset($field['value'][$i]);
                    }
                }
            }
            // setup values for row clone
            $field['value']['acfcloneindex'] = $empty_row;
            // show columns
            $show_order = true;
            $show_add = true;
            $show_remove = true;
            if ($field['max']) {
                if ($field['max'] == 1) {
                    $show_order = false;
                }
                if ($field['max'] <= $field['min']) {
                    $show_remove = false;
                    $show_add = false;
                }
            }
            // field wrap
            $el = 'td';
            $before_fields = '';
            $after_fields = '';
            if ($field['layout'] == 'row') {
                $el = 'tr';
                $before_fields = '<td class="acf-table-wrap"><table class="acf-table">';
                $after_fields = '</table></td>';
            } elseif ($field['layout'] == 'block') {
                $el = 'div';
                $before_fields = '<td class="acf-fields">';
                $after_fields = '</td>';
            }
            // hidden input
            acf_hidden_input(array('type' => 'hidden', 'name' => $field['name']));
            ?>
<div <?php 
            acf_esc_attr_e(array('class' => 'acf-repeater', 'data-min' => $field['min'], 'data-max' => $field['max']));
            ?>
>
<table <?php 
            acf_esc_attr_e(array('class' => "acf-table acf-input-table {$field['layout']}-layout"));
            ?>
>
	
	<?php 
            if ($field['layout'] == 'table') {
                ?>
		<thead>
			<tr>
				<?php 
                if ($show_order) {
                    ?>
					<th class="order"><span class="order-spacer"></span></th>
				<?php 
                }
                ?>
				
				<?php 
                foreach ($field['sub_fields'] as $sub_field) {
                    $atts = array('class' => "acf-th acf-th-{$sub_field['name']}", 'data-key' => $sub_field['key']);
                    // Add custom width
                    if ($sub_field['wrapper']['width']) {
                        $atts['data-width'] = $sub_field['wrapper']['width'];
                    }
                    ?>
					
					<th <?php 
                    acf_esc_attr_e($atts);
                    ?>
>
						<?php 
                    acf_the_field_label($sub_field);
                    ?>
						<?php 
                    if ($sub_field['instructions']) {
                        ?>
							<p class="description"><?php 
                        echo $sub_field['instructions'];
                        ?>
</p>
						<?php 
                    }
                    ?>
					</th>
					
				<?php 
                }
                ?>

				<?php 
                if ($show_remove) {
                    ?>
					<th class="remove"><span class="remove-spacer"></span></th>
				<?php 
                }
                ?>
			</tr>
		</thead>
	<?php 
            }
            ?>
	
	<tbody>
		<?php 
            foreach ($field['value'] as $i => $row) {
                ?>
			<tr class="acf-row<?php 
                echo $i === 'acfcloneindex' ? ' acf-clone' : '';
                ?>
">
				
				<?php 
                if ($show_order) {
                    ?>
					<td class="order" title="<?php 
                    _e('Drag to reorder', 'acf');
                    ?>
"><?php 
                    echo intval($i) + 1;
                    ?>
</td>
				<?php 
                }
                ?>
				
				<?php 
                echo $before_fields;
                ?>
				
				<?php 
                foreach ($field['sub_fields'] as $sub_field) {
                    // prevent repeater field from creating multiple conditional logic items for each row
                    if ($i !== 'acfcloneindex') {
                        $sub_field['conditional_logic'] = 0;
                    }
                    // add value
                    if (isset($row[$sub_field['key']])) {
                        // this is a normal value
                        $sub_field['value'] = $row[$sub_field['key']];
                    } elseif (isset($sub_field['default_value'])) {
                        // no value, but this sub field has a default value
                        $sub_field['value'] = $sub_field['default_value'];
                    }
                    // update prefix to allow for nested values
                    $sub_field['prefix'] = "{$field['name']}[{$i}]";
                    // render input
                    acf_render_field_wrap($sub_field, $el);
                    ?>
					
				<?php 
                }
                ?>
				
				<?php 
                echo $after_fields;
                ?>
				
				<?php 
                if ($show_remove) {
                    ?>
					<td class="remove">
						<a class="acf-icon small acf-repeater-add-row" href="#" data-before="1" title="<?php 
                    _e('Add row', 'acf');
                    ?>
"><i class="acf-sprite-add"></i></a>
						<a class="acf-icon small acf-repeater-remove-row" href="#" title="<?php 
                    _e('Remove row', 'acf');
                    ?>
"><i class="acf-sprite-remove"></i></a>
					</td>
				<?php 
                }
                ?>
				
			</tr>
		<?php 
            }
            ?>
	</tbody>
</table>
<?php 
            if ($show_add) {
                ?>
	
	<ul class="acf-hl acf-clearfix">
		<li class="acf-fr">
			<a href="#" class="acf-button blue acf-repeater-add-row"><?php 
                echo $field['button_label'];
                ?>
</a>
		</li>
	</ul>
			
<?php 
            }
            ?>
</div>
<?php 
        }
Example #3
0
        function render_layout($field, $layout, $i, $value)
        {
            // vars
            $order = 0;
            // atts
            $layout_atts = array('class' => 'layout', 'data-layout' => $layout['name'], 'data-toggle' => 'open');
            $table_atts = array('class' => "acf-table acf-input-table {$layout['display']}-layout");
            // collapsed
            if (!empty($_COOKIE["acf_collapsed_{$field['key']}"])) {
                $collapsed = $_COOKIE["acf_collapsed_{$field['key']}"];
                $collapsed = explode('|', $collapsed);
                if (in_array($i, $collapsed)) {
                    $layout_atts['data-toggle'] = 'closed';
                    $table_atts['style'] = 'display:none;';
                }
            }
            // clone
            if (is_numeric($i)) {
                $order = $i + 1;
            } else {
                $layout_atts['class'] .= ' acf-clone';
            }
            // field wrap
            $el = 'td';
            $before_fields = '';
            $after_fields = '';
            if ($layout['display'] == 'row') {
                $el = 'tr';
                $before_fields = '<td class="acf-table-wrap"><table class="acf-table">';
                $after_fields = '</table></td>';
            } elseif ($layout['display'] == 'block') {
                $el = 'div';
                $before_fields = '<td class="acf-fields">';
                $after_fields = '</td>';
            }
            ?>
<div <?php 
            acf_esc_attr_e($layout_atts);
            ?>
>
			
	<div style="display:none">
		<?php 
            acf_hidden_input(array('name' => "{$field['name']}[{$i}][acf_fc_layout]", 'value' => $layout['name']));
            ?>
	</div>
	
	<div class="acf-fc-layout-handle">
		<span class="fc-layout-order"><?php 
            echo $order;
            ?>
</span> <?php 
            echo $layout['label'];
            ?>
	</div>
	
	<ul class="acf-fc-layout-controlls acf-hl acf-clearfix">
		<li>
			<a class="acf-icon acf-icon-plus small acf-fc-add" href="#" data-before="1" title="<?php 
            _e('Add layout', 'acf');
            ?>
"></a>
		</li>
		<li>
			<a class="acf-icon acf-icon-minus small acf-fc-remove" href="#" title="<?php 
            _e('Remove layout', 'acf');
            ?>
"></a>
		</li>
	</ul>
	
<?php 
            if (!empty($layout['sub_fields'])) {
                ?>
		
	<table <?php 
                acf_esc_attr_e($table_atts);
                ?>
>
		
		<?php 
                if ($layout['display'] == 'table') {
                    ?>
		
			<thead>
				<tr>
				
					<?php 
                    foreach ($layout['sub_fields'] as $sub_field) {
                        $atts = array('class' => "acf-th acf-th-{$sub_field['name']}", 'data-key' => $sub_field['key']);
                        // Add custom width
                        if ($sub_field['wrapper']['width']) {
                            $atts['data-width'] = $sub_field['wrapper']['width'];
                        }
                        ?>
						
						<th <?php 
                        acf_esc_attr_e($atts);
                        ?>
>
							<?php 
                        acf_the_field_label($sub_field);
                        ?>
							<?php 
                        if ($sub_field['instructions']) {
                            ?>
								<p class="description"><?php 
                            echo $sub_field['instructions'];
                            ?>
</p>
							<?php 
                        }
                        ?>
						</th>
						
					<?php 
                    }
                    ?>
 

				</tr>
			</thead>
			
		<?php 
                }
                ?>
		
		<tbody>
			<tr>
			<?php 
                echo $before_fields;
                // loop though sub fields
                foreach ($layout['sub_fields'] as $sub_field) {
                    // prevent repeater field from creating multiple conditional logic items for each row
                    if ($i !== 'acfcloneindex') {
                        $sub_field['conditional_logic'] = 0;
                    }
                    // add value
                    if (isset($value[$sub_field['key']])) {
                        // this is a normal value
                        $sub_field['value'] = $value[$sub_field['key']];
                    } elseif (isset($sub_field['default_value'])) {
                        // no value, but this sub field has a default value
                        $sub_field['value'] = $sub_field['default_value'];
                    }
                    // update prefix to allow for nested values
                    $sub_field['prefix'] = "{$field['name']}[{$i}]";
                    // render input
                    acf_render_field_wrap($sub_field, $el);
                }
                // layout: Row
                echo $after_fields;
                ?>
							
			</tr>
		</tbody>
		
	</table>

<?php 
            }
            ?>

</div>
<?php 
        }
					<?php 
    foreach ($field['sub_fields'] as $sub_field) {
        $atts = array('class' => "acf-th acf-th-{$sub_field['name']}", 'data-key' => $sub_field['key']);
        // Add custom width
        if ($sub_field['wrapper']['width']) {
            $atts['data-width'] = $sub_field['wrapper']['width'];
        }
        ?>

						<th <?php 
        acf_esc_attr_e($atts);
        ?>
>
							<?php 
        acf_the_field_label($sub_field);
        ?>
							<?php 
        if ($sub_field['instructions']) {
            ?>
					<p class="description"><?php 
            echo $sub_field['instructions'];
            ?>
</p>
				<?php 
        }
        ?>
				</th>

			<?php 
    }
Example #5
0
        function render_field($field)
        {
            // vars
            $div = array('class' => 'acf-repeater', 'data-min' => $field['min'], 'data-max' => $field['max']);
            // ensure value is an array
            if (empty($field['value'])) {
                $field['value'] = array();
                $div['class'] .= ' -empty';
            }
            // rows
            $field['min'] = empty($field['min']) ? 0 : $field['min'];
            $field['max'] = empty($field['max']) ? 0 : $field['max'];
            // populate the empty row data (used for acfcloneindex and min setting)
            $empty_row = array();
            // If there are less values than min, populate the extra values
            if ($field['min']) {
                for ($i = 0; $i < $field['min']; $i++) {
                    // continue if already have a value
                    if (array_key_exists($i, $field['value'])) {
                        continue;
                    }
                    // populate values
                    $field['value'][$i] = $empty_row;
                }
            }
            // If there are more values than man, remove some values
            if ($field['max']) {
                for ($i = 0; $i < count($field['value']); $i++) {
                    if ($i >= $field['max']) {
                        unset($field['value'][$i]);
                    }
                }
            }
            // setup values for row clone
            $field['value']['acfcloneindex'] = $empty_row;
            // show columns
            $show_order = true;
            $show_add = true;
            $show_remove = true;
            if ($field['max']) {
                if ($field['max'] == 1) {
                    $show_order = false;
                }
                if ($field['max'] <= $field['min']) {
                    $show_remove = false;
                    $show_add = false;
                }
            }
            // field wrap
            $el = 'td';
            $before_fields = '';
            $after_fields = '';
            if ($field['layout'] == 'row') {
                $el = 'div';
                $before_fields = '<td class="acf-fields -left">';
                $after_fields = '</td>';
            } elseif ($field['layout'] == 'block') {
                $el = 'div';
                $before_fields = '<td class="acf-fields">';
                $after_fields = '</td>';
            }
            // layout
            $div['class'] .= ' -' . $field['layout'];
            // hidden input
            acf_hidden_input(array('type' => 'hidden', 'name' => $field['name']));
            // collapsed
            $collapsed = array();
            if ($field['collapsed']) {
                // get user setting
                $collapsed = acf_get_user_setting('collapsed_' . $field['key'], '');
                $collapsed = explode(',', $collapsed);
                $collapsed = array_filter($collapsed, 'is_numeric');
                // add target class
                foreach (array_keys($field['sub_fields']) as $i) {
                    if ($field['sub_fields'][$i]['key'] === $field['collapsed']) {
                        $field['sub_fields'][$i]['wrapper']['class'] .= ' -collapsed-target';
                    }
                }
            }
            ?>
<div <?php 
            acf_esc_attr_e($div);
            ?>
>
<table class="acf-table">
	
	<?php 
            if ($field['layout'] == 'table') {
                ?>
		<thead>
			<tr>
				<?php 
                if ($show_order) {
                    ?>
					<th class="acf-row-handle"><span></span></th>
				<?php 
                }
                ?>
				
				<?php 
                foreach ($field['sub_fields'] as $sub_field) {
                    $atts = array('class' => 'acf-th', 'data-key' => $sub_field['key']);
                    // add type
                    $atts['class'] .= ' acf-th-' . $sub_field['type'];
                    // Add custom width
                    if ($sub_field['wrapper']['width']) {
                        $atts['data-width'] = $sub_field['wrapper']['width'];
                    }
                    ?>
					<th <?php 
                    acf_esc_attr_e($atts);
                    ?>
>
						<?php 
                    acf_the_field_label($sub_field);
                    ?>
						<?php 
                    if ($sub_field['instructions']) {
                        ?>
							<p class="description"><?php 
                        echo $sub_field['instructions'];
                        ?>
</p>
						<?php 
                    }
                    ?>
					</th>
					
				<?php 
                }
                ?>

				<?php 
                if ($show_remove) {
                    ?>
					<th class="acf-row-handle"><span></span></th>
				<?php 
                }
                ?>
			</tr>
		</thead>
	<?php 
            }
            ?>
	
	<tbody>
		<?php 
            foreach ($field['value'] as $i => $row) {
                $row_class = 'acf-row';
                if ($i === 'acfcloneindex') {
                    $row_class .= ' acf-clone';
                } elseif (in_array($i, $collapsed)) {
                    $row_class .= ' -collapsed';
                }
                ?>
			<tr class="<?php 
                echo $row_class;
                ?>
" data-id="<?php 
                echo $i;
                ?>
">
				
				<?php 
                if ($show_order) {
                    ?>
					<td class="acf-row-handle order" title="<?php 
                    _e('Drag to reorder', 'acf');
                    ?>
">
						<?php 
                    if ($field['collapsed']) {
                        ?>
						<a class="acf-icon -collapse small" href="#" data-event="collapse-row" title="<?php 
                        _e('Click to toggle', 'acf');
                        ?>
"></a>
						<?php 
                    }
                    ?>
						<span><?php 
                    echo intval($i) + 1;
                    ?>
</span>
					</td>
				<?php 
                }
                ?>
				
				<?php 
                echo $before_fields;
                ?>
				
				<?php 
                foreach ($field['sub_fields'] as $sub_field) {
                    // prevent repeater field from creating multiple conditional logic items for each row
                    if ($i !== 'acfcloneindex') {
                        $sub_field['conditional_logic'] = 0;
                    }
                    // add value
                    if (isset($row[$sub_field['key']])) {
                        // this is a normal value
                        $sub_field['value'] = $row[$sub_field['key']];
                    } elseif (isset($sub_field['default_value'])) {
                        // no value, but this sub field has a default value
                        $sub_field['value'] = $sub_field['default_value'];
                    }
                    // update prefix to allow for nested values
                    $sub_field['prefix'] = "{$field['name']}[{$i}]";
                    // render input
                    acf_render_field_wrap($sub_field, $el);
                    ?>
					
				<?php 
                }
                ?>
				
				<?php 
                echo $after_fields;
                ?>
				
				<?php 
                if ($show_remove) {
                    ?>
					<td class="acf-row-handle remove">
						<a class="acf-icon -plus small" href="#" data-event="add-row" title="<?php 
                    _e('Add row', 'acf');
                    ?>
"></a>
						<a class="acf-icon -minus small" href="#" data-event="remove-row" title="<?php 
                    _e('Remove row', 'acf');
                    ?>
"></a>
					</td>
				<?php 
                }
                ?>
				
			</tr>
		<?php 
            }
            ?>
	</tbody>
</table>
<?php 
            if ($show_add) {
                ?>
	
	<ul class="acf-hl">
		<li class="acf-fr">
			<a href="#" class="acf-button blue" data-event="add-row"><?php 
                echo $field['button_label'];
                ?>
</a>
		</li>
	</ul>
			
<?php 
            }
            ?>
</div>
<?php 
        }