Nestable\Services\NestableService::renderAsDropdown PHP Метод

renderAsDropdown() публичный Метод

Convert to dropdown.
public renderAsDropdown ( object $data = false, integer $parent, boolean $first = true, integer $level ) : string
$data object Illuminate\Support\Collection
$parent integer Current parent id
$first boolean first run
$level integer nest counter
Результат string
    public function renderAsDropdown($data = false, $parent = 0, $first = true, $level = 0)
    {
        $args = $this->setParameters(func_get_args());
        // open the select tag
        if ($first) {
            $tree = $first ? '<select ' . $this->addAttributes() . ' ' : '';
        }
        // if pass array data to selected method procces will generate multiple dropdown menu.
        if ($first && (is_array($this->selected) || $this->multiple == true)) {
            $tree .= ' multiple';
        }
        if ($first) {
            $tree .= $first ? '>' : '';
        }
        $args['data']->each(function ($child_item) use(&$tree, $args, $level) {
            $childItems = '';
            if (intval($child_item[$this->parent]) == intval($args['parent'])) {
                // Get the value
                $value = $child_item[$this->config['dropdown']['value']];
                // Get the label text
                $label = $child_item[$this->config['dropdown']['label']];
                $prefix = $this->config['dropdown']['prefix'];
                // Generating nest level
                $levels = str_repeat('&nbsp;&nbsp;', $level);
                // check the does want select value
                $selected = $this->doSelect($value, $label);
                // Generating dropdown item
                $childItems .= '<option ' . $selected . ' value="' . $value . '">' . $levels . $prefix . $label . '</option>';
                $item_id = $child_item[$this->config['primary_key']];
                // check the child element
                if ($this->hasChild($this->parent, $item_id, $args['data'])) {
                    ++$level;
                    // nest level increasing
                    // function call again for child elements
                    $childItems .= $this->renderAsDropdown($args['data'], $item_id, false, $level);
                }
            }
            // current data contact to the parent variable
            $tree = $tree . $childItems;
        });
        // close the select tag
        $tree = $first ? $tree . '</select>' : $tree;
        return $tree;
    }