La extensión es una behavior, es decir, puede aplicarse a cualquier modelo, … entonces en el ejemplo en cuestión se asume un modelo llamado "Root" que tiene una propiedad "title", además de las propiedades o campos propios de la extensión.
[color="#222222"][font="Arial, sans-serif"][size="4"]Esto dice la documentación, lo que indica que el behavior adiciona esa función o scope para devolver de Category, sólo los elementos raíces, es decir, que no tienen padres.[/size][/font][/color]
Sí y No, básicamente lo que hay que hacer es que las tablas que necesiten tener el "anidamiento" o "jerarquía" o "nodos" deben incluir los campos de la extensión… que en el caso del ejemplo es la tabla Category, que asumo que tiene los campos:
id // La llave primaria
title // Este es de la tabla como tal
lft //Nodo anterior, que puede ser NULL para los casos en que sea Root
Creo que el asunto es más de comprensión de lo que es un behavior, que palabras más, palabras menos, es el método que utiliza yii para permitir herencia múltiple, porque internamente cuando una función o variable no existe en la clase como tal, entonces procede a buscarlas en los behaviors asociados al modelo.
Un behavior NO es un modelo en sí, ni es un controlador… es sencillamente una clase que contiene funciones y variables que pueden "adjuntarse" a otra clase para su posterior uso.
Podríamos verlo en cierto modo como los traits de PHP 5.4, pero para PHP 5.2 que no soporta este tipo de cosas.
y para crear un nuevo nodo se realiza de esta forma
$root = new Category();
$root->nombre = 'root';
$root->saveNode( false );
ahora si logré entender la funcionalidad y la forma de hacerlo(considerando que en la tabla category existe el campo nombre), sólo un único detalle; como modifico el nombre de un nodo ya creado? y como puedo crear un front-end para mostrar esto, si hay una extensión perfecto, y si no, bueno ahora puedo hacerlo con lo que tengo. Gracias una vez mas
No he usado la extensión, pero podría suponer que como cualquier otro modelo usando las funciones de CActiveRecord:
$model = Category::model()->findByPk($id); // o findByAttributes, o find()...
$model->nombre = 'Otro nombre';
$model->saveNode(false); // No estoy seguro si solo con save() funciona, tocaría leer la documentación al respecto.